{
    "componentChunkName": "component---src-templates-doc-page-js",
    "path": "/docs/ru/script_development/switch_states/",
    "result": {"data":{"site":{"siteMetadata":{"title":"Gatsby-doc-engine"}},"markdownRemark":{"id":"0c359bd8-c0aa-5f20-86e9-93993f6eb43f","excerpt":"Переход по стейтам Сценарий чатбота описывается в виде текстового файла с древовидной структурой. То есть одни элементы сценария являются вложенными по…","html":"<h1>Переход по стейтам</h1>\n<hr>\n<p>Сценарий чатбота описывается в виде текстового файла с древовидной структурой. То есть одни элементы сценария являются вложенными по отношению к другим. Эти элементы являются состояниями системы, в которые она может перейти в ходе диалога. Такие состояния называются <a href=\"/1.10.3/docs/ru/JAICP_DSL/tags/declarative_tags/state\">стейтами</a>. Более общие стейты включают в себя стейты с конкретной тематикой.</p>\n</br>\n<h4>Переход в стейт</h4>\n<p>Переход в стейт происходит в следующих случаях:</p>\n<ul>\n<li>Запрос клиента попал в один из глобальных тегов: <a href=\"/1.10.3/docs/ru/JAICP_DSL/tags/declarative_tags/q!\"><code class=\"language-text\">q!</code></a>, <a href=\"/1.10.3/docs/ru/classificator/e!\"><code class=\"language-text\">e!</code></a>, <a href=\"/1.10.3/docs/ru/classificator/eg!\"><code class=\"language-text\">eg!</code></a> или <a href=\"/1.10.3/docs/ru/NLU_core/intent!\"><code class=\"language-text\">intent!</code></a>.</li>\n</ul>\n<p class='warn'>При использовании в одном сценарии паттернов, интентов и групп примеров, <a href=/1.10.3/docs/ru/NLU_core/intent_detection  >обработка правил активаций происходит с приоритетом по мере убывания</a>: <code class=\"language-text\">q!</code>, <code class=\"language-text\">eg!</code>, <code class=\"language-text\">intent!</code>.</p>\n<p>В стейт с глобальным тегом переход диалога возможен из любого другого стейта. Локальный тег активен только в контексте диалога, переход в стейт возможен из ближайшего родительского или дочерних стейтов.</p>\n<ul>\n<li>Запрос клиента попал в паттрен тега <a href=\"/1.10.3/docs/ru/JAICP_DSL/tags/declarative_tags/q\"><code class=\"language-text\">q</code></a>.</li>\n<li>Из родительского стейта, если запрос клиента попал во вложенный стейт.</li>\n<li>Из любого стейта, если для <code class=\"language-text\">q</code> указан флаг <a href=\"/1.10.3/docs/ru/script_development/context#fromstate\"><code class=\"language-text\">fromState</code></a>. Этот флаг определяет стейт, из которого возможен переход по данному паттерну.</li>\n<li>При активации тега <a href=\"/1.10.3/docs/ru/JAICP_DSL/tags/reaction_tags/go!\"><code class=\"language-text\">go!</code></a> или <a href=\"/1.10.3/docs/ru/JAICP_DSL/tags/reaction_tags/go\"><code class=\"language-text\">go</code></a>.</li>\n</ul>\n</br>\n<h4>Обработка правил активации</h4>\n<p>Когда система находится в каком-либо стейте, активируются правила, привязанные непосредственно к этому стейту и ко всем его родителям. При этом правила активации, привязанные к этому стейту, имеют наибольший приоритет.</p>\n<p>Таким образом, в разных стейтах могут быть объявлены одинаковые правила активации, но обрабатываться они будут в зависимости от состояния, в котором находится система.</p>\n<p>Рассмотрим сценарий:</p>\n<div class=\"gatsby-highlight\" data-language=\"sc\"><pre class=\"language-sc\"><code class=\"language-sc\"><span class=\"token keyword\">patterns:</span>\r\n    $Yes = (да|конечно)\r\n    $No = (нет|не|да ну)\r\n\r\n<span class=\"token keyword\">theme:</span> /\r\n    <span class=\"token keyword\">state:</span> Start\r\n        <span class=\"token storageType\">q!:</span> $regexp&lt;/start>\r\n        <span class=\"token variableParameter\">go!:</span> ../зарядка\r\n\r\n    <span class=\"token keyword\">state:</span> зарядка\r\n        <span class=\"token variableParameter\">a:</span> Вы делаете зарядку по утрам?\r\n\r\n        <span class=\"token keyword\">state:</span> каждый день\r\n            <span class=\"token storageType\">q:</span> * $Yes *\r\n            <span class=\"token variableParameter\">a:</span> Вы делаете зарядку каждый день?\r\n\r\n            <span class=\"token keyword\">state:</span>\r\n                <span class=\"token storageType\">q:</span> * $Yes *\r\n                <span class=\"token variableParameter\">a:</span> Молодец!\r\n\r\n            <span class=\"token keyword\">state:</span>\r\n                <span class=\"token storageType\">q:</span> * $No *\r\n                <span class=\"token variableParameter\">a:</span> Зарядка должна стать привычкой!\r\n\r\n        <span class=\"token keyword\">state:</span>\r\n            <span class=\"token storageType\">q:</span> * $No *\r\n            <span class=\"token variableParameter\">a:</span> Зарядка пробуждает тело и мозг, поработай над собой!</code></pre></div>\n</br>\n<p>Сценарий демонстрирует как обрабатываются ответы клиента <code class=\"language-text\">да/нет</code> в зависимости от активного стейта.</p>\n<p>Рассмотрим процесс выполнения этого сценария:</p>\n<ol>\n<li>Запускается сценарий, <code class=\"language-text\">go!</code> перенаправляет клиента в стейт <code class=\"language-text\">зарядка</code>.</li>\n<li>Бот задает вопрос <code class=\"language-text\">Вы делаете зарядку по утрам?</code> из стейта <code class=\"language-text\">зарядка</code>.</li>\n<li>После этого система останется в текущем стейте, в котором активны паттерны <code class=\"language-text\">q: * $Yes *</code>, <code class=\"language-text\">q: * $No *</code>.</li>\n<li>Клиент отвечает <code class=\"language-text\">да</code> и система переходит в стейт <code class=\"language-text\">зарядка/каждый день</code>. Далее бот спрашивает <code class=\"language-text\">Вы делаете зарядку каждый день?</code>, система активирует следующий набор паттернов.</li>\n<li>Следующий ответ клиента система будет интерпретировать в контексте <code class=\"language-text\">зарядка/каждый день</code>. Ответы активируют паттерны вложенных стейтов, так как они имеют больший приоритет.</li>\n</ol>","frontmatter":{"title":"","description":null},"headings":[{"value":"Переход по стейтам"}]}},"pageContext":{"slug":"/docs/ru/script_development/switch_states/","previous":{"fields":{"slug":"/docs/ru/security/log_removal/"},"frontmatter":{"title":"","description":null}},"next":{"fields":{"slug":"/docs/ru/script_development/context/"},"frontmatter":{"title":"","description":null}}}},
    "staticQueryHashes": ["1209419333"]}