Как добавить промежуточное программное обеспечение / перехватчик для каждого запроса на сервере диалогового потока

Как добавить промежуточное программное обеспечение / перехватчик для каждого запроса на сервере диалогового потока dialogflow при использовании библиотеки Action-on-google и работе с приложением dialogflow, цель в том, чтобы я хотел проверять подлинность при каждом запросе, что ключ по-прежнему действителен или нет, а также я хочу чтобы проверить, что этот пользователь уже управляет группой, получите всех членов группы и поместите в / userEntity,

Теперь я делаю это с добрыми намерениями, поэтому, когда пользователь говорит talk to xyz app в целях доброй воли я проверяю в базе данных, управляет ли пользователь группой, затем получает всех членов этой конкретной группы и помещает в сущность пользователя,

но эта логика становится мусором, когда пользователь непосредственно произносит команду, например, если пользователь не говорит talk to my xyz app и вместо этого он говорит ask my xyz app john wink is present or not тогда приложение не может распознать это имя, обратите внимание, что я не могу использовать сущность имени системы пользователя, потому что в моем случае это не английские имена

на данный момент я ограничил прямые команды с контекстной комбинацией, но это не хорошо, например: пользователь не может сказать прямую команду, если WELCOME_DONE контекст, который является контекстом из добрых намерений

1 ответ

"Прямая команда", которую вы упоминаете (ask my xyz app john wink is present or not) это то, что мы называем "фраза вызова действия". Поскольку для извлечения имени из фразы действия вы зависите от пользовательского объекта, вы сможете сделать это успешно только в том случае, если недавно было найдено другое намерение, поскольку добавленные вами пользовательские объекты доступны только в течение 30 минут.,

Одним из способов обойти это может быть следующее. Мы собираемся сделать что-то умное, чтобы выполнить пользовательский запрос через Dialogflow во второй раз, после добавления пользовательского объекта.

  1. В намерении, которое обрабатывает ваш "вызов действия", используйте @sys.any (который по сути является подстановочным знаком), чтобы захватить имя. Включите webhook для этого намерения.

  2. Создайте другое намерение с User says примеры, которые соответствуют ожидаемой "фразе действия", аналогичной первому намерению, но не добавляют ее в "Дополнительные намерения запуска". Включите webhook для этого намерения.

  3. Создайте функцию в своем веб-крюке, которая обрабатывает намерение из шага 1.

  4. В этой функции найдите пользователя и его группу и добавьте участников через /userEntity,

  5. Теперь, когда пользовательский объект был создан, вызовите Dialogflow /query API с тем, что сказал пользователь.

  6. Поскольку пользовательский объект уже создан, намерение, созданное на шаге 2, будет сопоставлено, поэтому /query Ответ API будет содержать имя объекта, созданного на шаге 4.

  7. Используйте имя, чтобы сгенерировать любой ответ, который вы хотите сгенерировать.

Другие вопросы по тегам