Google 动作列表响应类型后如何正确处理用户文本输入

How to properly handle user text input after Google Action List response type

我们使用 actions.intent.OPTION 来处理 selection 用于 Google 操作中的列表响应类型。 actions.intent.OPTION 不仅处理用户 selection(触摸)输入,还处理列表后的用户 (voice/text) 响应,并将用户响应很好地映射到列表中的项目。它还在一定程度上处理了拼写错误。

但是,很难处理不想 select 来自列表响应的用户响应。基于 Google 官方指南 (https://developers.google.com/actions/assistant/responses#list),我们使用建议芯片来调整或扩展对话。

我有一个用例,其中用户可能使用很少的文本来指示 he/she 不执行 selection。例如:

bot: which food do you want?
(showing list)
- rice
- salad
- pizza
(suggestion chip)
not in this list

这些是我们可以处理的用户响应:

但是,如果用户说出其他文本,例如 "i change my mind"、"let's do something else"、"let's do it again" 或 "restart this step",我们将无法处理,因为 Google action 和 dialogflow 自动将这些文本映射到列表中最相似的项目(字符串相似度)。

对于没有 select 列表中除建议卡片之外的任何项目的用户响应,有什么好的做法可以处理吗?我觉得一个建议芯片不足以处理用户响应的许多变化。

当用户 select 通过语音输入列表项时,Google 助理会根据键和 list item 的同义词映射输入。然后将密钥作为输入发送回您的 Dialogflow 代理。当映射不成功时,不会触发 actions_intents_OPTION 事件,并且输入会像任何其他输入一样简单地与所有意图匹配。这意味着您可以通过简单地为它们添加一个正常的意图来捕获像 "let's do something else" 这样的请求。为确保此意图在 list-select 流之外不匹配,您应该在显示列表时设置上下文并将该上下文作为输入上下文添加到 ChangeMyMindIntent.

以下是更详细的工作原理:

  • 正常列表 selection 将被 FoodSelectionIntent 捕获。此意图响应 actions_intents_OPTIONS 事件,即不需要训练短语。它应该具有 food_selection 输入上下文,以将其与其他列表 select 意图分开。
  • 然后,您可以为用户除了实际 select 访问一个项目(ChangeMyMindIntentRestartIntent)之外可以发出的所有请求添加额外的意图。这些也应该具有 food_selection 上下文,以便它们在对话中的任何其他点都不匹配。
  • 当您呈现列表时,您也设置了 food_selection 上下文。这可确保下一个 webhook 请求将包含有效列表 selection(由 FoodSelectionIntent 捕获)或您已限定为 food_selection 上下文的替代意图之一。
  • 不要忘记在该流程完成后删除 food_selection 上下文(将其生命周期设置为 0),以不限制下一个请求的意图匹配。