如何使用Dialogflow CX API pass parameters to webhook?似乎detectIntent() set session queryParams 不起作用

How to use Dialogflow CX API pass parameters to webhook?It seemed that detectIntent() set session queryParams does not work

根据 google dialogflow cx 文档:https://cloud.google.com/dialogflow/cx/docs/concept/parameter https://cloud.google.com/dialogflow/cx/docs/reference/rest/v3/QueryParameters

click to show the reference 我知道我们可以使用 api 来设置会话参数。所以我想通过 API 方式将参数传递给 webhook。

步骤1:Front-结束,使用detectintent()API,填写queryParams项。
步骤2:Google dialogflow cx server 将参数设置为会话参数。
步骤 3:Webhook 接收 google 端函数 call.We 可以从 http 请求中找到所有会话参数。

就我而言,我只能接收到DialogFlow Agent中设置的变量,但我没有接收到任何通过detectintent()设置的参数API。我想我一定做错了什么,谁能告诉我怎么做?谢谢。

我的代码如下(Nodejs 代码):

  const sessionPath = client.projectLocationAgentSessionPath(
    projectId,
    location,
    agentId,
    sessionId
  );
 
  var mapParameters = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
 
 const request = {
    session: sessionPath,
    
    "queryInput": {
      
      "text": {
        "text": query,
      },
      languageCode,
    },

    'queryParams': {
      'timeZone': 'America/Los_Angeles',
      'parameters': {
        "fields":mapParameters
      }
    },

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

问题已解决。必须是 serialized/transformed.

因此对于文档中提到的参数类型,需要将其作为“结构”发送到DialogFlow。

根据您的协议或客户端库语言,这是一个映射、关联数组、符号 table、字典或 JSON 对象,由 (MapKey , MapValue) 对:

正确的结构如下:

{
  session: 'projects/xxxxx...........',
  queryInput: {
    text: { text: 'hello world!' },
    languageCode: 'en'
  },
  queryParams: {
    timeZone: 'America/Los_Angeles',
    parameters: {
      fields: {
        ID: { kind: 'numberValue', numberValue: 5 },
        Email: { kind: 'stringValue', stringValue: 'xxxxx@gmail.com' },
        Phone: { kind: 'stringValue', stringValue: '7789511xxx' },
        Domain: { kind: 'stringValue', stringValue: 'xxxxxx.com' }
      }
    }
  }
}

尝试像这样构造您的参数:

{
  queryParams: {
    parameters: {
      fields: {
        Michael: {
          numberValue: 95
        }
      }
    }
  }
}

Reference

您可以使用 pb-util for encoding JSON object into google.protobuf.Struct(以及解码响应)。
您可以通过以下方式在 detectIntent api 中传递参数:

const {struct} = require('pb-util');

const params = struct.encode({
  param1: param1Value,
  param2: param2Value
});

const request = {
  session: sessionPath,
  queryInput: {
    text: {
        text: query,
    },
    languageCode,
  },
  queryParams: {
    parameters: params
  },
};