如何从 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"])