This site is no longer updated.Go to new Conversational Cloud docs

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


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

Сессия стартует в момент первого обращения клиента к системе в случае, когда для данного пользователя нет другой активной сессии.

Причины завершения сессии:

  • истечение таймаута;
  • выключение/включение устройства;
  • решение вопроса пользователя, подтвержденное выставлением оценки в форме обратной связи, и пр.

Условия завершения сессии различны для каждого бота. Конфигурация условий находится на уровне сценария, который должен определять момент завершения старой сессии и начала новой. Это достигается при помощи использования $reactions.newSession.

Реакция newSession выбрасывает специальное исключение. При отлове такого исключения записывается лог и создается новая сессия.


Методы управления сессией

Вы можете использовать следующие методы для управления сессией:


Примеры

  • Создание новой сессии по таймауту.
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.