Легенда
- ``паттерн’’ - фраза, вызывающая голосовую/текстовую команду или воспроизводимый ответ
значение
- указанное значениепараметры
- передаваемые параметрыдействие
- действие, которое должно быть выполненоoutput
- результат обработки данных[...]
- необязательные данные или параметры
Скрипт диалога
Намерения и шаблоны
Определение голосовой/текстовой команды для воспроизведения ответа
intent('pattern'[, 'patternN'], reply('pattern'))
Определение голосовой/текстовой команды для воспроизведения ответа или выполнения действия
intent('pattern'[, 'patternN'], p => { action })
Определение альтернатив
intent('phrase1|phrase2')
Определение необязательных слов и фраз
intent('pattern (optional phrase|)')
Функции ответа
Воспроизведение ответа (в случае нескольких шаблонов ответ выбирается случайным образом)
reply('pattern'[, 'patternN'])
Воспроизведение ответа
p.play('pattern')
Задание голосовых настроек для ответа ассистента: акцент (en, fr, de, it, ru, es)
, гендер (мужской/женский)
, тип голоса
, высота тона речи
, темп речи
.
`` {.wrap}
p.play([voice(code, gender, type, pitch, rate), ]‘pattern’)
Определяем параметры воспроизведения: ``force:true`` (выполнить, если кнопка неактивна), ``activate:true`` (активировать кнопку до), ``deactivate:true`` (деактивировать кнопку после)
``` {.wrap}
p.play('pattern'[, opts(options)])
Отправляем команду в приложение
p.play({команда:data})
Слоты, определяемые пользователем
Определяют статический список значений, ожидаемых на входе
$(SLOTNAME value1|value2) => p.SLOTNAME.value
Предоставление меток для классификации или идентификации значений слотов
$(SLOTNAME value1~label1|value2~label2) => p.SLOTNAME.label
Включить нечеткое сопоставление для выявления похожих вариантов
$(SLOTNAME~ value1|value2) => p.SLOTNAME.value
Сделать слот необязательным
$(SLOTNAME value1|value2|)
Захват нескольких значений слотов
intent('$(SLOTNAME value1|value2) и $(SLOTNAME value1|value2 )') => p.SLOTNAME_ (array), p.SLOTNAME_[0].value, p.SLOTNAME_[1].value
Предопределенные слоты
Захват значений даты
$(DATE) => p.DATE.value, p.DATE.moment, p.DATE.luxon
Захват значений времени
$(TIME) => p.TIME.value, p.TIME.moment
Захват кардинальных чисел
$(NUMBER) => p.NUMBER.value, p.NUMBER.number
Захват порядковых номеров
$(ORDINAL) => p.ORDINAL.value, p.ORDINAL.number
Захват местоположений
$(LOC) => p.LOC.value
Захват имен
$(NAME) => p.NAME.value
Динамические слоты
Определение динамического слота на уровне проекта
project.name = {en: "value1|value2|value3"}
$(SLOTNAME p:name) => p.SLOTNAME.value
Определение динамического слота на уровне диалоговой сессии
p.userData.name = {en: "value1|value2|value3"}
$(SLOTNAME u:name) => p.SLOTNAME.value
Получение данных для динамического слота с визуальным состоянием
let name = ["value1|value2|value3"]
p.visual.data = {en: name};
$(SLOTNAME v:name) => p.SLOTNAME.value
Определение динамического слота в короткой форме
project.name = {en: "value1|value2|value3"}
$(p:name) => p.SLOTNAME.value
Определение меток для динамических слотов: см. раздел User-defined slots.
Включить нечеткое соответствие для динамических слотов: см. раздел User-defined slots.
Сделать динамический слот необязательным: см. раздел User-defined slots.
Захват нескольких значений слотов: см. раздел User-defined slots.
Слоты RegEx
Захват комбинации цифр и/или букв
const reg = "([A-Za-z]{1}\\\s?){6}"
$(SLOTNAME* ${reg}) => p.SLOTNAME.value
Перехватываем любой пользовательский ввод
$(SLOTNAME* .+) => p.SLOTNAME.value
Контексты
Определение контекста
let contextName = context(() => { action })
Активация контекста
intent('pattern', p => {..., p.then(contextName)}
Передача данных в контекст
p.then(contextName, state: {data:yourData}) => p.state.data
Разрешить контекст
p.resolve([data:yourData])
Сброс контекста
p.resetContext()
Определение намерений, которые могут быть сопоставлены в любой момент времени без переключения текущего контекста
intent(noctx, 'pattern', ...) или noContext(() => {intent(...)})
Воспроизведение подсказки для ожидаемого ввода
fallback('pattern1'[, 'patternN'])
Заголовок контекста
title('contextName')
Предопределенные объекты
Хранят статические данные об устройстве и пользователе, передаваемые из клиентского приложения
authData.data => p.authData.data
Храним данные о состоянии, чтобы они были доступны глобально в масштабе проекта
project.info = {data:yourData} => project.info.data
Хранение оценки совпадения намерений
p.score
Хранение данных для передачи между контекстами
p.state.data
Хранить данные визуального контекста, которые будут передаваться из клиентского приложения с помощью setVisualState()
.
p.visual.data
Хранит данные о состоянии пользователя, доступные во время сеанса диалога
p.userData.data
Предопределенные обратные вызовы
Определяют действия, которые будут выполняться при сохранении скрипта и построении диалоговой модели
onCreateProject(() => { action })
Определите действия, которые будут выполняться при запуске сеанса диалога
onCreateUser((p) => { action })
Определите действия, которые будут выполняться при завершении сеанса диалога
onCleanupUser((p) => { action })
Определяем действия, которые будут выполняться при установке визуального состояния
onVisualState((p, s) => { action })
Определите действия, которые будут выполняться при возникновении пользовательского события в клиентском приложении: buttonReady
, buttonClicked
, micPermissionPrompt
, micAllowed
, firstActivate
, showPopup
, popupCloseClicked
, recognized
.
`` {.wrap} onUserEvent((p, e) => { action })
Определение действий, которые будут выполняться при активации контекста
``` {.wrap}
onEnter((p) => { action })
Сервис вопросов и ответов
Определение URL-адреса индексируемого ресурса
corpus({url: url, depth: depthLevel})
Определение корпуса текстов, который будет использоваться ассистентом в диалоге
corpus('text')
Встроенные JS-библиотеки
Выполнение вызовов API
axios, request
Работа со временем
moment-timezone, luxon
Работа с массивами, числами, объектами, строками и т.д.
lodash
Другое
Приведите список подсказок, помогающих распознать конкретные термины
recognitionHints('hint'[, 'hintN'])
Запись информационных сообщений в журналы Alan Studio
console.log(data)
Запись сообщений об ошибках в журналы Alan Studio
console.error(data)
Клиентский SDK
Методы клиентского API
Передача информации о визуальном состоянии из клиентского приложения в скрипт диалога
setVisualState(visualStateData:object)
Передача данных или выполнение действий без голосовой/текстовой команды
projectAPI.method = function(p, param, callback) {
p.userData.data = param.data;
callback();
};
callProjectApi(method:string, data:object, callback:function)
Воспроизведение текстового сообщения в клиентском приложении
playText(text:string)
Передача текстового сообщения в Alan в качестве входного сигнала пользователя
sendText(text:string)
Выполнение команды в клиентском приложении
playCommand(command:object)
Методы клиентского API (продолжение)
Программная активация кнопки Alan
activate()
Деактивировать кнопку Alan программно
deactivate()
Проверка состояния кнопки Alan
isActive()
Удаление кнопки Alan из родительского элемента, страницы (поддерживается в Web, Ionic)
remove()
Проверка состояния слова wake (поддерживается на iOS, Android)
getWakewordEnabled()
Установка состояния слова пробуждения (поддерживается на iOS, Android)
setWakewordEnabled(enabled:boolean)
Обработчики
// Примеры приведены для Web-платформы
Обработка команд, передаваемых из сценария диалога в клиентское приложение
`` {.wrap} onCommand: function (commandData) { action }
Обработка изменений состояния кнопки Alan
``` {.wrap}
onButtonState: function (e) { action }
Обработка состояния подключения к проекту виртуального помощника в Alan Cloud
onConnectionStatus: function (e) { action }
Обработка событий, полученных от Alan
onEvent: function (e) { action }