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

如何在等待耗时超过Dialogflow时限的进程时维持会话正常运行

Dialogflow 5秒超时问题解决方案

问题1:长耗时进程运行时同步执行其他流程

  • 移除阻塞主流程的await uiFx()写法,将长耗时任务转为后台异步执行,主流程触发任务后即可继续执行其他逻辑,无需等待任务返回。
  • 若需同时执行多个并行任务,可通过Promise.all()批量启动异步任务,不需要即时返回结果的任务不要加await,避免阻塞响应。

问题2:先返回「请稍候」提示重置计时的可行性

完全可以,这是Dialogflow处理长耗时任务的标准实现方案,核心逻辑是先返回即时响应避免超时,任务执行完成后再主动推送最终结果,修改后的代码参考如下:

const { SessionsClient } = require('@google-cloud/dialogflow');
const sessionClient = new SessionsClient();

async function GetCertain_info(agent) {
  // 先返回等待提示,第一时间响应避免触发5秒超时
  agent.add("请稍候,正在为您查询相关信息...");
  const currentSession = agent.session;

  // 异步执行长耗时任务,不阻塞当前响应
  uiFx()
    .then(finalResult => {
      // 任务完成后主动向当前会话推送结果
      return sessionClient.detectIntent({
        session: currentSession,
        queryInput: {
          event: {
            name: "QUERY_RESULT_READY",
            parameters: { result: finalResult },
            languageCode: "zh-CN"
          }
        }
      });
    })
    .catch(err => {
      // 异常时主动推送错误提示
      return sessionClient.detectIntent({
        session: currentSession,
        queryInput: {
          event: {
            name: "QUERY_ERROR",
            parameters: { errMsg: err },
            languageCode: "zh-CN"
          }
        }
      });
    });
}

async function uiFx() {
  const { ui } = require('./uia.js');
  // 简化原有Promise包装,直接返回ui()的执行结果即可
  return ui()
    .then(msg => {
      console.log("Destination Message :  " + msg);
      return "Here are the information on " + msg;
    })
    .catch(msg => {
      console.log(msg);
      return "查询失败:" + msg;
    });
}

额外配置说明

  • 你需要提前在Dialogflow控制台创建两个自定义意图,分别绑定QUERY_RESULT_READY和QUERY_ERROR事件,意图回复直接引用对应参数$result、$errMsg即可。
  • 不要使用全局变量存储返回结果,多用户并发场景下会出现数据混乱,直接通过Promise链传递结果即可。
  • 如果你对接的是第三方消息渠道,可以直接调用渠道的主动发消息接口推送结果,不需要走Dialogflow事件触发,逻辑更简单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 17:42:03