当我需要带有建议按钮的简单响应时,以下代码可与AoG SDK v2完全兼容:
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
类型。在AoG SDK的v1中,我可以执行以下操作(参数
ask()
gets是无效的Response
对象,并且在v2中不起作用):app.ask({
items: [{
simpleResponse: {
textToSpeech: 'blabla',
displayText: 'display text',
}
}],
suggestions: [
{ title: 'Suggestion 1' },
{ title: 'Suggestion 2' },
]
});
有谁知道我该如何针对v2?
最佳答案
您可以使用RichResponseOptions
类型将RichResponse作为纯JSON存储,对RichResponse项目使用原始GoogleActionsV2RichResponseItem
类型。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项目here的当前有效原始值的完整列表。
关于node.js - 在Google Node.js SDK v2上的操作:conv.ask(),对象作为参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50505592/