MrO*_*iri 5 chatbot facebook-messenger dialogflow-es
我正在使用Dialogflow v2和Node.js客户端SDK开发用于Messenger的聊天机器人。但是我对自定义有效载荷有疑问。当我使用Dialogflow提供的控制台时,我收到如下响应:
{ "payload": { "facebook": { "attachment": { "payload": { ...
Run Code Online (Sandbox Code Playgroud)
但是,当我从JS服务器获得响应时,自定义有效负载已被序列化。这是我收到的对象:
{ facebook: { structValue: { fields: [Object] }, kind: 'structValue' } }
Run Code Online (Sandbox Code Playgroud)
是否可以反序列化此对象以获得与Dialogflow中提供的相同的自定义有效负载结构?
先感谢您。
编辑:显然 Dialogflow 发布了自己的解决方案以及 Node.js SDK 的示例: dialogflow-nodejs-client-v2/samples/structjson.js
除了 Vikas Jain 的解决方案之外,您还可以编写自己的(递归)转换函数。
就像是:
processCustomPayloadMessage(object) {
let outputMessage = Array.isArray(object) ? [] : {};
Object.entries(object).forEach(([key, value]) => {
if (value.kind == 'structValue') {
outputMessage[key] = this.processCustomPayloadMessage(value.structValue.fields);
} else if (value.kind == 'listValue') {
outputMessage[key] = this.processCustomPayloadMessage(value.listValue.values);
} else if (value.kind == 'stringValue') {
outputMessage[key] = value.stringValue;
} else if (value.kind == 'boolValue') {
outputMessage[key] = value.boolValue;
} else {
outputMessage[key] = value;
}
});
return outputMessage;
}
// call this method with your response message
this.processCustomPayloadMessage(message.payload.fields);
Run Code Online (Sandbox Code Playgroud)
小智 4
这是使用Struct 协议构建的
为了进行转换,您需要使用 google proto 缓冲区,即google.protobuf 我使用下面的代码来执行此操作。
import google.protobuf as pf
pf.json_format.MessageToJson(response.query_result.fulfillment_messages[1].payload, including_default_value_fields=False)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1955 次 |
| 最近记录: |