node.js - 以对象作为参数的 Google Node.js SDK v2 : conv. Ask() 上的操作

标签 node.js actions-on-google

当我需要一个带有建议按钮简单响应时,以下代码与 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/

相关文章:

javascript - 使用 AJAX 时 Passport + Express4 未通过身份验证

actions-on-google - 如何从 Google Actions 演示中删除 "Sure, here is the test version of <action name>"?

actions-on-google - 抱歉,此操作在模拟中不可用

node.js - 谷歌上的操作不起作用,但它们在对话流中起作用

dialogflow-es - 从未启用DialogFlow内联编辑器-Google Action 代码实验室

node.js - 为什么 console.log(buffer) 给我一个十六进制列表?

javascript - 每次刷新都会向 socket.io 连接添加另一个监听器

node.js - MiddlewareConsumer 的 Nest/node.js 问题

node.js - 将系统 mongodb 用于多个 docker 容器?

node.js - 如何从 REST API 输出信息