Dialogflow V2, API Java не будет отображать базовую карту - PullRequest
0 голосов
/ 04 ноября 2018

Создание приложения-помощника Google и создание сервера в Котлине с использованием Java-сервлетов. Я хочу отправить BasicCard пользователю.

Этот код правильно отправляет простое сообщение

    @Throws(ServletException::class, IOException::class)
override fun doPost(req: HttpServletRequest, resp: HttpServletResponse) {
    val json = GsonFactory.getDefaultInstance().createJsonGenerator(resp.writer)
    val res = GoogleCloudDialogflowV2WebhookResponse()
    res.fulfillmentText = "Works Yah"
    json.serialize(res)
    json.flush()
}

Этот код выглядит так, как будто он должен отправить BasicCard, но получает "Не удалось проанализировать ответ Dialogflow в AppResponse из-за пустого речевого ответа",

Есть мысли?

   @Throws(ServletException::class, IOException::class)
override fun doPost(req: HttpServletRequest, resp: HttpServletResponse) {

    val json = GsonFactory.getDefaultInstance().createJsonGenerator(resp.writer)

    val text = GoogleCloudDialogflowV2IntentMessage()
    text.simpleResponses = GoogleCloudDialogflowV2IntentMessageSimpleResponses()
    text.simpleResponses.simpleResponses = mutableListOf(GoogleCloudDialogflowV2IntentMessageSimpleResponse().setDisplayText( "Hello Dialogflow"))

    val card = GoogleCloudDialogflowV2IntentMessage()
    card.basicCard = GoogleCloudDialogflowV2IntentMessageBasicCard().setTitle("Hello World")

    val res = GoogleCloudDialogflowV2WebhookResponse()
    res.fulfillmentMessages = mutableListOf<GoogleCloudDialogflowV2IntentMessage>()
    res.fulfillmentMessages.add(text)
    res.fulfillmentMessages.add(card)

    json.serialize(res)
    json.flush()
}

1 Ответ

0 голосов
/ 06 ноября 2018

После неожиданного уровня боли и смущающего количества времени я понял это.

@Throws(ServletException::class, IOException::class)
override fun doPost(req: HttpServletRequest, resp: HttpServletResponse) {
    val gson = GsonFactory.getDefaultInstance()       
    val json = gson.createJsonGenerator(resp.writer)

    val text = GoogleCloudDialogflowV2IntentMessage()
    // platform has to be set
    text.platform = "ACTIONS_ON_GOOGLE"
    text.simpleResponses = GoogleCloudDialogflowV2IntentMessageSimpleResponses()
     //set both display text and text to speech
    val simpleText = GoogleCloudDialogflowV2IntentMessageSimpleResponse()
                       .setTextToSpeech("text to speech")
                       .setDisplayText("display text")
    text.simpleResponses.simpleResponses = mutableListOf(simpleText)


    val card = GoogleCloudDialogflowV2IntentMessage()
    card.platform = "ACTIONS_ON_GOOGLE"
    // you must have an image and/or formatted text set on the card
    card.basicCard = GoogleCloudDialogflowV2IntentMessageBasicCard().setTitle("Hello World").setFormattedText("The Text")


    val myResponse = GoogleCloudDialogflowV2WebhookResponse()
    // text is necessary and it must be first in the list
    myResponse.fulfillmentMessages = mutableListOf(text, card)

    json.serialize(myResponse)
    json.flush()
}

Это рабочий код, но было бы неплохо, если бы Google мог выпустить Java API, подобный API Node dialogflow. Или, по крайней мере, базовый уровень документации для существующих объектов Java JSON.

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