...
Шаг получения текущего значения переменной сервиса.
Здесь можно подробно ознакомиться с переменными сервиса Переменные сервиса
получитьПеременнуюСервиса("имя_переменной_сервиса", "имя_переменной_куда_сохранять")
изменитьПеременнуюСервиса(*args)
Шаг изменения значения переменной сервиса.
Здесь можно подробно ознакомиться с переменными сервиса Переменные сервиса
изменитьПеременнуюСервиса("имя_переменной_сервиса", "значение_или_имя_переменной_откуда_записать")
...
Переписка с пользователями
...
Текст сообщения может содержать HTML теги для форматирования сообщения. Текст сообщения также может включать в себя вставку значений из переменных. Система самостоятельно проверит форматирование сообщения на соответствие требованиям канала.
Info |
---|
Для канала Telegram есть поддержка тегов |
Пример вывода простого текстового сообщения:
...
Info |
---|
Передача файлов пользователю поддерживается только для сценариев в документах баз знаний и не поддерживается для сценариев приветствия и интеграций. |
...
задатьПользователюВопрос(*сообщение)
...
Шаг отправки пользователю вопроса пользователю и ожидания ответа.
В качестве аргумента для задатьПользователюВопрос принимается текст вопроса или переменная, которая содержит такой текст. Сообщения без текста не будут отправлены. Текст вопроса может содержать HTML теги для форматирования сообщения. Текст сообщения также может включать в себя вставку значений из переменных. Система самостоятельно проверит форматирование сообщения на соответствие требованиям канала.
.сохранитьРезультат(*переменная)
В качестве аргумента для сохранитьРезультат принимается название переменной, в которую сценарий поместит ответ пользователя. Если указанная переменная ранее не была определена в сценарии - сценарий создаст её.
...
Code Block | ||
---|---|---|
| ||
задатьПользователюВопрос("На какую дату нужен пропуск ?").сохранитьРезультат("whatDay") +
...
|
Пример сценария с вопросом и разбором результатов:
Code Block | ||
---|---|---|
| ||
задатьПользователюВопрос("Как дела?").сохранитьРезультат("what") +
если("{what} != Хорошо").то(
комментарий("А дела то не хорошо") +
завершитьИПеревестиНаОператора
) +
комментарий("Все отлично") +
завершить
|
Время ожидания ответа от пользователя устанавливается таймером сценариев, значение которого можно указать в разделе Настройки - Сценарии. Если ответ от пользователя не поступит в указанное время, сценарий будет завершен. После завершения сценарий по таймеру система отправит пользователю соотвествующее служебное сообщение, текст которого можно указать в разделе Настройки - Сценарии.Дополнительные модификаторы для данного шага включают в себя возможность указания вариантов ответа и правила проверки ответа по шаблонуслужебное сообщение, текст которого можно указать в разделе Настройки - Сценарии.
Дополнительные модификаторы для данного шага включают в себя возможность указания вариантов ответа и правила проверки ответа по шаблону.
.сохранитьРезультат(текст, файлы, ожидание)
Данная модификация шага позволяет запросить несколько файлов у пользователя в течение заданного промежутка времени. Все реплики пользователя будут склеены в одно сообщение, которое хранится в переменной текст
. Идентификаторы всех отправленных пользователем файлов хранятся в переменной файлы
, а также внутри системной переменной externalFiles
. Таймер ожидания файлов задается числом в переменную ожидание
.
Пример сценария с запросом файлов у пользователя:
Code Block | ||
---|---|---|
| ||
задатьПользователюВопрос("Пришли файл(ы) пожалуйста, у тебя есть 15 секунд.").сохранитьРезультат(текст="user_text", файлы="user_file[]", ожидание=15)
сообщениеПользователю("Ты написал: {user_text}")
сообщениеПользователю.сШаблоном("Ты приложил файлы: {user_file}")
завершить |
ожидание
не должно быть больше таймера сценариев, заданного в Настройки - Сценарии.
.сВариантамиОтвета(*варианты)
...
Code Block | ||
---|---|---|
| ||
задатьПользователюВопрос("На какую дату нужен пропуск ?").сВариантамиОтвета("Сегодня", "Завтра").сохранитьРезультат("whatDay") +
...
|
Есть возможность передать сразу список кнопок без необходимости перечисления каждой отдельно. Обработка результатов выбора осуществляется как обычно. Пример передачи списка кнопок ниже:
Code Block | ||
---|---|---|
| ||
выполнитьJs(""" var variants = ['Да','Нет','Не употребляю']; var exit = {'variants':JSON.stringify(variants)}; exit; """) + задатьПользователюВопрос("Кофе?").сВариантамиОтвета("{variants}").сохранитьРезультат("userSaid") |
.проверитьФормат(*формат, *сообщение)
...
Code Block | ||
---|---|---|
| ||
// выражение для проверки, что введенная строка соотвествует формату даты вида 02.12.2021 задатьПользователюВопрос("Укажите дату").проверитьФормат("(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.](19|20)\\d\\d", "Не понял вас, повторите пожалуйста.").сохранитьРезультат("day")+ // выражение для проверки, что введенная строка содержит адрес электронной почты задатьПользователюВопрос("Напишите email").проверитьФормат("^\\S+@\\S+\\.[a-z]{2,}$", "Пожалуйста, введите корректный email").сохранитьРезультат("_email")+ |
запроситьФайл(*сообщение).сохранитьРезультат(*переменная)
...
Code Block | ||
---|---|---|
| ||
запроситьФайл("Приложите файл").можноПропустить("Пропустить") +
...
|
Работа с API вызовами
Шаги обращения к внешним сервисам и разбора полученных данных. В настоящее время поддерживается API вызовы REST и SOAP сервисов, планируется подключение к почтовым, FTP и прочим сервисам.
...
Code Block | ||
---|---|---|
| ||
установитьПеременную("post_url", "https://api.autofaq.ai/v1/ping") +
...
вызвать.внешнийСервис("{post_url}", "POST").сТеломСообщения("{query}").сохранитьРезультат(("message", "response_message"),("code", "response_code")) +
...
|
Модификаторы шага позволяют указать URL параметры запроса, заголовки, тело сообщения или сохранить ответ со сложной структурой для дальнейшего разбора.
...
Code Block | ||
---|---|---|
| ||
установитьПеременную("user_token", "1234567890abcd") +
...
вызвать.внешнийСервис("{url}","GET").сПараметрами(("query","order"),("token","{user_token}")).сохранитьРезультат(("result", "answer_code")) +
...
|
.сЗаголовками(*args)
Модификатор шага вызова сервиса для передачи заголовков запроса. Заголовки передаются парами в формате название заголовка - значение заголовка. Значение заголовка может быть указано текстом или переменной, которая содержит данный текст.
...
Code Block | ||
---|---|---|
| ||
// передача JSON вызвать.внешнийСервис("{url}", "POST").сЗаголовками(("Content-Type", "application/json")).сТеломСообщения("{\"name\":\"new document\", \"question\":\"new question\"}").сохранитьРезультат(("result", "answer_code")) + // передача x-www-form-urlencoded вызвать.внешнийСервис("{url}", "POST").сЗаголовками(("Content-Type", "application/x-www-form-urlencoded")).сТеломСообщения("name=new document, question=new question").сохранитьРезультат(("result", "answer_code")) + |
Асинхронные API вызовы
AutoFAQ может получать и обрабатывать POST вызовы от других сервисов. Адрес выставляемого вебхука включает в себя идентификатор сервиса и идентификатор диалога в рамках которого работает сценарий.
...
Code Block | ||
---|---|---|
| ||
// установили адрес внешней системы
установитьПеременную("comand_url", "https://host.ru") +
//
// получили адрес вебхука
вызвать.получитьАдресВебхука("webhook_url") +
//
// собираем тело основного запроса с адресом вебхука
выполнитьJs("""
var request_body = {'request':'run', 'param_request':param_request};
var exit = {'request_body':JSON.stringify(request_body)};
exit;
""") +
//
// отправляем запрос
вызвать.внешнийСервис("{comand_url}", "POST").сЗаголовками(("Content-Type", "application/json")).сТелом("{request_body}").сохранитьРезультатКакСтроку("responce") +
//
// включить вебхук - указать таймер ожидания 30 секунд и указать в какую переменную будет сохранен полученный JSON
вызвать.выставитьВебхук(30).сохранитьРезультатКакСтроку("result") +
// |
.сСоставнымТеломСообщения(*args)
...
Code Block | ||
---|---|---|
| ||
// передача файла через указание пути
вызвать.внешнийСервис("{url}", "POST").сСоставнымТеломСообщения(("content" -> "C:/docker.yml")).сохранитьРезультат(("result", "answer_code")) +
// передача файла через идентификатор файла в хранилище
вызвать.внешнийСервис("{url}", "POST").сЗаголовками(("apikey","{apikey_var}")).сСоставнымТеломСообщения(("content" -> "{fileId}"),("type" -> "addAttach")).сохранитьРезультат(("result", "answer_code")) +
|
.сохранитьРезультатКакСтроку(*переменная)
...
Code Block | ||
---|---|---|
| ||
добавитьПолеВФормуОператора(
форма = "Заведение заявки в Service Desk",
переменная = "t1",
название = "Описание заявки",
тип = "Многострочный редактируемый текст",
описание = "Опишите вашу проблему",
обязательное = true
)
|
Список возможных значений параметра "тип":
Нередактируемый текст
- вывод нередактируемого текстового сооющения на формеОднострочный редактируемый текст
- вывод однострочного поля для вводаМногострочный редактируемый текст
- вывод многострочного поля для вводаЦелое число
- вывод поля для ввода целого числаВыпадающий список
- вывод поля для выбора одного значения из выпадающего спискаМножественный выбор
- вывод поля для выбора нескольких значений из выпадающего спискаПереключатель
- вывод переключателя, который сохранит булево значение true или falseФайлы
- вывод поля для прикладывания файлов операторомДата
- вывод поля с выбором даты (календарь)Время
- вывод поля для ввода времени в форматеЧЧ:ММ
ДатаВремя
- вывод поля для ввода даты и времени (календарь и текстовое поле)
Для полей типа Выпадающий список
или Множественный выбор
необходимо указание параметра варианты
. Данный парметр параметр должен содержать сериализованное представление списка вариантов в формате ключ-значение.
...
Code Block | ||
---|---|---|
| ||
установитьПеременную("slots", "{\"1\": \"Утро с 9 до 12\", \"2\": \"День с 12 до 18\", \"3\": \"Вечер с 18 до 21\", \"4\": \"Ночь с 21 до 24\"}") +
...
добавитьПолеВФормуОператора(
форма = "Заведение заявки в Service Desk",
переменная = "slot",
название = "Временной слот",
тип = "Выпадающий список",
описание = "",
обязательное = true,
варианты = "{slots}"
) +
...
|
показатьФормуОператору(имя = "форма")
...