Flask API集成Twilio Webhook实现WhatsApp交互式消息报错求助
Twilio WhatsApp交互式消息实现指引
错误原因
你遇到的AttributeError: 'Message' object has no attribute 'quick_reply',是因为Twilio Python SDK的Message类本身没有直接接收字符串的quick_reply方法,且你之前的代码错误地将每个快速回复作为单独消息发送——WhatsApp的交互式按钮/列表是附加在单条消息上的,需要通过特定结构构建。
实现方案
1. 发送快速回复(按钮消息)
快速回复按钮必须附加在同一条消息中,使用QuickReply类构造按钮项,示例代码:
from flask import Flask, request from twilio.twiml.messaging_response import MessagingResponse, Message, QuickReply app = Flask(__name__) @app.route('/twilio/webhook', methods=['POST']) def twilio_webhook(): data = request.form user_message = data.get('Body', '').strip().lower() if user_message == 'hi': response = MessagingResponse() # 创建主消息,附加快速回复按钮 msg = response.message("Hello! Please select an option:") msg.quick_reply(QuickReply(title="Option 1", payload="option1")) msg.quick_reply(QuickReply(title="Option 2", payload="option2")) msg.quick_reply(QuickReply(title="Option 3", payload="option3")) return str(response) if __name__ == '__main__': app.run(debug=True)
用户点击按钮后,payload值会作为消息内容发送到你的Webhook,可通过request.form.get('Body')获取。
2. 发送列表消息
列表消息需要通过interactive参数构造,支持分组选项,示例代码:
from flask import Flask, request from twilio.twiml.messaging_response import MessagingResponse app = Flask(__name__) @app.route('/twilio/webhook', methods=['POST']) def twilio_webhook(): data = request.form user_message = data.get('Body', '').strip().lower() if user_message == 'hi': response = MessagingResponse() msg = response.message("Hello! Please select an option:") # 构造列表消息结构 msg.interactive( type="list", action={"button": "查看选项"}, sections=[ { "title": "功能选项", "rows": [ {"id": "option1", "title": "Option 1", "description": "选项1的详细说明"}, {"id": "option2", "title": "Option 2", "description": "选项2的详细说明"}, {"id": "option3", "title": "Option 3", "description": "选项3的详细说明"} ] } ] ) return str(response) if __name__ == '__main__': app.run(debug=True)
用户选择列表项后,对应的id值会作为消息内容发送到Webhook。
主动发送消息(非Webhook响应场景)
如果需要主动向用户推送交互式消息,可使用Twilio Client:
from twilio.rest import Client # 替换为你的Twilio账号信息 account_sid = '你的Account SID' auth_token = '你的Auth Token' client = Client(account_sid, auth_token) # 发送快速回复 client.messages.create( from_='whatsapp:+14155238886', # Twilio官方WhatsApp测试号 body='Hello! Please select an option:', to='whatsapp:+你的用户号码', quick_reply={ "type": "quick_reply", "quick_replies": [ {"title": "Option 1", "payload": "option1"}, {"title": "Option 2", "payload": "option2"} ] } ) # 发送列表消息 client.messages.create( from_='whatsapp:+14155238886', body='Hello! Please select an option:', to='whatsapp:+你的用户号码', interactive={ "type": "list", "action": {"button": "查看选项"}, "sections": [ { "title": "功能选项", "rows": [ {"id": "option1", "title": "Option 1", "description": "选项1详情"} ] } ] } )
注意事项
- 确保你的Twilio号码已开通WhatsApp功能并完成验证。
- 快速回复
title不超过20字符,列表项title不超过24字符,description不超过72字符。 - 交互式消息仅支持WhatsApp渠道,短信渠道不兼容。
内容的提问来源于stack exchange,提问作者manju
相关产品推荐
相关产品推荐

