{
    "componentChunkName": "component---src-templates-doc-page-js",
    "path": "/docs/ru/script_development/context/",
    "result": {"data":{"site":{"siteMetadata":{"title":"Gatsby-doc-engine"}},"markdownRemark":{"id":"73040b11-b354-5165-8574-77a36faf2b30","excerpt":"Управление контекстом noContext Флаг  проставляется тегу  и принимает булево значение, по умолчанию . Если , то система не изменяет контекст при переходе в…","html":"<h1>Управление контекстом</h1>\n<hr>\n<h3>noContext</h3>\n<p>Флаг <code class=\"language-text\">noContext</code> проставляется тегу <a href=\"/1.10.3/docs/ru/JAICP_DSL/tags/declarative_tags/state\"><code class=\"language-text\">state</code></a> и принимает булево значение, по умолчанию <code class=\"language-text\">false</code>.</p>\n<p>Если <code class=\"language-text\">noContext=true</code>, то система не изменяет контекст при переходе в стейт с этим флагом. В таком случае следующий запрос будет обработан в контексте предыдущего стейта.</p>\n<p>Рассмотрим сценарий:</p>\n<div class=\"gatsby-highlight\" data-language=\"sc\"><pre class=\"language-sc\"><code class=\"language-sc\"><span class=\"token keyword\">theme:</span> /\r\n\t<span class=\"token keyword\">state:</span> Greeting\r\n\t\t<span class=\"token storageType\">q!:</span> * (прив*/добр* (~день/~утро/~вечер)) *\r\n\t\t<span class=\"token variableParameter\">a:</span> Привет! Как дела?\r\n\r\n\t\t<span class=\"token keyword\">state:</span> DoinGood\r\n\t\t\t<span class=\"token storageType\">q:</span> * (хорош*/норм*/замечательн*) *\r\n\t\t\t<span class=\"token variableParameter\">a:</span> Хорошо, что у вас все в порядке! Как я могу вам помочь?\r\n\r\n\t\t<span class=\"token keyword\">state:</span> DoinBad\r\n\t\t\t<span class=\"token storageType\">q:</span> * (плох*|не [очень] хорош*) *\r\n\t\t\t<span class=\"token variableParameter\">a:</span> Жаль это слышать. Может, я могу чем-то помочь?\r\n\r\n\t<span class=\"token keyword\">state:</span> CatchAll\r\n\t\t<span class=\"token storageType\">event!:</span> noMatch\r\n\t\t<span class=\"token variableParameter\">a:</span> Извините, я вас не понял. Попробуйте переформулировать.</code></pre></div>\n</br>\n<p>Поприветствуем чатбота, а затем на вопрос <code class=\"language-text\">Как дела?</code> ответим <code class=\"language-text\">Я в порядке</code>. Паттерн не предусматривает такого ответа, сценарий перейдет в стейт <code class=\"language-text\">CatchAll</code>, чатбот попросит переформулировать запрос. Ответим <code class=\"language-text\">хорошо всё у меня</code>. Несмотря на соответствие паттерну, запрос не будет распознан, потому что контекст диалога изменился, и вложенные стейты недоступны.</p>\n</br>\n<p>Проставим флаг <code class=\"language-text\">noContext</code> стейту <code class=\"language-text\">CatchAll</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"sc\"><pre class=\"language-sc\"><code class=\"language-sc\"><span class=\"token keyword\">theme:</span> /\r\n\t<span class=\"token keyword\">state:</span> Greeting\r\n\t\t<span class=\"token storageType\">q!:</span> * (прив*/добр* (~день/~утро/~вечер)) *\r\n\t\t<span class=\"token variableParameter\">a:</span> Привет! Как дела?\r\n\r\n\t\t<span class=\"token keyword\">state:</span> DoinGood\r\n\t\t\t<span class=\"token storageType\">q:</span> * (хорош*/норм*/замечательн*) *\r\n\t\t\t<span class=\"token variableParameter\">a:</span> Хорошо, что у вас все в порядке! Как я могу вам помочь?\r\n\r\n\t\t<span class=\"token keyword\">state:</span> DoinBad\r\n\t\t\t<span class=\"token storageType\">q:</span> * (плох*|не [очень] хорош*) *\r\n\t\t\t<span class=\"token variableParameter\">a:</span> Жаль это слышать. Может, я могу чем-то помочь?\r\n\r\n\t<span class=\"token keyword\">state:</span> CatchAll || noContext=true\r\n\t\t<span class=\"token storageType\">event!:</span> noMatch\r\n\t\t<span class=\"token variableParameter\">a:</span> Извините, я вас не понял. Попробуйте переформулировать.</code></pre></div>\n</br>\n<p>Теперь при попадании в стейт <code class=\"language-text\">CatchAll</code> контекст не изменится, следующий запрос будет обработан в рамках стейта <code class=\"language-text\">Greeting</code>. Таким образом, ответ <code class=\"language-text\">хорошо всё у меня</code> будет обработан в контексте вопроса <code class=\"language-text\">Как дела?</code> и попадет во вложенный стейт <code class=\"language-text\">DoinGood</code>.</p>\n<p class='warn'>Флаг <code class=\"language-text\">noContext</code> используется для того, чтобы не продвигать вперед контекст диалога. Обычно он используется в стейтах <code class=\"language-text\">CatchAll</code>, повторов реплик.</p>\n</br>\n<h3>modal</h3>\n<p>Флаг <code class=\"language-text\">modal</code> проставляется тегу <a href=\"/1.10.3/docs/ru/JAICP_DSL/tags/declarative_tags/state\"><code class=\"language-text\">state</code></a> и принимает булево значение, по умолчанию <code class=\"language-text\">false</code>.</p>\n<p>Если <code class=\"language-text\">modal=true</code>, система обработает запрос в контексте этого стейта, то есть запрос может попасть только в один из его вложенных стейтов. Если среди вложенных стейтов не предусмотрен ответ и отсутствует локальный <code class=\"language-text\">CatchAll</code>, то система выдаст ошибку. Лог ошибки сообщит, что в сценарии не найден стейт для перехода.</p>\n<p class='warn'>Стейты с флагом <code class=\"language-text\">modal=true</code> используются, когда от клиента нужно получить важную информацию, без которой диалог не может продолжаться.</p>\n<p>Рассмотрим сценарий:</p>\n<div class=\"gatsby-highlight\" data-language=\"sc\"><pre class=\"language-sc\"><code class=\"language-sc\"><span class=\"token keyword\">theme:</span> /\r\n\r\n\t<span class=\"token keyword\">state:</span> OrderStatus|| modal = true\r\n\t\t<span class=\"token storageType\">q!:</span> * (где|статус*) * ~заказ *\r\n\t\t<span class=\"token variableParameter\">a:</span> Здравствуйте! Назовите номер вашего заказа.\r\n\r\n\t\t<span class=\"token keyword\">state:</span> GetNumber\r\n\t\t\t<span class=\"token storageType\">q:</span> * $Number *\r\n\t\t\t<span class=\"token variableParameter\">a:</span> Ваш заказ уже в пути!\r\n\t\t\t<span class=\"token variableParameter\">go!:</span> /WhatElse\r\n\r\n\t\t<span class=\"token keyword\">state:</span> LocalCatchAll\r\n\t\t\t<span class=\"token storageType\">event:</span> noMatch\r\n\t\t\t<span class=\"token variableParameter\">a:</span> Это не похоже на номер заказа. Попробуйте еще раз.\r\n\r\n\t<span class=\"token keyword\">state:</span> WhatElse\r\n\t\t<span class=\"token variableParameter\">a:</span> Чем еще я могу помочь?</code></pre></div>\n</br>\n<p>В этом сценарии пользователь хочет уточнить статус своего заказа, для этого от него требуется номер заказа. Флаг <code class=\"language-text\">modal = true</code> предотвращает выход диалога из контекста вопроса о номере заказа до получения необходимой информации.</p>\n<p>Для выхода из модального стейта используйте тег <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/script_development/context#fromstate\"><code class=\"language-text\">fromState</code></a>.</p>\n<p class='tip'>Для избежания ошибок в диалоге включайте в сценарии <code class=\"language-text\">LocalCatchAll</code>.</p>\n</br>\n<h3>fromState</h3>\n<p>Флаг <code class=\"language-text\">fromState</code> проставляется тегу <a href=\"/1.10.3/docs/ru/JAICP_DSL/tags/declarative_tags/q\"><code class=\"language-text\">q</code></a> и определяет стейт, из которого возможен переход по данному паттерну.</p>\n<p class='warn'>Флаг <code class=\"language-text\">fromState</code> помогает адресовать вопрос из определенного контекста в нужный стейт без использования глобальных паттернов, а также покинуть модальный контекст по определенному запросу.</p>\n<p>Пример использования:</p>\n<div class=\"gatsby-highlight\" data-language=\"sc\"><pre class=\"language-sc\"><code class=\"language-sc\"><span class=\"token keyword\">theme:</span> /\r\n\r\n\t<span class=\"token keyword\">state:</span> OrderStatus || modal = true\r\n\t\t<span class=\"token storageType\">q!:</span> * (где|статус*) * ~заказ *\r\n\t\t<span class=\"token variableParameter\">a:</span> Здравствуйте! Назовите номер вашего заказа.\r\n\r\n\t\t<span class=\"token keyword\">state:</span> GetNumber\r\n\t\t\t<span class=\"token storageType\">q:</span> * $Number *\r\n\t\t\t<span class=\"token variableParameter\">a:</span> Ваш заказ уже в пути!\r\n\t\t\t<span class=\"token variableParameter\">go!:</span> /WhatElse\r\n\r\n\t\t<span class=\"token keyword\">state:</span> LocalCatchAll\r\n\t\t\t<span class=\"token storageType\">event:</span> noMatch\r\n\t\t\t<span class=\"token variableParameter\">a:</span> Это не похоже на номер заказа. Попробуйте еще раз.\r\n\r\n\t<span class=\"token keyword\">state:</span> WhatElse\r\n\t\t<span class=\"token variableParameter\">a:</span> Чем еще я могу вам помочь?\r\n\r\n\t<span class=\"token keyword\">state:</span> Question\r\n\t\t<span class=\"token storageType\">q!:</span> * [ответь мне на] (один/пару) вопрос* *\r\n        <span class=\"token storageType\">q:</span> * [ответь мне на] (один/пару) вопрос* * || fromState = /OrderStatus\r\n        <span class=\"token variableParameter\">a:</span> Конечно, я вас слушаю!</code></pre></div>\n</br>\n<p>Здесь клиент выходит из модального стейта, если у него возник вопрос к боту.</p>\n</br>\n<h3>onlyThisState</h3>\n<p>Флаг <code class=\"language-text\">onlyThisState</code> проставляется тегу <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/script_development/context#fromstate\"><code class=\"language-text\">fromState</code></a>.</p>\n<p class='warn'>Если проставлен флаг <code class=\"language-text\">onlyThisState=true</code>, то переход по паттерну с этим флагом возможен только из стейта, указанного во флаге <code class=\"language-text\">fromState</code>, но не из вложенных стейтов.</p>\n<p>Если флаг <code class=\"language-text\">onlyThisState</code> не указан, то переход может быть также осуществлен из вложенных по отношению к указанному во <code class=\"language-text\">fromState</code> стейтах.</p>\n<p>Пример сценария:</p>\n<div class=\"gatsby-highlight\" data-language=\"sc\"><pre class=\"language-sc\"><code class=\"language-sc\"><span class=\"token keyword\">theme:</span> /\r\n\r\n\t<span class=\"token keyword\">state:</span> OrderStatus || modal = true\r\n\t\t<span class=\"token storageType\">q!:</span> * (где|статус*) * ~заказ *\r\n\t\t<span class=\"token variableParameter\">a:</span> Здравствуйте! Назовите номер вашего заказа.\r\n\r\n\t\t<span class=\"token keyword\">state:</span> GetNumber\r\n\t\t\t<span class=\"token storageType\">q:</span> * $Number *\r\n\t\t\t<span class=\"token variableParameter\">a:</span> Ваш заказ уже в пути!\r\n\t\t\t<span class=\"token variableParameter\">go!:</span> /WhatElse\r\n\r\n\t\t<span class=\"token keyword\">state:</span> LocalCatchAll\r\n\t\t\t<span class=\"token storageType\">event:</span> noMatch\r\n\t\t\t<span class=\"token variableParameter\">a:</span> Это не похоже на номер заказа. Попробуйте еще раз.\r\n\r\n\t<span class=\"token keyword\">state:</span> WhatElse\r\n\t\t<span class=\"token variableParameter\">a:</span> Чем еще я могу вам помочь?\r\n\r\n\t<span class=\"token keyword\">state:</span> Question\r\n\t\t<span class=\"token storageType\">q!:</span> * [ответь мне на] (один/пару) вопрос* *\r\n        <span class=\"token storageType\">q:</span> * [ответь мне на] (один/пару) вопрос* * || fromState = /OrderStatus<span class=\"token entityNameClass\">, onlyThisState =</span> true\r\n        <span class=\"token variableParameter\">a:</span> Конечно, я вас слушаю!</code></pre></div>\n<p>Если в примере для <a href=\"/1.10.3/docs/ru/script_development/context#fromstate\"><code class=\"language-text\">fromState</code></a> в стейт <code class=\"language-text\">/Question</code> можно было перейти из <code class=\"language-text\">/OrderStatus</code> и <code class=\"language-text\">/OrderStatus/LocalCatchAll</code>, то теперь только из <code class=\"language-text\">/OrderStatus</code>.</p>","frontmatter":{"title":"","description":null},"headings":[{"value":"Управление контекстом"}]}},"pageContext":{"slug":"/docs/ru/script_development/context/","previous":{"fields":{"slug":"/docs/ru/script_development/switch_states/"},"frontmatter":{"title":"","description":null}},"next":{"fields":null,"frontmatter":{"title":"","description":null}}}},
    "staticQueryHashes": ["1209419333"]}