Как правильно обрабатывать ввод текста пользователем после типа ответа Google Action List - PullRequest
1 голос
/ 07 июня 2019

Мы используем actions.intent.OPTION для обработки выбора типа ответа List в Google Actions. actions.intent.OPTION не только обрабатывает ввод пользовательского выбора (сенсорный), но также обрабатывает пользовательский (голосовой / текстовый) ответ после списка и красиво отображает ответ пользователя на элемент в списке. Он также в некоторой степени обрабатывает опечатки.

Однако сложно обработать ответ пользователя, который не хочет выбирать ответ из списка. Основано на официальном руководстве Google (https://developers.google.com/actions/assistant/responses#list), мы используем подсказку для поворота или расширения разговора.

У меня есть вариант использования, в котором пользователь может использовать несколько возможных текстов, чтобы указать, что он / она не выполняет выбор. Например:

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

Это пользовательский ответ, который мы можем обработать:

  • сенсорный выбор в списке (рис, салат, пицца)
  • пользовательский текст или голос, указывающий на элемент в списке (или аналогичный элементам в списке). Действия Google могут рассматривать "жареный рис" как выбор риса.
  • чип подсказок касания («отсутствует в этом списке») означает, что пользователь не хочет, чтобы все элементы в списке. Мы можем справиться с этим потоком разговоров.

Однако, если пользователь скажет другие тексты, такие как «я передумал», «давайте сделаем что-то еще», «давайте сделаем это снова» или «перезапустите этот шаг», мы не сможем справиться с этим, потому что действия Google и Диалоговое окно автоматически сопоставляет эти тексты с наиболее похожим элементом в списке (сходство строк).

Какая хорошая практика для обработки ответа пользователя, который не выбирает ни одного элемента в списке рядом с чипом предложения? Мне кажется, одного чипа предложения недостаточно для того, чтобы справиться со многими вариантами ответа пользователя.

1 Ответ

1 голос
/ 07 июня 2019

Когда пользователь выбирает элемент списка с помощью голоса, Помощник сопоставляет ввод с ключом и синонимами элемента списка .Затем ключ отправляется обратно в качестве ввода вашему агенту Dialogflow.Когда сопоставление не удается, событие actions_intents_OPTION не инициируется, и вход просто сопоставляется со всеми намерениями, как и любой другой вход.Это означает, что вы можете перехватывать запросы типа «давайте сделаем что-то еще», просто добавив для них нормальное намерение.Чтобы убедиться, что это намерение не соответствует вне потока выбора списка, вы должны установить контекст при представлении списка и добавить этот контекст в качестве входного контекста в ChangeMyMindIntent.

Вот как это будет работатьболее подробно:

  • Обычный выбор списка будет зафиксирован FoodSelectionIntent.Это намерение реагирует на событие actions_intents_OPTIONS, т.е. не нуждается в обучающих фразах.Он должен иметь входной контекст food_selection, чтобы отделить его от других намерений выбора из списка.
  • Затем вы добавляете дополнительные намерения для всех запросов, которые могут делать пользователи, кроме фактического выбора элемента (ChangeMyMindIntent, RestartIntent).Они также должны иметь контекст food_selection, чтобы они не совпадали ни с одним другим пунктом в диалоге.
  • Когда вы отображаете список, вы также устанавливаете контекст food_selection.Это гарантирует, что следующий запрос webhook будет содержать либо правильный список (захваченный FoodSelectionIntent), либо одно из альтернативных намерений, которые вы выбрали для контекста food_selection.
  • Не забудьтеудалите контекст food_selection (установите его срок жизни равным 0) после завершения этого потока, чтобы не ограничивать совпадение намерений следующего запроса.
...