ym88659208ym87991671
Декларативные теги для смартапов | Документация для разработчиков
Skip to main content

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

Обновлено 13 октября 2022

event!:

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

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

Тип значения

  • string

Параметры

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

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

  • none

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

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

event:

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

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

Тип значения

  • string

Параметры

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

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

  • 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-файле, они доступны для использования во всех файлах проекта.

note

Иногда для удобства все именованные паттерны выносят в отдельный 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 — вопрос) после тега записывается паттерн. Глобальный тег, который обрабатывает запросы пользователя из любого места сценария.

Тип значения

  • multiline string

Параметры

  • none

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

  • multiline data

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

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

q:

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

Тип значения

  • multiline string

Параметры

  • fromState (string) — определяет стейт, из которого смартап может перейти по заданному паттерну.
  • toState (string) — определяет стейт, в который перейдет смартап при определении паттерна. При использовании параметра, паттерн, заданный в теге, будет срабатывать только в контексте текущего стейта. При переходе выполняются все реакции заданного стейта (аналогично тегу go!:.
  • 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.

note

Если нужно, чтобы система не поменяла контекст при переходе с помощью паттерна или интента в другой стейт, используйте флаг 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: Чем еще я могу помочь?

state: City
q: * $City *
a: Вас интересуют рейсы из города {{ $parseTree._City }}?

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

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

theme:

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

Тип значения

  • string

Параметры

  • noContext (boolean)
  • modal (boolean)

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

  • tags

Синтаксис

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

theme:/Hello

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


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

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

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

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