Алан ИИ


Легенда

  • ``паттерн’’ - фраза, вызывающая голосовую/текстовую команду или воспроизводимый ответ
  • значение - указанное значение
  • параметры - передаваемые параметры
  • действие - действие, которое должно быть выполнено
  • 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 }

Также см.