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

10-09 22:23