Java: Как извлечь параметры из ответа Google Dialogflow V2 - PullRequest
0 голосов
/ 22 мая 2019

Кто-нибудь знает, как извлечь параметры, возвращаемые ответом dialogflow v2 от Google? Я могу правильно понять намерения и уверенность, так как для этого есть методы высокого уровня. Но, похоже, нет способа получить параметры / список параметров. Ответ содержит 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"

Ответы [ 2 ]

0 голосов
/ 30 июня 2019

Я был слишком сосредоточен, чтобы проанализировать и отобразить протобуфер в Java-бин. Потратив часы и разместив вопрос, мне пришла в голову простая мысль найти способ конвертировать протобуфер в json. А потом все было просто, потому что я нашел этот API

JsonFormat.printToString (protoMessage)

Теперь это звучит просто, но это все потому, что я изменил свою стратегию решения проблем с изучения протобуфера и его декодирования, чтобы вместо этого использовать преобразователь прото в json и работать с форматом json, который понимает намного лучше.

0 голосов
/ 27 мая 2019

Было бы что-то вроде этого:

            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()));

                }

            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...