Когда мне нужен простой ответ с кнопки предложений, следующий код отлично работает с v2 SDK AoG:
conv.ask(new SimpleResponse({
speech: 'blabla',
text: 'display text',
}), new Suggestions(['Suggestion 1', 'Suggestion 2']));
Но: Есть случаи, когда у меня есть полный ответ, подготовленный как JSON, сохраненный во внешнем файле, и я хочу использовать его в качестве входного параметра для ask ():
conv.ask({
simpleResponse: {
textToSpeech: 'blabla',
displayText: 'display text',
},
suggestions: [
{ title: 'Suggestion 1' },
{ title: 'Suggestion 2' },
],
});
Проблема в том, что файл кнопки предложений не отображаются.
Я использую TypeScript, и объект, переданный в ask (), имеет допустимый тип Response.
В v1 AoG SDK я мог бы сделать следующее (аргумент, который получает ask(), не является допустимым объектом Response и не работает в версии 2):
app.ask({
items: [{
simpleResponse: {
textToSpeech: 'blabla',
displayText: 'display text',
}
}],
suggestions: [
{ title: 'Suggestion 1' },
{ title: 'Suggestion 2' },
]
});
Кто-нибудь знает, как я могу это сделать для v2?
Мне нужно сохранить его как JSON (он находится в файле перевода)
Можете ли вы разделить запрос на две части: conv.ask (simpleResponse) и conv.ask (предложения)?





Вы можете использовать тип RichResponseOptions для хранения RichResponse как чистого JSON, используя необработанный тип GoogleActionsV2RichResponseItem для элементов RichResponse.
response.json
{
"items": [
{
"simpleResponse": {
"textToSpeech": "blabla",
"displayText": "display text"
}
}
],
"suggestions": [
"Suggestion 1",
"Suggestion 2"
]
}
app.js
const { dialogflow, RichResponse } = require('actions-on-google')
// load the response as JSON
const response = require('./response.json')
const app = dialogflow()
app.intent('Default Welcome Intent', conv => {
conv.ask(new RichResponse(response))
})
Отправляя анонимные объекты в conv.ask, библиотека интерпретирует их как необработанные RichResponse Предметы. Так что это работает, когда вы отправляете SimpleResponses. Чтобы отправить несколько необработанных элементов RichResponse, вам понадобятся отдельные элементы для каждого элемента и вызовите conv.ask несколько раз или распределите их в один conv.ask.
conv.ask({
simpleResponse: {
textToSpeech: 'blabla',
displayText: 'display text',
}
})
conv.ask({
simpleResponse: {
textToSpeech: 'blabla',
displayText: 'display text',
}
})
Но, как вы заметили, предложения - это элементы нет RichResponse, поскольку они являются непосредственно частью самого объекта RichResponse. Вам нужно создать весь объект RichResponse, чтобы вносить предложения.
Вы можете найти весь список действующих на данный момент необработанных значений для элементов RichResponse здесь.
Что касается того, как он работает в V2, нужно ли вам хранить его как JSON, а не как объект JS, как в вашем первом примере? В этом случае это сработает