ym88659208ym87991671
Session lifetime control для смартапов | Документация SmartMarket
Skip to main content

Session lifetime control

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

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

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

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

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

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


Параметры

  • message — стартовое сообщение, будет передано сценарию сразу после активации сессии. Если параметр не задан, будут выполнены только реакции корневой темы.
$reactions.newSession({ message: $context.request.query, data: $context.request.data });
  • session — данные для новой сессии. По умолчанию равен пустому объекту.
{ timezone: "GMT+3" }
  • client — данные клиента, можно модифицировать в новой сессии текущие или сбросить.
theme: /
init:
bind("postProcess", function($context) {
if ($context.session.startNewSession) {
$reactions.newSession({message: 'newSessionMessage', client: {}});
}
});
state:
q!: test
script:
$session.startNewSession = true;
$context.client.clientCustomData = 'testClientQuery';
a: Test answer
state:
q!: newSessionMessage
a: Message from new session request {{ $client.clientCustomData }}
  • request — исходный запрос можно модифицировать в новой сессии. Например поменяв/указав event или query: {event: 'new event'}.
theme: /
init:
bind("postProcess", function($context) {
if ($context.session.startNewSession) {
var $request = $context.request;
$request.event = 'newSessionEvent';
$reactions.newSession({request: $request});
}
});
state:
q!: test
script:
$session.startNewSession = true;
a: Test answer
state:
event: newSessionEvent
script:
a: Event from new session request

Примеры значений

  • Создание новой сессий по таймауту.
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 } );
}
}
});
  • Создание новой сессий по событию.
theme: /
state:
q!: restart
a: new session request

state:
event: newSessionEvent
script:
$reactions.newSession({message: 'restart'});
a: Test answer

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

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

Обновлено 31 мая 2022

Заметили ошибку?

Выделите текст и нажмите Ctrl + Enter, чтобы сообщить нам о ней