ym88659208ym87991671
Теги реакций SmartApp DSL | Документация для разработчиков

Теги реакций SmartApp DSL

Обновлено 25 марта 2024

Тег a:

a: — (answer) передает текст ответа, который отобразится на экране и который произнесет голосовой ассистент.

Тип значения

  • multiline string

Параметры

  • auto_listening (boolean) — указывает будет ли смартап слушать ответ пользователя после ответа ассистента.
  • markdown (string) — текст ответа ассистента, отформатированный с помощью Markdown-разметки.

Доступны следующие элементы форматирования:

ФорматированиеПример кода
Жирный шрифт
**Жирный** шрифт
Курсив
*Курсив*
или
_Курсив_
Зачеркнутый шрифт
~~Зачеркнутый~~ шрифт
Ссылка
[текст ссылки](https://example.ru)
Маркированный список
* Пункт 1
* Пункт 2
* Пункт 3
или
- Пункт 1
- Пункт 2
- Пункт 3

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

  • multiline string

Синтаксис

В тексте ответа можно использовать подстановки и функции. Внутри скобок {{ }} может находиться любое валидное выражение на JavaScript, можно использовать те же переменные и функции, что и в скриптах, кроме собственных функций из подключенных библиотек.

a: Здравствуй {{ capitalize($client.name) }}, как поживаешь? Посмотри что я нашел. || auto_listening = false, markdown = "**Здравствуй** {{ capitalize($client.name), как *поживаешь*? Посмотри что я [нашел](https://example.com/)."

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

 a: Привет!
 a: Ответ1
a: Длинный ответ на несколько строчек

Убедитесь, что в тексте нет символов, предназначенных для визуального оформления, которые могут помешать корректному синтезу текста. Подробнее о проектировании сценария смартапа читайте в разделе Проектирование интерфейса.

Тег audio:

audio: — тег позволяет использовать аудиозаписи в ответах ассистента.

Кроме собственных звуков, загруженных с компьютера, вы можете использовать звуки из библиотеки.

Тег нельзя использовать в проектах SaluteBot.

Требования к файлу

  • формат wav;
  • 1 канал (моно);
  • кодирование 16-bit (PCM) LE signed, с заголовком;
  • частота дискретизации 24 кГц;
  • размер файла не более 10 Мб.

Параметры

  • name (string) — имя аудиофайла, необязательный параметр.

  • source (string) — обязательный параметр, который указывает на источник звука. Возможные значения:


Синтаксис

Синтаксис тега зависит от того, какие звуки вы используете: загруженные или из библиотеки.

При загрузке звуков нужно указать веб-адрес файла из раздела Контент:

audio: https://sberdevices2.s3pd01.sbercloud.ru/preprod-botadmin/263/264/audio/ovDnhCDSVZmHeWrw.wav || name = "sample.wav", source  = "user"

При использовании звуков из библиотеки нужно указать название звука:

audio: sm-sounds-human-cheer-1 || name = "Аплодисменты", source  = "library"

В обоих случаях параметры name и source нужно указывать после разделителя ||."


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

Использование звука из библиотеки:

state: Hello
q!: hi
a: hi
audio: sm-sounds-human-cheer-1 || name = "Аплодисменты", source = "library"

Использование собственного звука:

state: Hello
q!: hi
a: hi
audio: https://sberdevices2.s3pd01.sbercloud.ru/preprod-botadmin/263/264/audio/ovDnhCDSVZmHeWrw.wav || name = "sample.wav", source = "user"

Случайное воспроизведение звуков с помощью тега random:

state: Hello
q!: hi
random:
audio: sm-sounds-human-cheer-1 || name = "Аплодисменты", source = "library"
audio: https://sberdevices2.s3pd01.sbercloud.ru/preprod-botadmin/263/264/audio/ovDnhCDSVZmHeWrw.wav || name = "002_Бумажная версия книги — копия.wav", source = "user"

Тег buttons:

buttons: — кнопки, осуществляют переходы между стейтами сценария.

Тип значения

  • none

Параметры

  • none

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

  • buttons

Синтаксис

  • Название кнопки добавляется в кавычках после тегов.
state: NormalButtons
q!: * start
a: Кнопки могут быть заданы текстом:
buttons:
"Это кнопка"
  • При добавлении нескольких кнопок вы можете:

    • определять каждую кнопку в отдельном теге buttons:
      ```sc
      state: NormalButtons
      q!: * start
      a: Несколько кнопок:
      buttons:
      "Это кнопка"
      buttons:
      "Это вторая кнопка"
      buttons:
      "Это третья кнопка"
      "Это четвертая кнопка"
      "Это пятая кнопка"
      ```
    • указывать все кнопки в одном теге;
  • Вложенные данные тега buttons: должны соответствовать шаблону: <json-node> -> <string>. В левой части валидный JsonNode — строка или объект, определяющие текст или тело кнопки. В правой части — опционально строка, определяющая путь перехода при нажатии кнопки.
    state: NormalButtons
q!: * start
a: Кнопка с маппингом:
buttons:
"могут содержать маппинг" -> /NormalButtons/2
  • Кнопки могут содержать подстановку параметров в имени и маппинге.
    state: NormalButtons
q!: * start
a: Подстановка параметров в кнопках:
buttons:
"могут содержать маппинг" -> /NormalButtons/2
"подстановку параметров как в {{ 'имени' }} так и в маппинге" -> {{ './3' }}

Тег go:

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

Тип значения

  • string — путь, куда должен быть осуществлен отложенный переход

Параметры

  • none

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

  • none

Синтаксис

Путь после тега может быть как абсолютным, так и относительным.

Есть следующие варианты начала пути:

  • / — начало пути, если путь указывается в абсолютном виде. Символ также используется для разделения элементов пути
  • ./ — начало пути, которое означает текущий стейт
  • ../ — начало пути, которое означает стейт на уровень выше текущего

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

    go: /path
go: /путь
go: ./anotherPath
go: ../first state/second state

Аналогично тегу state: регистр символов имеет значение:

  • /path не равен /Path;
  • /путь не равно /Путь.

Примеры описания путей

  1. При описании пути в абсолютном виде, нужно начинать с самого верхнеуровневого стейта:

    theme: /

    state: Один
    a: Это стейт один

    state: Два
    a: Это стейт два

    state: Три
    a: Это стейт три

    В этом случае путь до стейта «Три» будет выглядеть следующим образом:

    go: /Один/Два/Три
  2. При описании пути в абсолютном виде, если у theme есть имя, то нужно начинать с него:

    theme: /Главный

    state: Один
    a: Это стейт один

    state: Два
    a: Это стейт два

    state: Три
    a: Это стейт три

    В этом случае путь до стейта "Три" будет выглядеть следующим образом:

    go: /Главный/Один/Два/Три
  3. При описании пути от текущего стейта:


    state: One
    a: Это верхнеуровневый стейт

    state: Two
    a: Это текущий стейт
    go: ./Three

    state: Three
    a: Это целевой стейт

    В этом случае ./Three означает путь от текущего стейта, до стейта Three.

  1. При описании пути от стейта на уровень выше:

    state: One
    a: Это самый верхнеуровневый стейт

    state: Two
    a: Это стейт на уровень выше

    state: Three
    a: Это текущий стейт
    go: ../Four
    state: Four
    a: Это целевой стейт

    В этом случае ../Four означает путь от стейта, который находится на один уровень выше стейта Three, до стейта Four.

  1. Использование подстановок при объявлении пути:

    Script: $temp.nextState = '/four' //в перменной заносим название state
    go: {{ $temp.nextState }}

    В теге можно использовать подстановки. Внутри скобок {{ }} может находиться любое валидное выражение на JavaScript. Можно использовать те же переменные и функции, что и в скриптах.

Тег go!:

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

Тип значения

  • string — путь, куда должен быть осуществлен немедленный переход

Параметры

  • none

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

  • none

Синтаксис

Путь после тега может быть как абсолютным, так и относительным.

Есть следующие варианты начала пути:

  • / — начало пути, если путь указывается в абсолютном виде. Символ также используется для разделения элементов пути;
  • ./ — начало пути, которое означает текущий стейт;
  • ../ — начало пути, которое означает стейт на уровень выше текущего.

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

    go!: /path
go!: /путь
go!: ./anotherPath
go!: ../first state/second state

Аналогично тегу state: регистр символов имеет значение:

  • /path не равен /Path;
  • /путь не равно /Путь.

Примеры описания путей

  1. При описании пути в абсолютном виде, нужно начинать с самого верхнеуровневого стейта:


    theme: /

    state: Один
    a: Это стейт один

    state: Два
    a: Это стейт два

    state: Три
    a: Это стейт три

    В этом случае путь до стейта «Три» будет выглядеть следующим образом:

    go!: /Один/Два/Три
  1. При описании пути в абсолютном виде, если у theme есть имя, то нужно начинать с него:

    theme: /Главный

    state: Один
    a: Это стейт один

    state: Два
    a: Это стейт два

    state: Три
    a: Это стейт три

    В этом случае путь до стейта Три будет выглядеть следующим образом:

    go: /Главный/Один/Два/Три (сделать строку кодовой вставкой)
  2. При описании пути от текущего стейта:

        state: One
    a: Это верхнеуровневый стейт

    state: Two
    a: Это текущий стейт
    go!: ./Three

    state: Three
    a: Это целевой стейт

    В этом случае ./Three означает путь от текущего стейта, до стейта Three.

  1. При описании пути от стейта на уровень выше:


    state: One
    a: Это самый верхнеуровневый стейт

    state: Two
    a: Это стейт на уровень выше

    state: Three
    a: Это текущий стейт
    go!: ../Four
    state: Four
    a: Это целевой стейт

    В этом случае ../Four означает путь от стейта, который находится на один уровень выше стейта Three, до стейта Four.

  1. Использование подстановок при объявлении пути:

    Script: $temp.nextState = '/four' //в перменной заносим название state
    go!: {{ $temp.nextState }}

    В теге можно использовать подстановки. Внутри скобок {{ }} может находиться любое валидное выражение на JavaScript. Можно использовать те же переменные и функции, что и в скриптах.

Тег if:/else:/elseif:

if:/else:/elseif: — теги для записи условий, вывода различных ответов в зависимости от условий, перехода в другие состояния по условиям.

Более сложные условные конструкции можно задать в теге script.

Тип значения

  • string — валидное js-выражение возвращающее boolean

Параметры

  • none

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

  • tags

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

После if: должно стоять js-выражение, результат которого будет преобразован к типу boolean, то есть в результате будет значение Правда или Ложь. Если выражение является истинным, то сработают теги, которые находятся в if:, если выражение является ложным, сработают теги в else.

        if: $session.b > 5
a: Истина
else:
a: Ложь

В данном случае, если значение переменной $session.b больше 5, то ассистент ответит "Истина", а если меньше — "Ложь".

Для последовательной проверки нескольких условий используется тег elseif:

        if: $temp.age > 18
a: Больше 18
elseif: $temp.age < 18
a: Меньше 18
else:
a: Ровно 18

В данном случае, если значение переменной $temp.age больше 18, то пользователю будет озвучен ответ "Больше 18". Если значение переменной НЕ больше 18, тогда будет произведена проверка не является ли переменная меньше 18. Если это окажется так, то пользователь получит ответ "Меньше 18", в противном случае будет получен ответ "Равно 18".

Тег newSession:

newSession: — тег определяет запуск новой сессии.

Тип значения

  • none

Параметры

  • message (string) — стартовое сообщение, с которым будет инициирована новая сессия, например /start.
  • data (multiline json) — объект RequestData для новой сессии.
  • deferred (boolean) — инициировать новую сессию сразу или при следующем запросе.

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

  • named parameters

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

    state:
q: newSession
newSession:
message = query
data = { msg: "data" }

Тег random:

random: — в результате выполнения будет выполнена только одна из вложенных реакций.

Тип значения

  • none

Параметры

  • none

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

  • reactions — в результате выполнения random будет выполнена только одна из вложенных реакций

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

random:
a: Ответ1
a: Ответ2
a: Ответ3
random:
go!: ./quizz1
go!: ./quizz2

Тег script:

script: — скрипт реакции позволяет выполнять функции, логику обработки запросов, вызовы внешних систем, работу с памятью и другое.

Тип значения

  • multiline string — валидный код на JavaScript

Параметры

  • none

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

  • multiline data

Синтаксис

Для написания тела тега script: используется JavaScript. В теге можно вызывать js-функции, описанные в отдельном js-файле и привязанные к сценариям (в yaml-файле).

Скрипт может быть задан:

  • непосредственно в стейте;
script:
$session.name = $parseTree._Name
  • отдельно в виде имени, в таком случае в стейте после тега идет название скрипта.
patterns:
$Name = (олег/дима)

theme: /
state:
q!: $Name
script:
$session.name = capitalize($parseTree._Name);
a: Привет, {{ $session.name }}!

Скрипт же объявляется в js-файле:

function getName() {
var $session = $jsapi.context().session;
$session.name = capitalize($jsapi.context().parseTree._Name);
}

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

script: myScript()
script:
if ($session.catchAllCount > 1) {
go(“../fallback”);
}

Тег image:

image: — тег выводит изображение на экран пользователя. Перед добавлением тега загрузите изображение в личном кабинете Studio в разделе Контент. Допустимые форматы: .jpg, .png, .bmp, .gif.

Тип значения

  • string — ссылка на изображение.

Параметры

  • hash: — хэш изображения из раздела Контент. Генерируется алгоритмом MD5. Является обязательным параметром.

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

  • none

Синтаксис

После тега укажите ссылку на изображение:

 image: <URL файла из раздела Контент> || hash = "<hash картинки из раздела Контент>"

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

state:
q!: test
image: https://test/image.jpg || hash = "7460d0ffad608ecc5d0ea8cb8de54248"
ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей.
Вы можете запретить сохранение cookie в настройках своего браузера.