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