Назад до блогу

Разрыв сессии в Dialogflow. Что делать?

При создании чат-бота на платформе Dialogflow вы рано или поздно столкнетесь с таким понятием, как контекст. Да, именно с помощью контекстов бот понимает, в какой точке находится диалог с пользователем. С помощью контекста можно передавать данные между интентами, создавать теги и многое другое.

Подробнее о контекстах смотрите отдельное видео у меня на YouTube-канале.

Минус контекста в том, что он живет не более 20 минут. На практике все происходит так:

  1. Пользователь начал диалог с ботом.
  2. Бот попросил ввести первый параметр.
  3. Пользователь ввел параметр, перешел к вводу второго параметра и отошел от компьютера (закрыл ноут, свернул Telegram вместе с ботом…).
  4. Через 30 минут пользователь вспомнил, что у него остался незавершенный диалог с ботом. Ввел второй параметр, а бот его уже не понимает. Вместо того, чтобы принять значение второго параметра и перейти к следующему шагу, бот возвращается к приветствию.

Как вы думаете, захочет ли пользователь повторять всю процедуру? Скорее всего нет.

Происходит такой "фокус" из-за того, что открытая сессия бота с пользователем длится всего 20 минут. Если пользователь долго думает и отвлекается от диалога, то диалог прерывается, а бот "делает вид", что впервые видит пользователя.

Повлиять на время сеанса мы не можем – это техническое ограничение. Было бы неплохо еще и фиксировать такие диалоги, что "отвалились", чтобы можно было вручную связаться с пользователями, т.е. передать управление от чат-бота к человеку.

Что мы, как разработчики чат-бота, можем сделать? Вариантов несколько. Начнем с самого простого, что No-code (без программирования).

Простой вариант

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

Откройте fallback-интент и к стандартному ответу добавьте Custom Payload с кнопками (быстрыми ответами), которые откроют нужный шаг.

Blog post image

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

Сложный вариант

Подойдет только техническим специалистам, знакомым с серверным программированием и базами данных.

Суть в том, что вам придется создать серверную часть (можно даже во встроенном редакторе Dialogflow), где будет обработчик интентов dialogflow.

Blog post image

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

Blog post image

Далее, вам нужно сохранять ID в базе данных, чтобы понимать, кто разговаривал с ботом, а кто нет.

Дополнительно, вы можете получить из POST-запроса название интента, параметры и множество другой информации, которую можно также сохранить в базе данных. Теперь, даже если 20-минутная сессия оборвалась и пользователь начал общение с ботом заново, вы отправляете запрос (на самом начальном интенте welcome), проверяете, общался ли этот пользователь с ботом ранее (сравниваете ID) и восстанавливаете сессию.

Кстати, если взять какой-нибудь Kommunicate, то можно почти все это положить на него. Но придется платить от $30/мес (за каждого бота) и выше. В этом вся "прелесть" сторонних сервисов. Достаточно дорого плюс вы все равно потратите много времени на правильную настройку.

Надеюсь, я натолкнул вас на некоторые мысли и задал правильное направление :smile:

Если появятся вопросы — пишите или приходите на индивидуальную консультацию. Контакты можно найти на сайте.