如何在Laravel项目中通过Twilio WhatsApp API接收消息?
接收Twilio WhatsApp回复消息的实现方案
1. 配置Twilio控制台的Webhook
登录Twilio控制台,找到你的WhatsApp绑定号码,在「Messaging」设置里,找到「When a message comes in」选项,设置Webhook URL为你的Laravel项目公网可访问的路由地址(比如https://your-domain.com/twilio/webhook),请求方法选择POST。
本地开发时,需要用ngrok之类的工具暴露本地端口,生成临时HTTPS地址,比如
ngrok http 8000后,用https://xxxx-xx-xx-xx-xx.ngrok.io/twilio/webhook作为Webhook URL。
2. 添加Laravel路由
在routes/web.php或routes/api.php中添加POST路由:
use App\Http\Controllers\TwilioController; Route::post('/twilio/webhook', [TwilioController::class, 'handleIncomingMessage']);
3. 编写消息处理逻辑
在TwilioController中实现handleIncomingMessage方法,接收并处理Twilio推送的消息数据:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Twilio\Rest\Client; use Twilio\Security\RequestValidator; class TwilioController extends Controller { public function handleIncomingMessage(Request $request) { // 可选:验证请求是否来自Twilio $validator = new RequestValidator(env('TWILIO_AUTH_TOKEN')); $signature = $request->header('X-Twilio-Signature'); $webhookUrl = url('/twilio/webhook'); if (!$validator->validate($signature, $webhookUrl, $request->all())) { return response('Invalid request', 403); } // 获取核心消息参数 $senderNumber = $request->input('From'); // 格式:whatsapp:+1234567890 $messageContent = $request->input('Body'); $yourTwilioNumber = $request->input('To'); // 这里可以根据业务需求处理消息:比如存入数据库、触发业务逻辑、自动回复等 // 示例:自动回复消息给发送方 $twilioClient = new Client(env('TWILIO_SID'), env('TWILIO_AUTH_TOKEN')); $twilioClient->messages->create( $senderNumber, [ 'from' => $yourTwilioNumber, 'body' => "已收到你的消息:{$messageContent}" ] ); // 必须返回200响应给Twilio,避免重复推送 return response('OK', 200); } }
4. 排除CSRF验证
由于Twilio的Webhook请求无法携带Laravel的CSRF令牌,需要在App\Http\Middleware\VerifyCsrfToken中排除该路由:
protected $except = [ '/twilio/webhook', ];
5. 测试流程
- 启动本地Laravel服务,用ngrok生成公网地址
- 在Twilio控制台更新Webhook URL为ngrok地址+路由路径
- 用绑定的WhatsApp号码给你的Twilio号码发送消息
- 查看Laravel日志或数据库,确认消息已被接收处理
内容的提问来源于stack exchange,提问作者Manoj Jangid
相关产品推荐
相关产品推荐

