Управление сессией
Сессия — последовательность взаимодействий клиента с ботом, использующая единый контекст беседы.
Сессия стартует в момент первого обращения клиента к системе в случае, когда для данного пользователя нет другой активной сессии.
Причины завершения сессии:
- истечение таймаута;
- выключение/включение устройства;
- решение вопроса пользователя, подтвержденное выставлением оценки в форме обратной связи, и пр.
Условия завершения сессии различны для каждого бота. Конфигурация условий находится на уровне сценария, который должен определять момент завершения старой сессии и начала новой. Это достигается при помощи использования $reactions.newSession.
Реакция newSession выбрасывает специальное исключение. При отлове такого исключения записывается лог и создается новая сессия.
Методы управления сессией
Вы можете использовать следующие методы для управления сессией:
$reactions.newSession()предназначен для создания новой сессии из скрипта;$jsapi.startSession()начинает новую сессию;$jsapi.stopSession()завершает сессию.
Примеры
- Создание новой сессии по таймауту.
theme: /
init:
bind("postProcess", function($context) {
$context.session.lastActiveTime = $jsapi.currentTime();
log($context.session.lastActiveTime)
});
bind("preProcess", function($context) {
if ($context.session.lastActiveTime) {
var interval = $jsapi.currentTime() - $context.session.lastActiveTime;
if (interval > 10000) {
$reactions.newSession( {message: 'test 6', session: $context.request.data } );
}
}
});- Рассмотрим пример создания новой сессии по событию.
state: sessionStart
event!: newChatStarted
script:
$request.query = $request.rawRequest.messages[0].text;
$request.event = null;
$reactions.newSession({request: $request});Сценарий перешел в стейт по событию newChatStarted. Нам нужно создать новую сессию, но при этом обработать сообщение клиента, которое пришло вместе с событием.
Чтобы не произошел повторный переход в стейт, мы переопределяем $request.event = null. Также записываем сообщение клиента в $request.query. Далее создаем новую сессию с уже записанным сообщением клиента $reactions.newSession.
- Рассмотрим пример сценария, который вызовет ошибку
newSessionException.
state: reset
event!: someEvent
script:
$reactions.newSession({message: "some text", data: $request.data});Здесь сценарий перешел в стейт по событию newChatStarted, которое будет сохранено в $request.event. Мы создаем новую сессию, заменив текст. Но при этом остается сохранено изначальное событие. Платформа считает события приоритетными триггерами, соответственно, при таком сценарии произойдет зацикливание.
Чтобы этого не произошло, переопределите событие $request.event = null.