Laravel中Twilio WhatsApp API动态号码配置、消息接收及报错解决
Laravel集成Twilio WhatsApp API问题解决方案
现有代码情况
路由
Route::post('whatsapp_send_message','Front_managerController@WhatsappSendMessage');
当前进度
- 控制器已从请求拿到接收号码
$receiverphone,从环境变量读取发送号码$sendernumber,但Twilio API调用还未配置动态收发号 - 前端Blade通过隐藏字段传递接收号码
需求1:配置Twilio API动态收发号码
直接在Twilio消息发送代码里,将from和to分别绑定动态获取的发送/接收号码即可,注意号码必须带whatsapp:前缀和正确国家码(比如whatsapp:+8613xxxxxxxxx)。
控制器示例代码:
use Twilio\Rest\Client; use Illuminate\Http\Request; public function WhatsappSendMessage(Request $request) { // 处理号码格式,确保带whatsapp前缀和国家码 $receiverphone = 'whatsapp:' . trim($request->input('receiver_phone')); $sendernumber = 'whatsapp:' . env('TWILIO_WHATSAPP_NUMBER'); $twilio = new Client(env('TWILIO_ACCOUNT_SID'), env('TWILIO_AUTH_TOKEN')); try { $message = $twilio->messages ->create( $receiverphone, // 动态接收号 [ 'from' => $sendernumber, // 动态发送号 'body' => '你的消息内容', 'mediaUrl' => ['https://your-domain.com/attachment.pdf'] // 附件地址 ] ); return response()->json(['success' => true, 'message_id' => $message->sid]); } catch (\Exception $e) { return response()->json(['success' => false, 'error' => $e->getMessage()]); } }
重点:接收号码必须是用户在WhatsApp注册的完整号码,不能省略国家码,也不能包含空格、括号这类特殊字符。
需求2:接收WhatsApp用户的回复消息
要接收用户回复,需完成两步:配置Twilio Webhook,编写接收逻辑。
1. 配置Twilio Webhook
登录Twilio控制台,找到你的WhatsApp发送号,在"Incoming Messages"设置中,将Webhook URL改为你的Laravel项目路由(比如https://your-domain.com/whatsapp_receive_message),请求方法选择POST。
2. 编写接收路由和控制器方法
路由:
Route::post('whatsapp_receive_message','Front_managerController@WhatsappReceiveMessage');
控制器方法:
use Twilio\Rest\Client; use Illuminate\Http\Request; public function WhatsappReceiveMessage(Request $request) { // 提取Twilio传递的回复数据 $senderPhone = $request->input('From'); $replyContent = $request->input('Body'); $messageSid = $request->input('MessageSid'); // 可在此将回复存入数据库或触发业务逻辑,示例: // DB::table('whatsapp_replies')->insert([ // 'sender_phone' => $senderPhone, // 'content' => $replyContent, // 'message_sid' => $messageSid, // 'created_at' => now() // ]); // 可选:给用户回消息(注意必须在24小时互动窗口内,否则需用模板) $twilio = new Client(env('TWILIO_ACCOUNT_SID'), env('TWILIO_AUTH_TOKEN')); $twilio->messages->create( $senderPhone, [ 'from' => env('TWILIO_WHATSAPP_NUMBER'), 'body' => '已收到你的回复:' . $replyContent ] ); // Twilio要求必须返回200状态码,否则会反复重试 return response('', 200); }
注意:若自动回复用户,超过24小时窗口必须使用审核通过的WhatsApp模板,否则会触发63016错误。
错误码63016解决方法
这个报错核心是超出了WhatsApp的24小时自由消息窗口:
- WhatsApp规则:用户主动发消息后的24小时内,你可以发送任意内容的自由消息;超过该时间,必须使用Twilio审核通过的官方消息模板发送。
解决步骤:
- 确认发送时机:若用户超过24小时未主动互动,禁止发送自由消息,必须切换为模板消息。
- 创建并审核消息模板:
登录Twilio控制台,进入WhatsApp业务管理页面,创建符合场景的模板(如通知、验证类),提交审核(一般1-2天通过)。 - 用模板发送消息:修改控制器代码,用模板替代自由消息:
测试阶段可使用Twilio提供的预审核模板,无需自行提交审核。$message = $twilio->messages ->create( $receiverphone, [ 'from' => $sendernumber, 'contentSid' => '你的模板SID' // 替换为审核通过的模板SID // 旧版本API可使用'template'参数: // 'template' => [ // 'name' => '你的模板名称', // 'language' => ['code' => 'zh'] // ] ] );
内容的提问来源于stack exchange,提问作者Manoj Jangid
相关产品推荐
相关产品推荐

