Facebook Leadgen Webhook订阅异常:代码返回成功但无数据推送至webhook.site
我之前也碰到过类似的情况,结合你的描述和代码,给你梳理几个最可能遗漏的配置点:
未完成Webhook回调URL的验证
Facebook要求必须先验证回调URL的有效性,才会开始推送数据。你调用subscribed_apps接口只是完成了字段订阅,但如果之前没在开发者后台完成验证步骤,Facebook不会发送任何推送。
验证步骤:进入应用后台→Products→Webhooks→Page,点击“Verify”按钮,此时Facebook会向你的callback_url发送一个GET请求,你需要返回hub.challenge参数的原始值。你的代码只处理了订阅的POST请求,要确保服务器能正确响应这个GET验证请求。使用了错误的访问令牌
订阅页面Webhook必须使用页面访问令牌,而不是用户访问令牌。你传入的token参数如果是用户令牌,即便有manage_pages权限,也可能无法触发推送。可以通过调用FB.api('/me/accounts', 'get', {access_token: 用户令牌})获取目标页面的专属令牌,再用这个令牌调用subscribe函数。页面与Webhook的订阅关联未生效
虽然代码执行返回成功,但建议手动去开发者后台确认:进入Webhooks的Page订阅列表,检查是否已勾选leadgen字段,且回调URL和你代码里的完全一致(包括末尾的字符,别复制错)。另外要确认订阅的页面ID和你传入id参数的页面是同一个。忽略了Facebook的Webhook日志
应用后台的Webhook模块里有个“Logs”选项,这里会显示Facebook所有推送尝试的记录——包括成功/失败状态、错误详情。如果推送失败,日志里会明确告诉你原因(比如URL超时、验证失败、权限不足等),这是排查问题最快的方式。Lead Gen表单未关联应用
确保你测试用的线索生成表单,已经在表单设置里开启了和你的应用的Webhook集成。如果表单没绑定到应用,即便页面订阅了leadgen字段,线索生成后也不会触发推送。
再核对下你的代码:
function subscribe(id, token) { FB.api('/' + id + '/subscribed_apps', 'post', { object: 'page', subscribed_fields: "leadgen", access_token: token, callback_url: "https://webhook.site/93e65665-xxxxxx-xxxx" }, function (response) { if (response && response.success) { console.log(response); } }); };
代码逻辑是对的,重点就是上面提到的几个配置环节,尤其是URL验证和令牌类型。
内容的提问来源于stack exchange,提问作者Guy Biber




