Как отправить FulfillmentMessages как часть Dialogflow v2 WebhookResponse? - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь отправить обратно сообщения о выполнении как часть Dialogflow v2 API WebhookResponse.

Это работает:

Отправка только FulfillmentText как частимой ответ работает нормально (тестирование приложения в Действиях в Google Simulator отвечает с правильным значением FulfillmentText):

func random(c *gin.Context, wr dialogflow.WebhookRequest)  {
    log.Println("Random action detected")

    fullfillment := dialogflow.WebhookResponse{
        FulfillmentText: "foobar",
    }

    c.JSON(http.StatusOK, fullfillment)
}

JSON, отправляемый обратно:

{"fulfillment_text":"foobar"}

Ответв симуляторе:

{
    "conversationToken": "[]",
    "finalResponse": {
    "richResponse": {
        "items": [
            {
                "simpleResponse": {
                    "textToSpeech": "foobar"
                }
            }
        ]
    }
},
    "responseMetadata": {
    "status": {
        "message": "Success (200)"
    },
    "queryMatchInfo": {
        "queryMatched": true,
            "intent": "24db2044-f2fb-4607-9897-1de757990622"
    }
}
}

Это не так:

Но как только я пытаюсь отправить обратно какие-либо реальные сообщения (текстовое сообщение, базовая карта, простойОтвет и т. Д.) Как часть FulfillmentMessages, тест не пройден:

func random(c *gin.Context, wr dialogflow.WebhookRequest)  {
    log.Println("Random action detected")

    textMessage := dialogflow.Intent_Message_Text{
        Text: []string{"foo", "bar"},
    }

    fullfillment := dialogflow.WebhookResponse{
        FulfillmentText: "foobar",
        FulfillmentMessages: []*dialogflow.Intent_Message{
            {
                Message: &dialogflow.Intent_Message_Text_{
                    Text: &textMessage,
                },
            },
        },
    }

    c.JSON(http.StatusOK, fullfillment)
}

Отосланный JSON:

{
    "fulfillment_text":"foobar",
    "fulfillment_messages":[
        {
            "Message":{
                "Text":{
                    "text":[
                        "foo",
                        "bar"
                    ]
                }
            }
        }
    ]
}

Ответ в симуляторе:

{
    "responseMetadata": {
    "status": {
        "code": 10,
            "message": "Failed to parse Dialogflow response into AppResponse because of empty speech response",
            "details": [
            {
                "@type": "type.googleapis.com/google.protobuf.Value",
                "value": "{\"id\":\"917d8ac3-3f0f-4953-b556-4dec27b8bbb8\",\"timestamp\":\"2018-10-22T09:00:45.488Z\",\"lang\":\"en-us\",\"result\":{},\"alternateResult\":{},\"status\":{\"code\":206,\"errorType\":\"partial_content\",\"errorDetails\":\"Webhook call failed. Error: Failed to parse webhook JSON response: Cannot find field: Message in message google.cloud.dialogflow.v2.Intent.Message.\"},\"sessionId\":\"ABwppHHSbrqOCPRp_DAPDLepL6YjSNpbzQ61CIBDTMl99rtRqfaWq-y0HtExb1--k6bcaL4CACQMeiVF3p-x5qk\"}"
            }
        ]
    }
}
}

Я предполагаю, что JSON, который отправляет мой веб-сервис, неверен, поскольку он возвращает ... Cannot find field: Message ... как часть своего ответа.Я использую надлежащий Golang SDK для Dialogflow, хотя (https://godoc.org/google.golang.org/genproto/googleapis/cloud/dialogflow/v2#WebhookResponse)

Это было проверено на Действиях на Симуляторе Google, а также на запуске реального Помощника Google на Пикселе 2.

Может кто-нибудь указатьмне в правильном направлении, что я делаю не так?

1 Ответ

0 голосов
/ 22 октября 2018

Как вы сказали, проблема в структуре ответа json.Ниже приведен рабочий ответ webhook

{
"fulfillmentMessages": [
    {
        "text": {
            "text": [
                "foo",
                "bar"
            ]
        }
    }
],
"fulfillmentText": "foobar",
"source": "Test"
}
  1. Сообщения отсутствуют в реальной структуре.
  2. fullfillment_text должно быть executementText
  3. Внешний Текст должен быть текст
  4. fullfillment_messages должен быть выполнениеMessages
...