I've been working on processing leads through our system and encountered an issue. I've enabled webhooks on my app, subscribed to leadgen, and provided my callback redirect URL. However, whenever I create a lead, it should be sent to my server, but when I track the status, it shows "failed" with the message "webhook.delivery.rejected." I've looked in the logs of my application but the request is not entering my server. I'm trying to understand why this is happening and how to ensure my configuration is correct for receiving leads.
Previously, I completed the process manually by subscribing to each webhook with a seperate app, and it worked fine. Now, I want to programmatically do this using Facebook’s API and one app. Here's the request I'm using to subscribe to the webhook for leads: curl -X POST "https://graph.facebook.com/{page_id}/subscribed_apps?subscribed_fields=leadgen&access_token={page_token}" \ -H "Content-Type: application/json" \ -d '{ "override_callback_uri": "https://api-development.recrubo.app/facebook/webhooks/{organization_id}", "verify_token": "{verify_token}" }'
Here are my debugging steps so far: I've used the Facebook sharing debugger tool with my callback URL, which returns a 200 status. You can check the results here: Debugging Results. I've also tested the leadgen field we subscribed to and confirmed that we do receive leads on our server. Additionally, in my manual process, I use a Facebook app per page.
Is there any place to see more error logging in the developer app?
def perform
@user_id = get_user_id
@pages = get_page_access_tokens
@pages.each do |page|
@facebook.subscribe_to_webhook(page[:id], page[:token])
token = @facebook.get_long_lived_access_token(page[:token])
options = {
ad_account_id: @ad_account_id
}
@access_token ||= @organization.access_tokens.create!(token: token, options: options, name: 'Meta', user_id: @user_id)
end
@access_token
end
def get_page_access_tokens(user_id, access_token)
response = Faraday.get("#{ENV.fetch('FACEBOOK_GRAPH_API')}/#{user_id}/accounts") do |req|
req.headers['Content-Type'] = 'application/json'
req.params['access_token'] = access_token
end
raise "Unable to get page access token server responded with #{response.body} and status #{response.status}" unless response.success?
data = JSON.parse(response.body)
page_data = data['data']
page_data.map { |page| { id: page['id'], name: page['name'], token: page['access_token'] } }
end
def subscribe_to_webhook(page_id, page_token)
response = Faraday.post("#{ENV.fetch('FACEBOOK_GRAPH_API')}/#{page_id}/subscribed_apps?subscribed_fields=leadgen") do |req|
req.headers['Content-Type'] = 'application/json'
req.params['access_token'] = page_token
req.body = {
override_callback_uri: "#{ENV.fetch('API_URL')}/facebook/webhooks/#{@organization['id']}",
verify_token: {local_token}
}.to_json
end
raise "Unable to subscribe to leadgen webhook server responded with #{response.body} and status #{response.status}" unless response.success?
response
end
def get_user_id(access_token)
response = Faraday.get("#{ENV.fetch('FACEBOOK_GRAPH_API')}/me") do |req|
req.headers['Content-Type'] = 'application/json'
req.params['fields'] = 'id'
req.params['access_token'] = access_token
end
raise "Unable to get user id server responded with #{response.body} and status #{response.status}" unless response.success?
JSON.parse(response.body)['id']
end
I'm still stuck with this issue.