Перейти к основному содержимому

Управление сессией

Сессия — последовательность запросов пользователя и ответов бота, которые имеют общий контекст.

Разбиение диалогов на сессии используется в JAICP на нескольких уровнях:

  • Разработка сценария: для хранения сессионных данных используется объект $session, чье время жизни ограничено длительностью сессии. При завершении сессии этот объект очищается.

  • Аналитика: в сессиях собирается история диалогов бота с пользователями. По ним можно качественно оценить работу бота.

    подсказка
    Встроенный сервис $analytics позволяет программно размечать сессии для дальнейшей аналитики.

Автоматическое управление сессией

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

предупреждение
Во всех каналах JAICP, за исключением телефонного, сессии с одним и тем же пользователем не завершаются автоматически.

Рассмотрим пример. Пользователь, авторизованный в Telegram, пообщался с ботом 18 мая, а затем снова обратился к нему 22 июня. Если разработчик сценария специально не предусмотрел логику завершения сессии по таймауту, JAICP отнесет второе обращение к той же сессии, что и первое. Длительность такой сессии будет считаться равной 35 дням.

Сессии всегда привязаны к конкретному пользователю канала, но не все каналы требуют от пользователя авторизации. Такие каналы не всегда могут восстановить сессию. Например, в чат-виджете пользователь определяется по файлу cookie waUserId_<ID_проекта>. Если человек пообщался с ботом в виджете с двух разных браузеров, для бота это будут два разных пользователя, каждый со своей сессией.

Ручное управление сессией

В проекте могут быть предусмотрены различные условия завершения сессии, например:

  • Истечение таймаута.
  • Перевод на специалиста службы поддержки.
  • Выключение устройства, на которое установлено чат-приложение.

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

МетодОписание
$jsapi.startSessionМетод начинает новую сессию.
$jsapi.stopSessionМетод завершает текущую сессию.

Управление сессией в телефонном канале

В телефонном канале управление сессией отличается от остальных каналов. JAICP автоматически управляет сессиями, исходя из принципа «одна сессия — один телефонный звонок»:

  • Новая сессия всегда начинается в начале звонка. Это происходит независимо от того, звонит ли новый или существующий абонент и есть ли в сценарии вызов $jsapi.startSession.
  • Сессия всегда завершается, когда абонент заканчивает звонок. Вызывается ли в сценарии метод $jsapi.stopSession или нет, также не учитывается.
подсказка
При этом ручное управление сессией в процессе звонка не ограничивается. Если один звонок нужно разбить на несколько сессий, JAICP позволяет это сделать.