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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:17:46