设置WhatsApp应用时Facebook/WhatsApp Webhook验证失败求助
确保端点公网可访问
Facebook的Webhook验证请求仅能发送到公网可达的HTTPS端点,先确认你的服务已部署到公网,对应端口(默认443,自定义端口需在端点URL中明确指定,如https://xxx.com:8443/webhook)已开放。可通过curl命令测试外部访问性:curl -X GET "https://your-webhook-endpoint.com/webhook?hub.mode=subscribe&hub.challenge=12345&hub.verify_token=your_token"
若无法访问,排查服务器防火墙、云服务商安全组是否放行对应端口,或CDN/反向代理是否拦截请求。校验Verify Token完全匹配
保证Facebook后台填写的Verify Token与Webhook代码中的校验token完全一致,包括大小写、特殊字符,无额外空格或换行。以下是典型的校验逻辑示例:from flask import request @app.route('/webhook', methods=['GET']) def verify_webhook(): received_token = request.args.get('hub.verify_token') if received_token == "YOUR_SET_VERIFY_TOKEN": return request.args.get('hub.challenge') return "Invalid Token", 403检查SSL证书有效性
Facebook要求Webhook必须使用受信任CA颁发的有效SSL证书,禁止自签名证书。通过浏览器访问端点,查看地址栏锁图标确认证书状态,确保证书未过期、域名匹配。核对路由与请求方法配置
验证阶段Facebook发送的是GET请求,需确保你的端点支持GET方法,且路由路径与后台填写的完全一致,无拼写错误(比如后台填/webhook,代码路由不能是/whatsapp-webhook)。排查反向代理/负载均衡拦截
若服务前有Nginx、Cloudflare等代理,确认它们未修改请求参数或拦截GET请求。比如Nginx配置需正确传递query参数,Cloudflare安全规则未将Facebook IP列入黑名单。检查后台配置细节
确认Webhook选择的API版本为最新稳定版,订阅字段勾选正确,关联的WhatsApp账号已绑定到应用且状态正常。
内容的提问来源于stack exchange,提问作者Andy Weinstein

