如何从 dialogflow API 访问 protobuf 响应中的信息
How to access infos in protobuf response from dialogflow API
我在访问 google 对话流 api
后收到的 protobuf 对象的值时遇到严重问题
(... create google cloud session object ...)
text_input = dialogflow.types.TextInput(text=text, language_code=language_code)
query_input = dialogflow.types.QueryInput(text=text_input)
response = session_client.detect_intent(request={"session": session, "query_input": query_input})
from google.protobuf import json_format
response_json = json_format.MessageToDict(response)
错误是:
AttributeError: 'MapComposite' object has no attribute 'DESCRIPTOR'
基本上我有两个问题:
a) 我无法将 protobuf 转换为 json(在这里我很容易就能看到如何访问我正在寻找的信息)
b) 我无法理解 protobof 数据结构。有字典吗?
感谢 a) 或 b) 中的任何帮助者。
顺便说一句:我正在寻找一种在 API 响应中访问 response.parameters
的方法。
为斯科特编辑:
response.parameters 是一个对象:
此处描述了参数对象:
https://cloud.google.com/dialogflow/es/docs/reference/rest/v2/DetectIntentResponse#QueryResult
你觉得有意义吗?因为我不明白如何访问这个对象中的值。
您可以使用 MessageToDict
方法,如下所示,将 protobuf 序列化为字典,并使用 response._pb
而不是 response
。
from google.protobuf.json_format import MessageToDict
response_json = MessageToDict(response._pb)
现在,您现在可以浏览要访问的 parameters
的字典,如下所示,因为 parameters
是 inside/under queryResult
(基于结构)。
print(response_json["queryResult"]["parameters"])
我在访问 google 对话流 api
后收到的 protobuf 对象的值时遇到严重问题(... create google cloud session object ...)
text_input = dialogflow.types.TextInput(text=text, language_code=language_code)
query_input = dialogflow.types.QueryInput(text=text_input)
response = session_client.detect_intent(request={"session": session, "query_input": query_input})
from google.protobuf import json_format
response_json = json_format.MessageToDict(response)
错误是:
AttributeError: 'MapComposite' object has no attribute 'DESCRIPTOR'
基本上我有两个问题:
a) 我无法将 protobuf 转换为 json(在这里我很容易就能看到如何访问我正在寻找的信息)
b) 我无法理解 protobof 数据结构。有字典吗?
感谢 a) 或 b) 中的任何帮助者。
顺便说一句:我正在寻找一种在 API 响应中访问 response.parameters
的方法。
为斯科特编辑:
response.parameters 是一个对象:
此处描述了参数对象: https://cloud.google.com/dialogflow/es/docs/reference/rest/v2/DetectIntentResponse#QueryResult
你觉得有意义吗?因为我不明白如何访问这个对象中的值。
您可以使用 MessageToDict
方法,如下所示,将 protobuf 序列化为字典,并使用 response._pb
而不是 response
。
from google.protobuf.json_format import MessageToDict
response_json = MessageToDict(response._pb)
现在,您现在可以浏览要访问的 parameters
的字典,如下所示,因为 parameters
是 inside/under queryResult
(基于结构)。
print(response_json["queryResult"]["parameters"])