如何解决Laravel中使用WhatsApp API的GraphMethodException错误
解决WhatsApp Business API GraphMethodException(code:100, subcode:33)错误
针对你遇到的这个错误,以下是逐一排查的解决方案:
1. 确认Graph API版本是否正确
WhatsApp Business API要求使用v18.0及以上的版本,旧版本已不再支持messages端点操作。你可以在config/services.php的whatsapp配置中指定API版本:
'whatsapp' => [ 'from-phone-number-id' => env('WHATSAPP_FROM_PHONE_NUMBER_ID'), 'token' => env('WHATSAPP_TOKEN'), 'api-version' => 'v18.0', // 添加这一行,使用最新稳定版 ],
2. 验证Phone Number ID的有效性
确保你填写的WHATSAPP_FROM_PHONE_NUMBER_ID是绑定到WhatsApp Business账户的电话号码ID,而非应用ID、商务管理平台ID或其他ID。
- 登录Meta商务管理平台,进入「业务设置」→「WhatsApp账户」→「电话号码」,复制对应号码的ID即可。
3. 检查令牌的权限与有效性
你的访问令牌必须具备以下权限:
whatsapp_business_messagingpages_messaging
同时要确保令牌是针对当前WhatsApp Business账户生成的,且未过期。可以通过Meta的Graph API调试工具直接验证令牌权限,或发送基础请求测试。
4. 确认通知类的消息格式
确保你的AppuntamentiPazienti通知类中,toWhatsApp方法返回的消息结构符合WhatsAPI要求:
public function toWhatsApp($notifiable) { return (new WhatsAppMessage) ->content([ 'messaging_product' => 'whatsapp', 'to' => $notifiable->phone, // 必须带国家码,比如+39xxxxxxxxx 'text' => [ 'body' => '你的消息内容' ] ]); }
注意:收件人号码必须包含完整国家码,不能省略。
5. 直接测试基础API请求
绕过Laravel包,用curl直接调用Meta的Graph API,确认问题是否出在配置而非代码:
curl -X POST "https://graph.facebook.com/v18.0/你的电话号码ID/messages" \ -H "Authorization: Bearer 你的访问令牌" \ -H "Content-Type: application/json" \ -d '{ "messaging_product": "whatsapp", "to": "收件人完整号码(带国家码)", "text": { "body": "测试消息" } }'
如果这个请求报错,说明是Meta端的配置问题(权限、号码ID错误等);如果请求成功,再排查Laravel包的配置或通知类代码。
内容的提问来源于stack exchange,提问作者carelli99
相关产品推荐
相关产品推荐

