Partial Outageshare-external
Unable to connect lead webhook - webhook.delivery.rejected.
2

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?

Mark
Asked about 4 months ago
Selected Answer
1

We use ruby on rails, there is no SDK for ruby on rails, these snippets are copy & pasted from our code base and should be edited before reproducing the issue.

The perform method calls all subsequent calls .

It first fetches the user_id which is used to check what pages the user has given us access to.

It then fetches the page_access_tokens for all the accessible pages.

It then loops through the pages and subscribes to the webhooks

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
July 19 at 5:54 AM
Mark
1

I'm still stuck with this issue.

September 4 at 12:34 PM
Mark