如何在Laravel中使用Twilio发送带快速回复按钮的WhatsApp消息?
在Laravel中为Twilio聊天机器人添加快速回复按钮
前提准备
确保你已经完成Twilio Laravel SDK的安装与配置:
- 安装依赖包:
composer require twilio/sdk
- 在项目根目录的
.env文件中填入Twilio凭证:
TWILIO_SID=你的Twilio账号SID TWILIO_AUTH_TOKEN=你的Twilio认证令牌 TWILIO_PHONE_NUMBER=你的Twilio号码(格式示例:whatsapp:+1234567890)
创建Webhook控制器与路由
- 生成处理消息的控制器:
php artisan make:controller TwilioChatbotController
- 在
routes/web.php中添加POST路由,用于接收Twilio的消息回调:
use App\Http\Controllers\TwilioChatbotController; Route::post('/twilio/webhook', [TwilioChatbotController::class, 'handleMessage']);
实现带快速回复的消息逻辑
在TwilioChatbotController中编写处理方法,构造包含快速回复按钮的响应:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Twilio\TwiML\MessagingResponse; use Twilio\TwiML\WhatsApp\Message; use Twilio\TwiML\WhatsApp\QuickReply; class TwilioChatbotController extends Controller { public function handleMessage(Request $request) { // 初始化Twilio响应对象 $response = new MessagingResponse(); // 设置消息主体内容 $message = $response->message('您好,请问需要什么帮助?'); // 创建三个快速回复按钮 $orderReply = new QuickReply([ 'type' => 'text', 'title' => '查询订单状态', 'payload' => 'ORDER_QUERY' // 自定义标识,用于后续识别用户选择 ]); $supportReply = new QuickReply([ 'type' => 'text', 'title' => '联系人工客服', 'payload' => 'CONTACT_SUPPORT' ]); $faqReply = new QuickReply([ 'type' => 'text', 'title' => '查看常见问题', 'payload' => 'VIEW_FAQ' ]); // 将按钮绑定到消息上 $message->addQuickReply($orderReply); $message->addQuickReply($supportReply); $message->addQuickReply($faqReply); // 返回XML格式的响应给Twilio return response($response)->header('Content-Type', 'application/xml'); } }
关键说明
- 渠道限制:Twilio快速回复仅支持WhatsApp和Facebook Messenger渠道,无法在SMS消息中使用。
- 用户选择处理:用户点击快速回复按钮后,Twilio会将对应按钮的
payload值(部分渠道会传递标题内容)通过webhook发送到你的应用,你可以通过$request->input('Payload')或$request->input('Body')获取该值,进而编写分支逻辑处理不同请求。 - 本地测试:由于Twilio需要访问公网地址,本地开发时可以用ngrok将Laravel服务暴露到公网,例如:
ngrok http 8000
之后将生成的公网地址(如https://xxxx-xx-xx-xx-xx.ngrok.io/twilio/webhook)配置为Twilio号码的消息webhook地址即可测试。
内容的提问来源于stack exchange,提问作者Ibrahim Ibrahim
相关产品推荐
相关产品推荐

