Как добавить промежуточное программное обеспечение / перехватчик для каждого запроса на сервере диалогового потока
Как добавить промежуточное программное обеспечение / перехватчик для каждого запроса на сервере диалогового потока 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 во второй раз, после добавления пользовательского объекта.
В намерении, которое обрабатывает ваш "вызов действия", используйте
@sys.any
(который по сути является подстановочным знаком), чтобы захватить имя. Включите webhook для этого намерения.Создайте другое намерение с
User says
примеры, которые соответствуют ожидаемой "фразе действия", аналогичной первому намерению, но не добавляют ее в "Дополнительные намерения запуска". Включите webhook для этого намерения.Создайте функцию в своем веб-крюке, которая обрабатывает намерение из шага 1.
В этой функции найдите пользователя и его группу и добавьте участников через
/userEntity
,Теперь, когда пользовательский объект был создан, вызовите Dialogflow
/query
API с тем, что сказал пользователь.Поскольку пользовательский объект уже создан, намерение, созданное на шаге 2, будет сопоставлено, поэтому
/query
Ответ API будет содержать имя объекта, созданного на шаге 4.Используйте имя, чтобы сгенерировать любой ответ, который вы хотите сгенерировать.