Тег a:
a: — (answer) передает текст ответа, который отобразится на экране и который произнесет голосовой ассистент.
Тип значения
- multiline string
Параметры
auto_listening
(boolean
) — указывает будет ли смартап слушать ответ пользователя после ответа ассистента.markdown
(string
) — текст ответа ассистента, отформатированный с помощью Markdown-разметки.
Доступны следующие элементы форматирования:
Форматирование | Пример кода |
---|---|
Жирный шрифт |
|
Курсив |
|
Зачеркнутый шрифт |
|
Ссылка |
|
Маркированный список | или
|
Вложенные данные
- 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
) — обязательный параметр, который указывает на источник звука. Возможные значения:user
— звук загружен с компьютера;library
— звук из библиотеки.
Синтаксис
Синтаксис тега зависит от того, какие звуки вы используете: загруженные или из библиотеки.
При загрузке звуков нужно указать веб-адрес файла из раздела Контент:
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:
- Вложенные данные тега
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
;/путь
не равно/Путь
.
Примеры описания путей
При описании пути в абсолютном виде, нужно начинать с самого верхнеуровневого стейта:
theme: /
state: Один
a: Это стейт один
state: Два
a: Это стейт два
state: Три
a: Это стейт триВ этом случае путь до стейта «Три» будет выглядеть следующим образом:
go: /Один/Два/Три
При описании пути в абсолютном виде, если у
theme
есть имя, то нужно начинать с него:theme: /Главный
state: Один
a: Это стейт один
state: Два
a: Это стейт два
state: Три
a: Это стейт триВ этом случае путь до стейта "Три" будет выглядеть следующим образом:
go: /Главный/Один/Два/Три
При описании пути от текущего стейта:
state: One
a: Это верхнеуровневый стейт
state: Two
a: Это текущий стейт
go: ./Three
state: Three
a: Это целевой стейтВ этом случае
./Three
означает путь от текущего стейта, до стейта Three.
При описании пути от стейта на уровень выше:
state: One
a: Это самый верхнеуровневый стейт
state: Two
a: Это стейт на уровень выше
state: Three
a: Это текущий стейт
go: ../Four
state: Four
a: Это целевой стейтВ этом случае
../Four
означает путь от стейта, который находится на один уровень выше стейта Three, до стейта Four.
Использование подстановок при объявлении пути:
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
;/путь
не равно/Путь
.
Примеры описания путей
При описании пути в абсолютном виде, нужно начинать с самого верхнеуровневого стейта:
theme: /
state: Один
a: Это стейт один
state: Два
a: Это стейт два
state: Три
a: Это стейт триВ этом случае путь до стейта «Три» будет выглядеть следующим образом:
go!: /Один/Два/Три
При описании пути в абсолютном виде, если у
theme
есть имя, то нужно начинать с него:theme: /Главный
state: Один
a: Это стейт один
state: Два
a: Это стейт два
state: Три
a: Это стейт триВ этом случае путь до стейта Три будет выглядеть следующим образом:
go: /Главный/Один/Два/Три (сделать строку кодовой вставкой)
При описании пути от текущего стейта:
state: One
a: Это верхнеуровневый стейт
state: Two
a: Это текущий стейт
go!: ./Three
state: Three
a: Это целевой стейтВ этом случае
./Three
означает путь от текущего стейта, до стейта Three.
При описании пути от стейта на уровень выше:
state: One
a: Это самый верхнеуровневый стейт
state: Two
a: Это стейт на уровень выше
state: Three
a: Это текущий стейт
go!: ../Four
state: Four
a: Это целевой стейтВ этом случае
../Four
означает путь от стейта, который находится на один уровень выше стейта Three, до стейта Four.
Использование подстановок при объявлении пути:
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"