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