Разрыв сессии в Dialogflow. Что делать?
При создании чат-бота на платформе Dialogflow вы рано или поздно столкнетесь с таким понятием, как контекст. Да, именно с помощью контекстов бот понимает, в какой точке находится диалог с пользователем. С помощью контекста можно передавать данные между интентами, создавать теги и многое другое.
Подробнее о контекстах смотрите отдельное видео у меня на YouTube-канале.
Минус контекста в том, что он живет не более 20 минут. На практике все происходит так:
- Пользователь начал диалог с ботом.
- Бот попросил ввести первый параметр.
- Пользователь ввел параметр, перешел к вводу второго параметра и отошел от компьютера (закрыл ноут, свернул Telegram вместе с ботом…).
- Через 30 минут пользователь вспомнил, что у него остался незавершенный диалог с ботом. Ввел второй параметр, а бот его уже не понимает. Вместо того, чтобы принять значение второго параметра и перейти к следующему шагу, бот возвращается к приветствию.
Как вы думаете, захочет ли пользователь повторять всю процедуру? Скорее всего нет.
Происходит такой "фокус" из-за того, что открытая сессия бота с пользователем длится всего 20 минут. Если пользователь долго думает и отвлекается от диалога, то диалог прерывается, а бот "делает вид", что впервые видит пользователя.
Повлиять на время сеанса мы не можем – это техническое ограничение. Было бы неплохо еще и фиксировать такие диалоги, что "отвалились", чтобы можно было вручную связаться с пользователями, т.е. передать управление от чат-бота к человеку.
Что мы, как разработчики чат-бота, можем сделать? Вариантов несколько. Начнем с самого простого, что No-code (без программирования).
Простой вариант
На жаль, предотвратить разрыв сессии мы никак не можем. Поэтому попробуйте спроектировать диалоги так, чтобы пользователь мог максимально быстро "перепрыгнуть" к тому или иному ключевому шагу, без необходимости проходить всю цепочку диалога с самого начала.
Откройте fallback-интент и к стандартному ответу добавьте Custom Payload с кнопками (быстрыми ответами), которые откроют нужный шаг.

Также можно немного "заморочиться" со сторонними сервисами автоматизации (Integromat). С их помощью вы сможете создать таймер ("умную задержку"), а после окончания времени с��рвис вернет в dialogflow сообщение вида: "Вы еще здесь? Давайте продолжим?". Во-первых, это шанс, что пользователь заметит сообщение в мессенджере и вернется к диалогу, а во-вторых, в таком сообщении можно отправить даже кнопки с ключевыми интентами, которыми пользователь сможет воспользоваться после сессии.
Сложный вариант
Подойдет только техническим специалистам, знакомым с серверным программированием и базами данных.
Суть в том, что вам придется создать серверную часть (можно даже во встроенном редакторе Dialogflow), где будет обработчик интентов dialogflow.

То есть, после каждого действия пользователя будет отправляться запрос по webhook на сервер, а сервер в лице вашей программы, сможет извлечь из запроса ID пользователя.

Далее, вам нужно сохранять ID в базе данных, чтобы понимать, кто разговаривал с ботом, а кто нет.
Дополнительно, вы можете получить из POST-запроса название интента, параметры и множество другой информации, которую можно также сохранить в базе данных. Теперь, даже если 20-минутная сессия оборвалась и пользователь начал общение с ботом заново, вы отправляете запрос (на самом начальном интенте welcome), проверяете, общался ли этот пользователь с ботом ранее (сравниваете ID) и восстанавливаете сессию.
Кстати, если взять какой-нибудь Kommunicate, то можно почти все это положить на него. Но придется платить от $30/мес (за каждого бота) и выше. В этом вся "прелесть" сторонних сервисов. Достаточно дорого плюс вы все равно потратите много времени на правильную настройку.
Надеюсь, я натолкнул вас на некоторые мысли и задал правильное направление :smile:
Если появятся вопросы — пишите или приходите на индивидуальную консультацию. Контакты можно найти на сайте.