Google Node.js SDK v2 上的操作:conv.ask() 以对象作为参数
Actions on Google Node.js SDK v2: conv.ask() with Object as Argument
当我需要一个 简单的响应 具有 建议按钮 时,以下代码与 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 做到这一点?
您可以对 RichResponse 项目使用 RichResponseOptions
type to store a RichResponse as pure JSON using the raw 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 items。所以当您发送 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。
当我需要一个 简单的响应 具有 建议按钮 时,以下代码与 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 做到这一点?
您可以对 RichResponse 项目使用 RichResponseOptions
type to store a RichResponse as pure JSON using the raw 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 items。所以当您发送 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。