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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:55:33