Декларативные теги

event!:

event!: — реакция на различные события, происходящие в ассистенте, аккаунте или проекте. Например: начало новой сессии, нажатие на кнопку и другое. Глобальный тег, который может попасть в стейт с event!: из любого места сценария.

События могут быть разных типов.

Тип значения

  • string

Параметры

  • fromState (string)
  • toState (string)
  • onlyThisState (boolean)

Вложенные данные

  • none

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

  • Превышение лимита на время обработки запросов:
    state: TimeLimit
        event!: timeLimit
        go!: Извините, у меня что-то сломалось. Попробуйте другой вопрос.

event:

event: — реакция на различные события, происходящие в ассистенте, аккаунте или проекте. Например: начало новой сессии, нажатие на кнопку и другое.

События могут быть разных типов.

Тип значения

  • string

Параметры

  • fromState (string)
  • toState (string)
  • onlyThisState (boolean)

Вложенные данные

  • none

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

    state:
       event: sendFile
       a: Спасибо!

init:

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

Тип значения

  • multiline string (JavaScript)

Параметры

  • none

Вложенные данные

  • multiline data

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

init:
    state.bind("preProcess", myModule.preProcess)
    state.bind("postProcess", function () { … } )

patterns:

patterns: — после тега объявляются именованные паттерны в sc-файле, они доступны для использования во всех файлах проекта.

Иногда для удобства все именованные паттерны выносят в отдельный sc-файл.

Тип значения

  • none

Параметры

  • none

Вложенные данные

  • named patterns — особый вид вложенных данных

Синтаксис

  • Тег patterns имеет особый вид вложенных данных — список именованных паттернов. Структура тега следующая:
 patterns:
        $<pattern name> = (pattern body | multiline body)
        $<pattern name> = (pattern body) || converter=dateConverter
  • Каждый вложенный элемент трактуется как определение нового именованного паттерна.
  • После знака = задается значение типа multiline string с опциональным атрибутом converter, имеющим тип string.
  • Для объявления и обращения к именованному паттерну используют $.

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

patterns:
    $Start = $regexp</start>
    $CatchAll = *
    $Yes = (да/конечно)
    $No = (нет/не хочу)
patterns:
    $hello = (салют|привет|здравствуй*|здарова|добрый (день|вечер))

q!:

q!: — (от англ. "question" — вопрос ) после тега записывается паттерн. Глобальный тег, можем попасть в стейт с q!: из любого места.

Тип значения

  • multiline string

Параметры

  • none

Вложенные данные

  • multiline data

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

theme: /
    state:
        q!: *
        a: Здравствуй мир!
theme: /
    state: start
        q!: * *start
        a: Привет!

q:

q: — (от англ. "question" — вопрос ) после тега записывается паттерн. Локальный тег, работает только в текущем стейте и дочерних ему стейтам.

Тип значения

  • multiline string

Параметры

  • fromState (string) — определяет стейт, из которого возможен переход по данному паттерну.
  • toState (string) — определяет стейт, в который будет осуществлен переход при срабатывании паттерна.
  • onlyThisState (boolean) — при флаге true переход в стейт может быть совершен только из указанного в параметре fromState состояния, но не из его дочерних стейтов. По умолчанию false.

Например:

theme: /Test

    state: Как дела
        q!: как {(твои/у тебя) дел*}
        a: А ты как?

        state: Хорошо || modal = true
            q: хорошо [$andYou]
            q: супер || fromState = /Test, onlyThisState = true
            a: Ты из какого города?

Вложенные данные

  • multiline data

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

state:
    q: $Yes
    a: Я могу вам помочь?

Синтаксис

  • Если тег имеет только один строковый параметр, кавычки можно опустить.
q: * $Yes *
  • Параметры отделяются от значения симоволом ||.
q: * $Yes * || fromState=/theme1
  • Если параметр содержит пробелы, то он должен быть заключён в кавычки.
q: * $Yes * || toState=/theme1
q: * $Yes * || toState=”/theme 1”

require:

require: — тег служит для загрузки зависимых файлов и, по сути, является альтернативой указанию всех зависимых файлов в chatbot.yaml.

Тип значения

  • string — задает имя подключаемого файла

Параметры

  • type (string) — опциональный параметр, определяет тип файла; по умолчанию определяется из расширения.
  • from (string) — имя модуля, из которого импортируется файл; версия и репозиторий модуля указываются в chatbot.yml.
  • rootTheme (string) — базовая тема для всех состояний, определенных в подключаемом файле.
  • provide (multiline json) — набор параметров, передаваемый подключаемому модулю.
  • name (string) — имя паттерна для справочников сущностей.
  • var (string) — определяет имя js-переменной с данными из справочника.
  • injector (string) — через объект $injector в скрипт могут передаваться метапараметры.
  • module (string) — имя модуля, из которого загружается файл.

Имя модуля задается в секции dependecies конфигурационного файла chatbot.yaml, либо соответствует имени папки в папке системных модулей.


Вложенные данные

  • named parametrs

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

require: catchAll.js
require: /services/api.js
  • параметр varName;
 require: answers.yml
          var = answers
  • параметры from, rootTheme, provide;
require: catchAll.zb
        from = common
        rootTheme = /offtopic/catchAll
        provide = {
            doSwitch: false,
            hintState: “/offtopic/IKnowSomethingElse”
            }
  • параметры type, patternName;
require: cities.csv
         type = namedEntities
         name = $City
  • параметр injector;
require: another.sc
injector = { catchAll: { useSwitch2: false } }
  • параметр module;
 require: patterns.sc
    module = common
  • в значениях параметров возможны подстановки.
require: {{$inject.dictFile}}
        type = namedEntities
        name = $City

state:

state — состояние смартапа. Стейты могут иметь вложенную структуру. Название стейта может быть как на русском, так и на английском языках.

Тип значения

  • string

Параметры

  • noContext (boolean) — по умолчанию false. Используется для регулирования контекста при переходе из одного стейта в другой.
  • modal (boolean) — по умолчанию false. Используется, когда от клиента нужно получить важную информацию, без которой диалог не может продолжаться.

Вложенные данные

  • tags

Синтаксис

Объявление стейта происходит следующим образом:

state: Hello
    state: HowAreYou

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

Параметры разделяйте пробелами:

state: MyState name with space || noContext=true

Примеры использования

Простой пример использования стейтов:

state: hello
        q: *
        a: Привет!

Пример использования флага noContext=true.

Если нужно, чтобы система не поменяла контекст при переходе с помощью паттерна или интента в другой стейт, используйте флаг noContext=true.
state: Правила
    q!: $regex</start>
    a: Игра больше-меньше. Загадаю число от 0 до 100, ты будешь отгадывать. Начнём?
    go!: /Правила/Согласен?

        state: Согласен?
        
            state: Да
                q: * да *
                go!: /Игра

            state: Нет
                q: * нет *
                a: Ну и ладно!

state: CatchAll || noContext=true
    q: *
    a: Я не понял

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

Теперь поставим в этот стейт флаг noContext=true, чтобы остаться в контексте стейта Правила. Если написать боту нет, то сработает стейт /Согласен?/Нет и появится сообщение Ну и ладно!.

Без флага noContext=true пользователь не сможет перейти из стейта CatchAll в стейт Правила. Тогда если написать боту нет, он ответит Я не понял.

Пример использования флага modal=true.

Флаг modal=true не дает диалогу совершить переход из контекста модального стейта. Флаг активен на стейте, в котором он указан, и на вложенных в него стейтах на первом уровне вложенности. Запрос может попасть только в один из его вложенных стейтов. Если среди вложенных стейтов не предусмотрен ответ и отсутствует локальный CatchAll, то система выдаст ошибку.

    theme: /
        state: FlightNumber || modal = true
            q!: * (когда|прибывает*) * ~рейс *
            a: Здравствуйте! Какой у вас номер рейса?

            state: GetNumber
                q: * $Number *
                a: Ожидается прибытие рейса
                go!: /WhatElse

            state: LocalCatchAll
                event: noMatch
                a: Это не похоже на номер рейса. Попробуйте еще раз.

        state: WhatElse
            a: Чем еще я могу помочь?

В этом сценарии клиент хочет уточнить статус своего рейса, для этого от него требуется номер рейса. Флаг modal = true предотвращает выход диалога из контекста вопроса о номере рейса до получения необходимой информации.

Если не установить флаг modal = true, то сработает стейт LocalCatchAll, а за ним сразу же WhatElse. Таким образом, клиент не получит необходимую информацию.


theme:

theme: — точка входа смартапа, в это состояние переходит система при запуске смартапа.

Тип значения

  • string

Параметры

  • noContext (boolean)
  • modal (boolean)

Вложенные данные

  • tags

Синтаксис

Объявление темы должно начинаться с символа /:

theme:/Hello

Внутрь тега theme: на первом уровне могут быть вложены только стейты.


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

  • без значения:
theme: /
    state: start
        q!: *
        a: Начинаем!
  • со значением:
theme: / Start
    state: start
        q!: *
        a: Начинаем!

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

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