如何通过Dialogflow Webhook按顺序向Facebook Messenger发送多类型消息
解决Dialogflow Webhook给Facebook Bot依次发送文本、Airline模板和快速回复的问题
这个问题我之前帮不少开发者踩过坑——核心就是要在Dialogflow的Webhook响应里正确组织多条Facebook平台专属消息的顺序,而不是把不同类型的消息混在一个结构里。你单独发送没问题,说明权限和单条消息的格式都对,只是没找对批量按序发送的正确姿势。
核心思路
Dialogflow允许通过fulfillmentMessages数组(v2版本)或responseMessages数组(v3版本)按顺序推送多条平台特定消息。你只需要把纯文本、Airline模板、带快速回复的文本这三条消息,按你想要的顺序放进这个数组里,Dialogflow就会依次把它们发送给Facebook Bot。
完整示例代码(Node.js Webhook)
下面是一个可直接复用的Webhook响应示例,完全匹配你的需求:
// 假设这是你的Express Webhook处理路由 app.post('/dialogflow-webhook', (req, res) => { // 构建按顺序发送的三条消息 const sequentialMessages = [ // 1. 纯文本消息 { platform: "FACEBOOK", text: { text: ["您好,这是为您查询到的航班详情:"] } }, // 2. Airline行程模板消息(参数按你的实际需求调整) { platform: "FACEBOOK", attachment: { type: "template", payload: { template_type: "airline_itinerary", intro_message: "您的航班已确认", locale: "zh_CN", passenger_info: [ { name: "Katie Temrowski", passenger_id: "PASS_001" } ], flight_info: [ { flight_number: "UA890", departure_airport: { airport_code: "SFO", city: "旧金山", terminal: "T3" }, arrival_airport: { airport_code: "PEK", city: "北京" }, departure_time: "2024-06-15T12:00:00-07:00", arrival_time: "2024-06-16T15:30:00+08:00", travel_class: "商务舱" } ], price_info: [ { title: "机票总价", amount: 1200, currency: "USD" } ], base_price: 1200, total_price: 1200, currency: "USD" } } }, // 3. 带快速回复的文本消息 { platform: "FACEBOOK", text: { text: ["请问您需要进一步操作吗?"] }, quickReplies: [ { content_type: "text", title: "改签航班", payload: "ACTION_CHANGE_FLIGHT" }, { content_type: "text", title: "取消订单", payload: "ACTION_CANCEL_ORDER" }, { content_type: "text", title: "无需帮助", payload: "ACTION_NO_HELP" } ] } ]; // 组装Dialogflow Webhook响应 const webhookResponse = { fulfillmentMessages: sequentialMessages // 如果是Dialogflow v3版本,替换成: // webhookResponse: { // fulfillmentResponse: { // messages: sequentialMessages // } // } }; res.json(webhookResponse); });
关键注意事项
- 顺序就是数组的顺序:
fulfillmentMessages里的消息会严格按照数组索引的顺序发送,所以一定要把文本放在第一个,Airline模板第二个,快速回复第三个。 - 快速回复要绑定到文本消息:快速回复不能单独作为一条消息,必须和对应的文本消息放在同一个
fulfillmentMessage对象里(你之前单独发文本+快速回复没问题,说明这个格式你已经掌握了)。 - Airline模板参数要合规:虽然你单独发送没问题,但要注意时间格式必须是ISO 8601,locale要和用户的语言匹配,否则可能出现显示异常。
- 平台指定要准确:每条消息都必须加上
platform: "FACEBOOK",否则Dialogflow不会把它推送给Facebook Bot。
测试的时候可以用Dialogflow的测试控制台,或者直接在Facebook Messenger里和Bot对话,就能看到三条消息按顺序弹出了。
内容的提问来源于stack exchange,提问作者Katie Temrowski
相关产品推荐
相关产品推荐

