You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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审核通过的官方消息模板发送。

解决步骤:

  1. 确认发送时机:若用户超过24小时未主动互动,禁止发送自由消息,必须切换为模板消息。
  2. 创建并审核消息模板:
    登录Twilio控制台,进入WhatsApp业务管理页面,创建符合场景的模板(如通知、验证类),提交审核(一般1-2天通过)。
  3. 用模板发送消息:修改控制器代码,用模板替代自由消息:
    $message = $twilio->messages
        ->create(
            $receiverphone,
            [
                'from' => $sendernumber,
                'contentSid' => '你的模板SID' // 替换为审核通过的模板SID
                // 旧版本API可使用'template'参数:
                // 'template' => [
                //     'name' => '你的模板名称',
                //     'language' => ['code' => 'zh']
                // ]
            ]
        );
    
    测试阶段可使用Twilio提供的预审核模板,无需自行提交审核。

内容的提问来源于stack exchange,提问作者Manoj Jangid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 08:55:35