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

Dialogflow CX中是否有方法实现恢复历史对话的功能?

Dialogflow CX 对话恢复功能实现方案

Dialogflow CX 与 ES 的状态管理逻辑存在核心差异:ES 依赖全局 context 管理会话状态,CX 采用 页面(Page)、会话参数(Session Parameters)、会话历史(Session History) 分层管理逻辑,可通过以下步骤复刻 ES 的对话恢复能力:

实现步骤

  • 持久化会话核心状态
    每次完成与 Dialogflow CX 的交互后,将三类数据关联用户唯一标识存储到业务服务端:
    1. 本次会话使用的 session ID
    2. 当前会话所处的流(Flow)ID、页面(Page)ID完整路径
    3. 所有已填充的会话参数、待触发的意图/事件标识
  • 会话恢复时注入状态
    用户返回发起新请求时,先拉取对应用户存储的历史状态,调用 CX detectIntent 接口时完成两个配置:
    1. 复用历史存储的同个 session ID(CX 默认保留30分钟内的 session 数据,超过30分钟的会话需要手动注入全量状态)
    2. 在请求的 queryParameters 字段中传入 currentPage 参数(值为历史存储的页面完整路径),同时通过 parameters 字段传入所有历史会话参数
  • 长周期会话补充配置
    对间隔超过30分钟的会话,除注入上述参数外,可额外在请求中添加对应自定义事件,触发页面跳转的同时自动复用已有参数,无需用户重复输入。

实现代码参考(Node.js)

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

// 会话恢复&请求逻辑
async function resumeUserSession(userId, userInput) {
  // 从业务数据库拉取用户历史会话状态
  const historyState = await fetchUserSessionState(userId);
  const sessionPath = cxClient.projectLocationAgentSessionPath(
    process.env.CX_PROJECT_ID,
    process.env.CX_LOCATION,
    process.env.CX_AGENT_ID,
    historyState.sessionId
  );

  const request = {
    session: sessionPath,
    queryParams: {
      currentPage: historyState.currentPagePath,
      parameters: historyState.savedParams
    },
    queryInput: {
      text: {
        text: userInput
      },
      languageCode: 'zh-CN'
    }
  };

  const [response] = await cxClient.detectIntent(request);
  // 更新存储用户最新会话状态
  await updateUserSessionState(userId, {
    sessionId: historyState.sessionId,
    currentPagePath: response.queryResult.currentPage.name,
    savedParams: response.queryResult.parameters
  });
  return response;
}

若你的机器人涉及多流转跳逻辑,持久化状态时需要额外存储当前激活的流列表,避免会话恢复时出现流上下文丢失问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 02:45:05