Тег a:
a: — (answer) передает текст ответа, который отобразится на экране и который произнесет голосовой ассистент.
Тип значения
- multiline string
Параметры
auto_listening
(boolean
) — указывает будет ли смартап слушать ответ пользователя после ответа ассистента.markdown
(string
) — текст ответа ассистента, отформатированный с помощью Markdown-разметки. Доступны следующие элементы форматирования:
Доступны следующие элементы форматирования:
Форматирование | Пример кода |
---|---|
Жирный шрифт |
|
Курсив |
|
Зачеркнутый шрифт |
|
Ссылка |
|
Маркированный список | или
|
Вложенные данные
- multiline string
Синтаксис
В тексте ответа можно использовать подстановки и функции. Внутри скобок {{ }}
может находиться любое валидное выражение на JavaScript, можно использовать те же переменные и функции, что и в скриптах, кроме собственных функций из подключенных библиотек.
a: Здравствуй {{ capitalize($client.name) }}, как поживаешь? Посмотри что я https://example.com. || auto_listening: false, markdown = "**Здравствуй** {{ capitalize($client.name), как *поживаешь*? Посмотри что я [нашел](https://example.com/)."
Примеры значений
a: Привет!
a: Ответ1
a: Длинный ответ на несколько строчек
Убедитесь, что в тексте нет символов, предназначенных для визуального оформления, которые могут помешать корректному синтезу текста. Подробнее о проектировании сценария смартапа читайте в разделе Основные UX-принципы.
Тег 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: https://sberdevices2.s3pd01.sbercloud.ru/preprod-botadmin/263/264/audio/ovDnhCDSVZmHeWrw.wav || name = "sample.wav", source = "user"
В обоих случаях после разделителя разделителя ||
нужно указывать параметры 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:
.
state: NormalButtons
q!: * start
a: Несколько кнопок:
buttons:
"Это кнопка"
buttons:
"Это вторая кнопка"
- Вложенные данные тега
buttons:
должны соответствовать шаблону:<json-node> -> <string>
. В левой части валидный JsonNode — строка или объект, определяющие текст или тело кнопки. В правой части — опционально строка, определяющая путь перехода при нажатии кнопки.
state: NormalButtons
q!: * start
a: Кнопка с маппингом:
buttons:
"могут содержать маппинг" -> /NormalButtons/2
- Кнопки могут содержать подстановку параметров в имени и маппинге.
state: NormalButtons
q!: * start
a: Подстановка параметров в кнопках:
buttons:
"могут содержать маппинг" -> /NormalButtons/2
"подстановку параметров как в {{ 'имени' }} так и в маппинге" -> {{ './3' }}
Ограничение на количество символов
Вы можете управлять количеством символов в строке кнопок из сценария. Для этого вызовите в стейте script
:
script:
$response._buttonsRowLength=30; // 30 символов в строке
Тег go:
go: — тег выполняет отложенный переход, при этом реакции указанного стейта не выполняются, но обработка следующей фразы происходит в контексте указанного стейта.
Тип значения
- string — путь, куда должен быть осуществлен отложенный переход
Параметры
- none
Вложенные данные
- none
Синтаксис
Путь после тега может быть как абсолютным, так и относительным:
/
— корневая тема;.
— текущее состояние;..
— состояние на уровень выше;./..
— разделение элементов пути.
Примеры значений
go: /path
go: ../anotherPath
go: ../My module/another state
go!: {{ $temp.nextState }}
В теге можно использовать подстановки. Внутри скобок {{ }}
может находиться любое валидное выражение на JavaScript, можно использовать те же переменные и функции, что и в скриптах.
Тег go!:
go!: — тег обеспечивает немедленный переход, при этом выполняются все реакции указанного стейта.
Тип значения
- string — путь, куда должен быть осуществлен немедленный переход
Параметры
- none
Вложенные данные
- none
Синтаксис
Путь после тега может быть как абсолютным, так и относительным:
/
— корневая тема;.
— текущее состояние;..
— состояние на уровень выше;./..
— разделение элементов пути.
Примеры значений
go!: /path
go!: ../anotherPath
go!: ../My module/another state
go!: {{ $temp.nextState }}
В теге можно использовать подстановки. Внутри скобок {{ }}
может находиться любое валидное выражение на JavaScript, можно использовать те же переменные и функции, что и в скриптах.
Тег if:/else:/elseif:
if:/else:/elseif: — теги для записи простых условий, вывода различных ответов в зависимости от условий, перехода в другие состояния по условиям.
Более сложные условные конструкции можно задать в теге script
.
Тип значения
- string — валидное js-выражение возвращающее
boolean
Параметры
- none
Вложенные данные
- tags
Примеры значений
if: condition()
a: Ответ 1
elseif: b == 3
a: Ответ 2
else:
a: Ответ 3
- После
if:
должно стоять js-выражение, результат которого будет преобразован к типуboolean
.
theme:/
state: GoodBye
q!: * (до свидания|пока|до скорого) *
if: $session.name
a: До свидания, {{ $session.name }}!
else:
a: До свидания, человек!
state:
q!: $Number
script: $temp.age = parseInt($parseTree.value);
if: $temp.age > 18
a: Больше 18
elseif: $temp.age == 18
a: Ровно 18
else:
a: Меньше 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: — вывод изображения.
Тип значения
- string — ссылка на изображение.
Параметры
- none
Вложенные данные
- none
Синтаксис
После тега укажите ссылку на изображение:
image: https://name.jpg || hash = "<hash картинки из раздела Контент>"
Примеры значений
state:
q!: test
image: https://test/image.jpg || hash = "<hash картинки из раздела Контент>"