使用Flask+Twilio WhatsApp沙箱,消息Body未发送至回调URL
问题解决:Twilio WhatsApp沙箱无法接收消息Body
核心原因
你当前配置的是状态回调URL(Status Callback URL),这个URL仅用于接收消息状态变更(如已读、发送成功)的通知,不会携带用户发送的消息内容(Body字段)。真正负责接收用户消息的是Twilio沙箱中的**“当收到消息时的Webhook URL”**配置项。
修复步骤
- 登录Twilio控制台,进入WhatsApp沙箱的配置界面
- 找到「When a message comes in」(当收到消息时)的配置区域
- 将你的ngrok回调URL(例如
https://xxxx.ngrok.io/chatbot/receive)填入该字段,请求方法选择POST - 状态回调URL可以保留(用于跟踪消息发送状态),但不要和消息接收的WebHook混淆
验证代码调整
你的Flask代码可以优化为直接回复用户消息,方便测试是否成功接收Body:
from flask import Flask, request, Response from twilio.twiml.messaging_response import MessagingResponse app = Flask(__name__) @app.route("/chatbot/receive", methods=["POST"]) def reply_whatsapp(): # 获取用户发送的消息内容 incoming_message = request.form.get('Body', '') print(f"用户消息:{incoming_message}") # 生成Twilio要求的XML响应 response = MessagingResponse() response.message(f"已收到你的消息:{incoming_message}") return Response(str(response), mimetype='application/xml') if __name__ == "__main__": app.run(debug=True)
测试流程
- 重启Flask服务,确保ngrok隧道正常运行
- 使用沙箱绑定的WhatsApp账号,向Twilio沙箱号码发送消息
- 查看Flask控制台,即可看到打印的消息Body,同时WhatsApp会收到自动回复
内容的提问来源于stack exchange,提问作者VicenteC
相关产品推荐
相关产品推荐

