1

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

点击显示参考 我知道我们可以使用 api 来设置会话参数。所以我想通过 API 方式将参数传递给 webhook。

Step 1:前端,使用detectintent() API,填写queryParams项。
第二步:Google dialogflow cx server 将参数设置为会话参数。
第三步:Webhook接收google端的函数调用。我们可以从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);
4

3 回答 3

3

问题已解决。它需要被序列化/转换。

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

根据您的协议或客户端库语言,这是一个映射、关联数组、符号表、字典或 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' }
      }
    }
  }
}
于 2021-02-24T20:18:18.327 回答
0

尝试像这样构造参数:

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

参考

于 2021-02-27T00:28:34.387 回答
0

您可以使用pb-util将 JSON 对象编码为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
  },
};
于 2021-06-01T18:41:32.640 回答