如何使用Twilio实现WhatsApp动态内容列表消息(兼容Twilio Studio)
实现WhatsApp动态列表消息(Twilio Studio集成方案)
核心思路
利用Twilio Functions生成动态列表内容,再通过Twilio Studio的HTTP请求+发送消息部件完成交互,完全适配用户发起对话后的无审核场景。
步骤1:创建Twilio Function生成动态列表Payload
Twilio Functions可直接从你的数据源(数据库/内部API)拉取服务商预约数据,并构造符合WhatsApp要求的列表消息结构:
- 登录Twilio控制台,进入「Functions & Assets」→「Create Function」,选择「Blank」模板。
- 替换函数代码为以下示例(根据你的数据源调整):
exports.handler = async function(context, event, callback) { // 1. 从你的数据源获取服务商数据(替换为实际逻辑) const serviceProviders = await fetchYourServiceProviders(); // 2. 构造WhatsApp列表消息的Sections const sections = serviceProviders.map(provider => ({ title: `服务商专区`, rows: [{ id: provider.id, // 用户选择后会返回此ID,用于后续预约逻辑 title: `ID: ${provider.id} - ${provider.name}`, description: `可预约时段: ${provider.availableTime}` }] })); // 3. 构造完整的列表消息Payload const messagePayload = { messaging_product: "whatsapp", recipient_type: "individual", to: event.userNumber, // 从Studio传递的用户号码 type: "interactive", interactive: { type: "list", header: { type: "text", text: "选择服务商预约" }, body: { text: "请从下方列表选择你要预约的服务商ID" }, footer: { text: "点击选项完成预约" }, action: { button: "选择服务商", sections: sections } } }; callback(null, messagePayload); }; // 模拟数据获取函数,替换为你的实际逻辑 async function fetchYourServiceProviders() { return [ { id: "SP001", name: "张师傅", availableTime: "9:00-18:00" }, { id: "SP002", name: "李师傅", availableTime: "10:00-19:00" } ]; }
- 保存函数,记录函数的访问URL(如
https://your-function-domain.twil.io/get-provider-list)。
步骤2:配置Twilio Studio流程
- 打开你的Studio Flow,在用户触发对话的节点后添加「HTTP Request」小部件:
- 请求方法选择
GET或POST(对应Function的处理逻辑) - 请求URL填入刚才的Function地址
- 添加参数
userNumber,值设为{{trigger.message.From}}(自动获取用户的WhatsApp号码)
- 请求方法选择
- 添加「Send Message」小部件,连接HTTP请求的「Success」分支:
- 消息类型选择「JSON」
- 消息内容填入
{{widgets.http_request_1.body}}(直接复用HTTP请求返回的列表消息Payload)
- 处理用户选择后的逻辑:用户点击列表选项时,Twilio会将选中的
row.id(服务商ID)通过trigger.Message.Body或widgets.send_message_1.InteractiveResponse传递到Studio,可添加「Split Based On...」小部件,根据ID分支到对应的预约确认流程。
关键注意事项
- 确保Twilio Function的「Access Control」设置为「Allow all Twilio accounts to call this Function」,否则Studio无法调用。
- 列表消息的每个
row.id需唯一,便于后续识别用户选择的服务商。 - 注意WhatsApp列表消息的限制:每个section最多10行,最多支持10个section。
内容的提问来源于stack exchange,提问作者DS9
相关产品推荐
相关产品推荐

