You need to enable JavaScript to run this app. 如何通过Dialogflow CX API向Webhook传参?detectIntent的queryParams不生效
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Dialogflow CX API向Webhook传参?detectIntent的queryParams不生效

Dialogflow CX API传参Webhook读取异常修正

当前实现的两处核心偏差

  • 参数传参结构不符合客户端要求
    代码中使用原生JS Map 对象赋值给queryParams.parameters.fields,和Dialogflow CX Node.js SDK的参数序列化逻辑完全不匹配:
    1. SDK不支持直接接收Map实例,要求传入普通JavaScript对象
    2. 不需要手动嵌套fields结构层,SDK会自动完成protobuf Struct格式的序列化,手动嵌套反而会导致参数结构错位,服务端无法解析
  • 未遵循会话参数白名单机制
    这是webhook只能读取到预先配置变量的根本原因:Dialogflow CX的会话参数存在白名单校验规则,只有在Agent控制台「会话变量」配置页中提前注册过的参数名,才会被服务端持久化到会话上下文,最终同步到webhook请求中。未在白名单内的参数,哪怕请求格式完全正确,服务端也会直接丢弃,不会写入会话存储,webhook自然无法读取。

注意:通过queryParams传入的未注册参数,仅在本次单次请求的流程运行中临时生效,既不会持久化到会话,也不会推送到webhook的请求体里。

修正后的可运行代码

const sessionPath = client.projectLocationAgentSessionPath(
  projectId,
  location,
  agentId,
  sessionId
);

// 替换Map为普通JS对象,直接定义键值对
const customParameters = {
  Michael: 95,
  Bob: 75,
  Tracy: 85
};

const request = {
  session: sessionPath,
  queryInput: {
    text: {
      text: query,
    },
    languageCode,
  },
  queryParams: {
    timeZone: 'America/Los_Angeles',
    // 直接挂载参数对象,去掉手动嵌套的fields层
    parameters: customParameters
  }
};

const [response] = await client.detectIntent(request);

落地校验步骤

  • 先进入Agent控制台的会话变量配置页面,把需要从API传入的参数(Michael、Bob、Tracy)全部提前注册,匹配对应的参数值类型(示例中为数字类型)
  • 替换代码中的参数传参逻辑,移除Map实例和手动嵌套的fields结构
  • 确认webhook侧是从请求体的sessionInfo.parameters路径下读取参数——如果从pageInfo.parameters或者intent抽取参数路径读取,是无法拿到持久化会话参数的

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 02:06:10