Webhook 生成的列表提取选项由用户选择

Webhook generated list fetch option selected by user

我是 API.AI 和 Google 操作方面的新手。我有一个由履行生成的项目列表。我想获取用户选择的选项。我试过阅读文档,但我似乎无法理解它。

https://developers.google.com/actions/assistant/responses#handling_a_selected_item

我也试过设置跟进意图,但没用。它总是以回退响应告终。

我正在尝试搜索产品或其他内容,结果使用列表选择器格式显示。我想获取我选择的选项。这是一个 search_product 意图,我有一个跟进意图 choose_product

这是对您问题的侧面回答 - 但如果您是 Actions 的新手,那么您可能并不真正了解设计自己的 Actions 的最佳方法。

与其关注更高级的响应类型(例如列表),不如关注您希望与用户进行的对话。不要试图限制他们的反应——扩大你认为你可以接受的范围。专注于基本的会话元素和你的基本会话响应。

一旦您实施了良好的对话,您就可以返回并添加有助于该对话的元素。该列表应该是用户 可以 做什么的建议,而不是他们 必须 做什么的限制。

对于对话界面,我们必须跳出对话框思考。

我认为问题是通过单击列表(而不是说出)生成的响应最终会发生 actions_intent_OPTION 事件,因此 API.AI 需要您执行一个两件事:

  1. 使用此事件(以及其他上下文,如果您愿意,以帮助确定正在处理哪个列表)创建一个 Intent,如下所示:

  1. 或者创建一个具有您想要的特定上下文的回退意图(即 - 不是您的默认回退意图)。

后者似乎是最好的方法,因为它还将涵盖语音响应。

(或者两者都做,我想。)

您有两种选择来获取有关 API.AI Google list/carousel 选择事件的操作信息:

  1. 使用API.AI的actions_intent_OPTION事件

正如 Prisoner 已经提到的,您可以使用 actions_intent_OPTION 创建一个意图。此意图将匹配包含 list/carousel 选择 as documented here.

的查询
  1. 使用 webhook

API.AI 会将 list/carousel 选择传递给您的 webhook,可以通过以下任一方式检索:

A) 使用 Google's Action on Google Node.js client library using the app.getContextArgument() method

B) 在 Webhook 请求正文中使用 originalRequest JSON 属性来检索 list/carousel 选择事件。 list/carousel 选择事件 Webhook 请求的结构如下所示:

{
  "originalRequest": {
    "data": {
      "inputs": [
        {
          "rawInputs": [
            {
              "query": "Today's Word",
              "inputType": "VOICE"
            }
          ],
          "arguments": [
            {
              "textValue": "Today's Word",
              "name": "OPTION"
            }
          ],
          "intent": "actions.intent.OPTION"
        }
      ],
    ...

在从 list/carousel 中选择项目时尝试触发的意图的事件部分中包含 'actions_intent_OPTION'(两者都有效)。 然后在您将在 webhook 中触发的函数中使用此代码,而不是 getContextArguments() 或 getItemSelected():

const param = assistant.getArgument('OPTION');

或 app.getArgument('OPTION');

取决于您为 ApiAiApp 命名的名称(即):

let Assistant = require('actions-on-google').ApiAiAssistant;

const assistant = new Assistant({request: req, response: response});

然后,在 list/carousel 帮助程序文档中的示例的其余部分中继续执行它的完成方式。我不知道为什么会这样,但这个方法显然是从 JSON 请求中检索 actions_intent_OPTION 参数。