有人知道如何提取Google dialogflow v2响应返回的参数吗?由于可以使用高级方法,因此我能够正确地获得意图和信心。但是似乎没有方法可以获取参数/参数列表。响应包含具有参数的google protobuf Struct。有谁知道如何从中提取参数名称和值。
以下是示例回复
query_text: "next friday"
parameters {
fields {
key: "appointmentDate"
value {
struct_value {
fields {
key: "date"
value {
string_value: "2019-05-31T12:00:00+10:00"
}
}
}
}
}
}
all_required_params_present: true
fulfillment_messages {
text {
text: ""
}
}
intent {
name: "projects/dksjdkjsjksd-c824f/agent/intents/89a100c4973a"
display_name: "captureDate"
}
intent_detection_confidence: 1.0
language_code: "en"
答案 0 :(得分:0)
有点像这样:
for (Entry<String, Value> entry : queryResult.getParameters().getFieldsMap().entrySet()) {
if (entry.getValue().getKindCase().getNumber() == Value.STRING_VALUE_FIELD_NUMBER) {
log.debug("FOUND PARAM. KEY:" + entry.getKey() + " STRING VALUE: "
+ entry.getValue().getStringValue());
} else if (entry.getValue().getKindCase().getNumber() == Value.STRUCT_VALUE_FIELD_NUMBER) {
log.debug("FOUND PARAM. KEY:" + entry.getKey() + " STRUCT VALUE: "
+ entry.getValue().getStructValue());
}
else if (entry.getValue().getKindCase().getNumber() == Value.NUMBER_VALUE_FIELD_NUMBER) {
log.debug("FOUND PARAM. KEY:" + entry.getKey() + " NUMBER VALUE: "
+ String.valueOf(entry.getValue().getNumberValue()));
}
}
答案 1 :(得分:0)
我太专心于分析原型缓冲区并将其映射到Java bean。在花费了几个小时并发布问题后,我想到了一个简单的想法,以找到一种将原始缓冲区转换为json的方法。然后一切都很简单,因为我找到了这个API
JsonFormat.printToString(protoMessage)
这听起来很简单,但这只是因为我改变了解决问题的策略,从学习原型缓冲区并对其进行解码,改为使用原型转换为json转换器并使用json格式,这会更好地理解。