You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Facebook线索Webhook投递失败(webhook.delivery.rejected)排查求助

问题描述

处理线索(lead)时出现异常:已在应用中启用Webhook并订阅leadgen事件、配置回调URL,但创建线索后,Webhook状态显示“failed”,提示“webhook.delivery.rejected”,且服务器未收到任何请求。

此前手动为每个Webhook单独使用不同应用订阅时一切正常;现在希望通过Facebook API用单个应用完成程序化订阅,所用请求如下:

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}"
}'

调试操作

  • 使用Facebook分享调试工具测试回调URL,返回200状态
  • 使用Lead Ads RTU调试工具发送测试线索,服务器仍未收到请求

代码实现

perform方法负责调用后续操作:先获取user_id确认用户授权的页面,再获取这些页面的page_access_tokens,最后遍历页面订阅Webhook。代码如下:

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

补充信息(Edit 1)

检查订阅配置后获取到以下数据:

  • 请求graph.facebook.com/v20.0{page_id}/subscribed_apps返回的结果:
    页面订阅配置
  • 请求graph.facebook.com/v20.0{app_id}/subscriptions返回的结果:
    应用订阅配置

疑问

开发者应用后台是否有更多错误日志可查看?


内容的提问来源于stack exchange,提问作者mark DE Jong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 15:28:18