【问题标题】:How to parse struct object in the response from detectIntent of dialogflow v2?如何解析来自dialogflow v2的detectIntent响应中的结构对象?
【发布时间】:2018-11-29 01:08:31
【问题描述】:

我想知道解析dialogflow v2的detectIntent响应的最佳实践。

dialogflow v2 的响应包括在 Protocol Buffer 中定义的struct 对象。比如queryResult中的参数。

我知道可以使用 structToJson 来解析它,它包含在适用于 Node.js 的 dialogflow v2 SDK 中作为示例代码。所以我现在的代码是这样的。

const dialogflow = require("dialogflow");
const structjson = require("./dialogflow/structjson");

identify_intent(sentence, options){
    const session_path = this._sessions_client.sessionPath(this._project_id, options.session_id);

    // The text query request.
    const request = {
        session: session_path,
        queryInput: {
            text: {
                text: sentence,
                languageCode: this._language
            }
        }
    };

    // Send request and log result
    return this._sessions_client.detectIntent(request).then(responses => {
        let result = responses[0].queryResult;

        if (result.parameters){
            result.parameters = structjson.structProtoToJson(result.parameters);
        }

        return result;
    });
}

我正在使用 sample code 之后的 structProtoToJson() 手动解析响应,但这不切实际,因为我不仅要为参数而且还要为实现和其他在结构中格式化的对象这样做。

我想知道在 Node.js 应用程序中解析来自 detectIntent 的响应的最佳做法是什么。

【问题讨论】:

  • 问题解决了吗?我面临同样的问题。如果您使用自定义有效负载作为响应,则结果 json 很难解析。

标签: dialogflow-es


【解决方案1】:

您无需执行任何操作即可将queryResult.parameters 对象转换为可用的形式。它是一个具有以下结构的 JavaScript 对象:

{
  fields: {
    paramName1: { stringValue: 'value1', kind: 'stringValue' },
    paramName2: { stringValue: 'value2', kind: 'stringValue' }
  }
}

Intent 的参数列表中的每个参数都有一个键/值对。

【讨论】:

  • 我认为这种格式只是为了保持字段的类型而不考虑语言。因此,当我们访问数据时,我认为我们应该将其转换为以下结构,而 structProtoToJson 确实做到了。 {参数名称1:“值1”,参数名称2:“值2”}
  • { paramName1: "value1", paramName2: "value2" }
  • 欢迎您将对象转换为您喜欢的任何结构,但没有义务这样做:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 2017-10-12
  • 2019-01-03
相关资源
最近更新 更多