Управление сессией
Сессия — последовательность запросов пользователя и ответов бота, которые имеют общий контекст.
Разбиение диалогов на сессии используется в JAICP на нескольких уровнях:
Разработка сценария: для хранения сессионных данных используется объект
$session
, чье время жизни ограничено длительностью сессии. При завершении сессии этот объект очищается.Аналитика: в сессиях собирается история диалогов бота с пользователями. По ним можно качественно оценить работу бота.
подсказкаВстроенный сервис$analytics
позволяет программно размечать сессии для дальнейшей аналитики.
Автоматическое управление сессией
Первая сессия начинается для пользователя в тот момент, когда он впервые обращается к боту. Его дальнейшие запросы и ответы бота также попадают в эту сессию до тех пор, пока она не завершится.
Рассмотрим пример. Пользователь, авторизованный в Telegram, пообщался с ботом 18 мая, а затем снова обратился к нему 22 июня. Если разработчик сценария специально не предусмотрел логику завершения сессии по таймауту, JAICP отнесет второе обращение к той же сессии, что и первое. Длительность такой сессии будет считаться равной 35 дням.
Сессии всегда привязаны к конкретному пользователю канала, но не все каналы требуют от пользователя авторизации.
Такие каналы не всегда могут восстановить сессию.
Например, в чат-виджете пользователь определяется по файлу cookie waUserId_<ID_проекта>
.
Если человек пообщался с ботом в виджете с двух разных браузеров, для бота это будут два разных пользователя, каждый со своей сессией.
Ручное управление сессией
В проекте могут быть предусмотрены различные условия завершения сессии, например:
- Истечение таймаута.
- Перевод на специалиста службы поддержки.
- Выключение устройства, на которое установлено чат-приложение.
Разработчик бота должен самостоятельно определить, в каких случаях должна завершаться старая сессия и начинаться новая, и в нужных местах сценария вызвать один из методов управления сессией:
Метод | Описание |
---|---|
$jsapi.startSession | Метод начинает новую сессию. |
$jsapi.stopSession | Метод завершает текущую сессию. |
Управление сессией в телефонном канале
В телефонном канале управление сессией отличается от остальных каналов. JAICP автоматически управляет сессиями, исходя из принципа «одна сессия — один телефонный звонок»:
- Новая сессия всегда начинается в начале звонка.
Это происходит независимо от того, звонит ли новый или существующий абонент и есть ли в сценарии вызов
$jsapi.startSession
. - Сессия всегда завершается, когда абонент заканчивает звонок.
Вызывается ли в сценарии метод
$jsapi.stopSession
или нет, также не учитывается.