Почему этот конкретный ответ веб-перехватчика (передается DialogFlow обратно в Google Assistant)
{
"fulfillmentMessages" : [ {
"payload" : {
"google" : {
"richResponse" : {
"items" : [ {
"simpleResponse" : {
"textToSpeech" : "And are you male or female?"
}
} ]
},
"expectUserResponse" : true
}
},
"text" : {
"text" : [ "And are you male or female?" ]
}
}, {
"quickReplies" : {
"quickReplies" : [ "Male", "Female" ]
}
} ],
"fulfillmentText" : "And are you male or female?",
"outputContexts" : [ ... ]
}
Ошибка как:
"MalformedResponse: Failed to parse Dialogflow response into AppResponse because of empty speech response"
В случае Google Assistant ответы не являются частью fulfillmentMessages
, а находятся в объекте payload
, который должен располагаться на верхнем уровне вашего ответа.
Обратите внимание, что quickReplies
и text
действительны для сообщений выполнения Dialogflow, но не для Google Assistant. Вместо этого вы должны использовать поля simpleResponse
и suggestions
и поместить их в ответ.
Так, например, вот ответ для Google Assistant, который состоит из чипов предложений и простого ответа:
{
payload: {
google: {
richResponse: {
items: [{
simpleResponse: {
textToSpeech: "Are you male or female"
}
}],
suggestions: [
{ title: 'Male' },
{ title: 'Female' }
]
}
}
},
outputContexts: [...]
}
Для сообщений выполнения Dialogflow (например, в консоли Dialogflow) это было бы примерно так:
{
fulfillmentMessages: [
{ text: { text: ['Are you male or female'] } },
{ quickReplies: { quickReplies: ['Male', 'Female'] } }
],
outputContexts: [...]
}
Надеюсь, это поможет.