Facebook Workplace聊天机器人Webhook回调URL配置失败求助
解决Facebook Workplace Webhook验证失败的问题
Hey,我之前帮同事排查过几乎一模一样的问题,咱们一步一步来搞定它:
先确认你的PHP验证逻辑是否完整
Facebook Workplace的Webhook验证是靠GET请求触发的,你的代码必须精准满足这几个要求,差一点都不行:
- 要严格校验请求里的
hub.verify_token和你后台设置的verify_token完全匹配(大小写、特殊符号、空格一个都不能错) - 验证通过后,必须只返回
hub.challenge的值,不能输出任何额外内容——哪怕是一个空格、一行注释、或者PHP的报错信息都会导致验证失败 - 验证不通过时,返回403禁止访问就行
你贴的代码只写了开头,大概率是没写完完整逻辑,给你一个经过实测的完整代码示例:
<?php // 这里的token要和你在Workplace后台输入的完全一致,别打错! $verify_token = "你的专属验证token"; // 处理Webhook验证的GET请求 if ($_SERVER['REQUEST_METHOD'] === 'GET') { $received_token = $_GET['hub_verify_token'] ?? ''; $challenge = $_GET['hub_challenge'] ?? ''; if ($received_token === $verify_token) { // 关键:只返回challenge值,不要加任何多余输出 header('Content-Type: text/plain'); echo $challenge; exit; } else { header('HTTP/1.1 403 Forbidden'); echo '验证token不匹配'; exit; } } // 验证通过后,处理Workplace发来的POST消息请求 if ($_SERVER['REQUEST_METHOD'] === 'POST') { $input_data = file_get_contents('php://input'); // 这里写你处理聊天消息的逻辑 echo 'OK'; exit; } ?>
再排查服务器和URL的坑
代码没问题的话,还有几个容易忽略的点:
- 你的服务器必须能被Facebook访问到:如果是本地开发环境(比如localhost),Facebook的服务器根本连不上,得用内网穿透工具(比如ngrok),或者把代码部署到公网服务器
- HTTPS证书必须合法:虽然你用了HTTPS,但自签名证书Facebook不认,得用Let's Encrypt这类受信任的CA颁发的免费证书
- URL路径要完全对应:比如你后台填的是
https://your-site.com/workplace-bot/webhook.php,那这个路径下必须就是上面的验证代码,不能有重定向、404,也不能是目录 - 服务器防火墙别挡着:检查你的服务器安全组/防火墙,是否允许来自Facebook IP段的请求,有些防火墙会默认拦截外部的GET请求
最后手动测试验证逻辑
你可以自己模拟Facebook的验证请求,用curl或者直接在浏览器访问:
curl "https://你的域名/webhook.php?hub_mode=subscribe&hub_verify_token=你的token&hub_challenge=123456"
如果返回的是123456,说明验证逻辑没问题;如果返回其他内容或者报错,就对着代码再调整。
内容的提问来源于stack exchange,提问作者Saili Jaguste
相关产品推荐
相关产品推荐

