{
    "componentChunkName": "component---src-templates-doc-page-js",
    "path": "/docs/ru/JS_API/session_lifetime_control/",
    "result": {"data":{"site":{"siteMetadata":{"title":"Gatsby-doc-engine"}},"markdownRemark":{"id":"74927a4f-470e-5593-a089-6b0990b4cdef","excerpt":"Управление сессией?> Сессия — последовательность взаимодействий клиента с ботом, использующая единый контекст беседы. Сессия стартует в момент первого обращения…","html":"<h1>Управление сессией</h1>\n<hr>\n<p class='warn'>Сессия — последовательность взаимодействий клиента с ботом, использующая единый контекст беседы.</p>\n<p>Сессия стартует в момент первого обращения клиента к системе в случае, когда для данного пользователя нет другой активной сессии.</p>\n<p>Причины завершения сессии:</p>\n<ul>\n<li>истечение таймаута;</li>\n<li>выключение/включение устройства;</li>\n<li>решение вопроса пользователя, подтвержденное выставлением оценки в форме обратной связи, и пр.</li>\n</ul>\n<p>Условия завершения сессии различны для каждого бота. Конфигурация условий находится на уровне сценария, который должен определять момент завершения старой сессии и начала новой. Это достигается при помощи использования <a href=\"/1.10.3/docs/ru/JS_API/built_in_services/reactions/newSession\"><code class=\"language-text\">$reactions.newSession</code></a>.</p>\n<p>Реакция <code class=\"language-text\">newSession</code> выбрасывает специальное исключение. При отлове такого исключения записывается лог и создается новая сессия.</p>\n</br>\n<h4>Методы управления сессией</h4>\n<p>Вы можете использовать следующие методы для управления сессией:</p>\n<ul>\n<li><a href=\"/1.10.3/docs/ru/JS_API/built_in_services/reactions/newSession\"><code class=\"language-text\">$reactions.newSession()</code></a> предназначен для создания новой сессии из скрипта;</li>\n<li><a href=\"/1.10.3/docs/ru/JS_API/built_in_services/jsapi/startSession\"><code class=\"language-text\">$jsapi.startSession()</code></a> начинает новую сессию;</li>\n<li><a href=\"/1.10.3/docs/ru/JS_API/built_in_services/jsapi/stopSession\"><code class=\"language-text\">$jsapi.stopSession()</code></a> завершает сессию.</li>\n</ul>\n</br>\n<h4>Примеры</h4>\n<ul>\n<li>Создание новой сессии по таймауту.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"sc\"><pre class=\"language-sc\"><code class=\"language-sc\"><span class=\"token keyword\">theme:</span> /\n    <span class=\"token keyword\">init:</span>\n        bind(\"postProcess\", function($context) {\n            $context.session.lastActiveTime = $jsapi.currentTime();\n            log($context.session.lastActiveTime)\n        });\n \n        bind(\"preProcess\", function($context) {\n            if ($context.session.lastActiveTime) {\n                var interval = $jsapi.currentTime() - $context.session.lastActiveTime;\n                if (interval > 10000) {\n                    $reactions.newSession( {message: 'test 6', session: $context.request.data } );\n                }\n            }\n        });</code></pre></div>\n</br>\n<ul>\n<li>Рассмотрим пример создания новой сессии по событию.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"sc\"><pre class=\"language-sc\"><code class=\"language-sc\">    <span class=\"token keyword\">state:</span> sessionStart\n        <span class=\"token storageType\">event!:</span> newChatStarted\n        <span class=\"token variableParameter\">script:</span>\n            $request.query = $request.rawRequest.messages[0].text;\n            $request.event = null;\n            $reactions.newSession({request: $request});</code></pre></div>\n<p>Сценарий перешел в стейт по событию <code class=\"language-text\">newChatStarted</code>. Нам нужно создать новую сессию, но при этом обработать сообщение клиента, которое пришло вместе с событием.</p>\n<p>Чтобы не произошел повторный переход в стейт, мы переопределяем <code class=\"language-text\">$request.event = null</code>. Также записываем сообщение клиента в <code class=\"language-text\">$request.query</code>. Далее создаем новую сессию с уже записанным сообщением клиента <code class=\"language-text\">$reactions.newSession</code>.</p>\n</br>\n<ul>\n<li>Рассмотрим пример сценария, который вызовет ошибку <code class=\"language-text\">newSessionException</code> .</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"sc\"><pre class=\"language-sc\"><code class=\"language-sc\"><span class=\"token keyword\">state:</span> reset\n    <span class=\"token storageType\">event!:</span> someEvent  \n    <span class=\"token variableParameter\">script:</span>\n        $reactions.newSession({message: \"some text\", data: $request.data});</code></pre></div>\n<p>Здесь сценарий перешел в стейт по событию <code class=\"language-text\">newChatStarted</code>, которое будет сохранено в <code class=\"language-text\">$request.event</code>. Мы создаем новую сессию, заменив текст. Но при этом остается сохранено изначальное событие. Платформа считает события приоритетными триггерами, соответственно, при таком сценарии произойдет зацикливание.</p>\n<p>Чтобы этого не произошло, переопределите событие <code class=\"language-text\">$request.event = null</code>.</p>","frontmatter":{"title":"","description":null},"headings":[{"value":"Управление сессией"}]}},"pageContext":{"slug":"/docs/ru/JS_API/session_lifetime_control/","previous":{"fields":{"slug":"/docs/ru/NLU_core/advanced_classifer_settings/"},"frontmatter":{"title":"","description":null}},"next":{"fields":{"slug":"/docs/ru/JS_API/preload_js/"},"frontmatter":{"title":"","description":null}}}},
    "staticQueryHashes": ["1209419333"]}