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

Dialogflow机器人如何通过Webhook实现类似session.sendTyping()的输入提示?

实现Dialogflow机器人在Teams/Skype中显示“正在输入...”提示

当然可以通过Webhook实现这个功能!因为你的机器人集成的Teams和Skype都是基于Microsoft Bot Framework的,而Dialogflow允许通过Webhook返回适配Bot Framework的特定payload来触发Typing指示器。下面是具体的实现步骤和代码示例:


核心原理

Dialogflow的Webhook响应支持自定义payload字段,针对Microsoft系渠道(Teams/Skype),我们可以在这个payload中嵌入Bot Framework标准的Typing活动,渠道收到后就会自动显示“正在输入...”的提示。

实现步骤

1. 构造Typing提示的Webhook响应结构

在你的Firebase Cloud Function中,需要返回包含Typing payload的Dialogflow响应。典型的JSON结构如下:

{
  "fulfillmentMessages": [
    {
      "payload": {
        "microsoft": {
          "type": "typing"
        }
      }
    },
    {
      "text": {
        "text": ["这是机器人的实际回复内容"]
      }
    }
  ]
}

这里第一个消息是触发Typing的payload,第二个是实际的文本回复——渠道会先显示“正在输入”,然后自动切换到文本内容。

2. Firebase Cloud Functions代码示例(Node.js)

如果你需要模拟耗时操作(比如调用外部API),可以先返回Typing提示,延迟后再发送实际回复:

const functions = require("firebase-functions");
const { WebhookClient } = require("dialogflow-fulfillment");

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((req, res) => {
  const agent = new WebhookClient({ request: req, response: res });

  function handleIntent(agent) {
    // 先发送Typing提示
    agent.add({
      payload: {
        microsoft: {
          type: "typing"
        }
      }
    });

    // 模拟2秒的耗时处理(比如调用数据库/外部API)
    return new Promise((resolve) => {
      setTimeout(() => {
        // 发送实际回复
        agent.add("处理完成啦!这是我的回复内容~");
        resolve();
      }, 2000);
    });
  }

  // 绑定你的意图处理函数
  let intentMap = new Map();
  intentMap.set("你的意图名称", handleIntent);
  agent.handleRequest(intentMap);
});

注意事项

  • 这个方案仅对支持Bot Framework Typing活动的渠道有效,你的Teams和Skype完全符合要求。
  • Typing提示的显示时长由渠道自动控制,通常会持续到下一条消息发送,或者几秒后自动消失。
  • 确保Firebase函数的超时时间足够覆盖你的耗时操作(默认是60秒,可在Firebase控制台调整)。

内容的提问来源于stack exchange,提问作者sanjeev Kamal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:51:18