Работа с графическим редактором сценариев
Графический интерфейс создания сценариев предоставляет удобный и легкий в использовании инструментарий, отражающий концепцию Low-Code/No-Code.
В Аксател реализовано два типа сценариев:
- IVR сценарии - сценарии, участвующие в SIP диалогах и являющиеся одной из сторон разговора
- SVC сценарии - сервисные сценарии, выполняющие определённые действия и запускаемые по расписанию или по событиям.
Все сценарии выполняются обработчиком, который является интерпретатором визуального кода в исполняемые действия. Каждый запуск сценария создает новый исполняемый экземпляр со своим идентификатором.
Сценарий состоит из компонентов. Обработчик сценариев включает в себя алгоритмы реализации функциональности компонентов.
Процесс работы обработчика сценария можно представить в следующей последовательности действий:
1. загружает сценарий,
2. создает области данных для хранения объявленных переменных,
3. отыскивает в сценарии компонент Старт с типом основной ветки,
4. сопоставляет с компонентом алгоритм его работы,
5. передает управление алгоритму компонента, передавая на вход параметры для компонента из сценария и накопленный контекст,
6. направляет полученные во время работы компонента события в его очередь обработки и передает ему управление на обработку этой очереди,
7. обрабатывает ответ компонента:
a. продолжение работы компонента;
b. откладывание обработки очередного события;
c. завершение работы компонента. По завершении работы компонента тот возвращает:
i. идентификатор следующего компонента, тогда процесс повторяется с новым компонентом начиная с этапа его поиска в сценарии, расширяясь накопленным контекстом;
ii. код следующего сценария (при необходимости запустить вложенный / асинхронный сценарий);
iii. ошибка, тогда сценарий завершается и, возможно, производится запуск ветки пост-обработки;
iv. команда возврата к предыдущему сценарию, тогда восстанавливается контекст предыдущего сценария и позиция в нем;
v. команда остановки, тогда сценарий завершается, и, возможно, производится запуск ветки пост-обработки;
Выполнение компонента может протекать синхронно и асинхронно.
В любой момент времени обработчик может получить извне команду на завершение. В этом случае выполнение основной ветки сценария прерывается и при наличии соответствующей ветки пост-обработки управление передается на нее.
Компонент при завершении работы на основании полученного результата выбирает для передачи управления ту или иную ветку перехода. Большинство компонентов разделяют успешные и неуспешные результаты работы, сопоставляя им различные ветки перехода. Если ветка перехода не задана, то переход осуществляется по основной ветке (переход по-умолчанию). Если переход по-умолчанию не задан, то происходит остановка выполнения сценария с ошибкой "Нет перехода" и возможный запуск пост-обработки.
Возможные варианты пост обработки определены в компоненте Старт. Выполнение ветки пост-обработки при завершении уже не предполагает переключения на другую ветку.
При запуске сценария на его вход могут передаваться начальные значения
- определенные в сценарии в рамках Web интерфейса Администрирования
- передаваемые из родительского сценария дочернему (имеют приоритет над опр еделенными через Гуи-интерфейс)
В компоненте Старт всем объявленным переменным без установленных значений могут быть присвоены дефолтные нулевые значения. Это делается для того, чтобы не вызвать ошибок при работе с переменными без значений.
Сценарии голосовой обработки (IVR) используются как виртуальный SIP-телефон. По таблице маршрутизации IVR сценарий обслуживается как Код абонентских функций и может иметь множество номеров.
Каждый сценарий является стороной А или стороной В разговора.
IVR сценарий может быть запущен:
- через таблицу маршрутизации. Выступает в качестве стороны В
- через Дозвон до абонента. Выступает в качестве стороны А
- переводом из другого IVR сценария. Обслуживание разговора передается от одного сценария к другому без использования SIP Re-invite или других SIP взаимодействий.
Служебные сценарии - это алгоритмы обработки данных без обязательной привязки в каким либо активностям. Служебные сценарии могут быть запущены следующими способами:
- Ручной запуск сценария из part_title
- Периодический запуск с помощью служебных задач
- Асинхронный запуск из других сценариев
- В качестве обработчика сообщений и запросов с внешних каналов
- В качестве контекстного сценария параллельно каждому звонку
Переменные сценария – это области данных, сохраняющие значения для работы компонентов сценариев и взаимодействия сценария с внешней средой.
Переменные объявляются при редактировании сценария. Область данных выделяется только в момент выполнения сценария.
Переменные могут передаваться между сценариями. Идентификатором переменной служит ее название.
Область видимости | Описание |
Локальные | Доступны только конкретному экземпляру сценария. Значения хранятся в его стеке. Передаются вложенным синхронным и асинхронным сценариям. |
Сессионные | Доступны внутри всех сценариев сессии. Логика обработки идентична Локальным. |
Сценарные | Доступны всем экземплярам конкретного сценария (по коду сценария) в рамках сайта. |
Сайтовые доменные | Доступны всем сценариям текущего домена, исполняемым внутри одного сайта. |
Сайтовые общие | Доступны всем сценариям всех доменов, исполняемым внутри одного сайта. |
Глобальные доменные | Доступны всем сценариям текущего домена, исполняемым на любом сайте, где обслуживается домен. |
Глобальные общие | Доступны всем сценариям всех доменов, исполняемым на любом сайте, где обслуживается домен. Использование этой переменной не рекомендуется и дополнительно регламентируется переключателем Разрешить использование глобальной переменной при создании дочернего домена. |
При сохранении в переменную, слишком большого значения, оно размещается в файловой системе (категория :SYNC), а вместо переменной автоматически размещается путь к файлу.
Тип значения | Описание |
Число | Целое число или число с десятичной точкой. |
Строка | Строковое значение. Хранится в виде структуры, содержащей значение и кодировку. |
Дата-время | Строковое значение в формате RFC3339. |
В операциях, где важна синхронизация типов значений, значения автоматически преобразовываются из одного типа в другой. В случае возникновения ошибок преобразования поведение зависит от конкретной операции.
Использование переменных в Выражениях невозможно до присвоения им значений. По-умолчанию все переме нные создаются с пустым значением.
Присвоение значений переменным
- при старте сценария
– определенные в сценарии в рамках Web интерфейса Администрирования начальных значений
– передаваемые из родительского сценария дочернему (имеют приоритет над определенными через Web-интерфейс). Синхронизация по имени переменной
– в компоненте Старт могут быть присвоены дефолтные нулевые значения (переключатель Инициализировать переменные)
- во время работы сценария
– компонентом Присвоение в режимах одиночного и множественного присвоения
Зарегистрированные локальные переменные при запуске сценария создаются с пустыми значениями. Их использование в выражениях невозможно до присвоения значений.
В компоненте Старт допускается установить режим присвоения начальных значений по умолчанию.
Начальные значения локальных переменных могут быть также установлены при запуске обработчика сценария из настроек сущности конкретного сценария (поле opts.variables), назначены из родительских процессов, скопированы из родительских сценариев и т.д.
Переменные с областью видимости, отличной от локальной, создаются только в момент непосредственного присвоения значений внутри сценария.
Компоненты сценариев оперируют аргументами. Аргументом сценария называется некий объект, значение которого может быть вычислено в любой момент в ходе выполнения сценария по запросу активного компонента.
Вычисление значения аргумента производится по мере необходимости выполнения компонентов. Результат вычисления подставляется в качестве значения соответствующего свойства компонента.
1. Фиксированное значение (константа);
2. Переменная;
3. Выражение (арифметические и строковые операции с переменными, константами и функциями от них).
4. Шаблон
Значение аргумента может принадлежать к одному из типов:
- Число (целое или десятичное);
- Строка;
- Дата/время.
При сопоставлении значений аргументов, происходит их приведение к одному типу по следующему правилу:
- Если типы значений совпадают, то приведения не производится.
- Если оба значения могут быть представлены в виде чисел, производится приведение к числам.
- Если оба значения могут не могут быть представлены в виде чисел, то производится приведение к строке.
Выражение – это заданная в компоненте сценария последовательность арифметических или строковых действий, оперирующая константами, переменными и функциями от них. Выражение используется для подстановки в качестве аргумента в значение компонентов сценария.
Результат выражения может иметь тип сроки, числа и даты (в формате RFC3339).
Значения типа bool на выходе автоматически преобразуются к строке true или false. С помощью функции ifelse(bool,any,any) результат можно привести к другим значениям, например числам 0 или 1.
Чтобы в качестве аргумента выражения использовать значение переменной, следует указать ее имя в квадратных скобках, например [var_i].
Для явного указания строки следует заключать текст в кавычки. В противном случае, сначала будут вычислены все арифметические комбинации, доступные для расчета. В приведенных примерах 2.3 и 2.4 результат будет разный (у 2.3 результат начинается с "5", а у 2.4 с "23").
Разбиение на строки производится с помощью функции endline().
1.1. [var_num_1] + 1
1.2. 2 ^ [var_num_2] * ( Log10 ( [var_num_3] ) + 2 )
1.3. sin ( len ( [var_string_1] ) )
2.1. [var_string_1] + [var_string_2]
2.2. "Кусок текста" + [var_string_1]
2.3. 2 + 3 + [var_string_1]
2.4. "2" + "3" + [var_string_1]
2.5. SubStr ( [var_string_1], 1, Length ( [var_string_1] ) - 1 )
2.6. If ( num([a]) > 5, "больше", "меньше")
Операции над аргументами
Функция | Тип значения | Описание |
+ | num | str | Если аргументы могут быть приведены к числам, то результатом является сумма двух чисел. Иначе аргументы они приводятся к строке и сцепляются. |
++ | str | Приводит аргументы к строке и сцепляет их. |
- | num | Если аргументы могут быть приведены к числам, то результатом является их разность. Иначе операция завершается с ошибкой. |
* | num | Если аргументы могут быть приведены к числам, то результатом является их произведение. Иначе операция завершается с ошибкой. |
/ | num | Если аргументы могут быть приведены к числам, то результатом является их частное. Иначе операция завершается с ошибкой. |
div | int | Если аргументы могут быть приведены к целым числам, то результатом является целая часть их частного. Иначе операция завершается с ошибкой. |
rem | int | Если аргументы могут быть приведены к целым числам, то результатом является остаток от деления. Иначе операция завершается с ошибкой. |
== | bool | Приводит значения аргументов к одному типу и сравнивает их. Равенство. |
/= | bool | Приводит значения аргументов к одному типу и сравнивает их. Неравенство. |
> | bool | Приводит значения аргументов к одному типу и сравнивает их. Больше. |
>= | bool | Приводит значения аргументов к одному типу и сравнивает их. Больше или равно. |
< | bool | Приводит значения аргументов к одному типу и сравнивает их. Меньше. |
=< | bool | Приводит значения аргументов к одному типу и сравнивает их. Меньше или равно. |
Приложение редактора сценариев позволяет задавать выражения с помощью шаблонов.
Шаблон представляет собой строку, в которую в фигурных скобках входят вычислимые выражения. При этом переход между вкладками задания шабл она и задания выражения производит автоматическое взаимное преобразование.
Пример записи одного вычисления на закладке Выражение и Шаблон:
Закладка выражения
Закладка шаблона
Функции используются при создании выражений и шаблонов. Позволяют вычислять специфические значения и проводить операции над системой.
Не все функции доступны в каждом Продукте.
Ниже приведен полный список функций системы по всем Продуктам.
Функция | Параметры | Описание |
abs | num | Абсолютное значение числа |
acos | num | Арккосинус числа |
asin | num | Арксинус числа |
atan | num | Арктангенс числа |
atan2 | num, num | Арктангенс частного двух чисел |
ceil | num | Ближайшее сверху целое число |
cos | num | Косинус числа |
cosh | num | Гиперболический косинус числа |
erf | num | Функция ошибки (интеграл вероятности) |
erfc | num | Дополнительная функция ошибок |
exp | num | Экспонента числа |
floor | num | Ближайшее снизу целое число |
lg | num | Десятичный логарифм числа |
ln | num | Натуральный логари фм числа |
log | num, num | Логарифм одного числа по основанию другого |
log10 | num | Десятичный логарифм числа |
log2 | num | Двоичный логарифм числа |
max | num, num | Максимальное из двух чисел |
min | num, num | Минимальное из двух чисел |
pow | num, num | Результат возведения одного числа в степень другого |
random | | Случайное десятичное число от 0 до 1 |
random | int | Случайное целое число от 0 до указанного целого числа |
random | int, int | Cлучайное целое число в диапазоне между двумя целыми числами |
round | num | Результат округления числа до целого |
sin | num | Синус числа |
sinh | num | Гиперболический синус числа |
sqr | num | Квадрат числа |
sqrt | num | Квадратный корень числа |
tan | num | Тангенс числа |
tanh | num | Гиперболический тангенс числа |
trunc | num | Результат отбрасывания дробной части числа |
Функция | Параметры | Описание |
concat | str,str | Возвращает результат сцепления двух строк. |
equal | str,str | Результат сравнения двух строк: 0 или 1 |
indexof | str,str,int | Возвращает индекс позиции первого вхождения подстроки (п2) в строку (п1), начиная с указанной позиции (п3). Возвращает 0, если вхождений не обнаружено. |
left | str,int | Возвращает левую часть строки не более чем указанной длины. |
len | str | Возвращает длину строки в символах. |
lower | str | Возвращает строку в нижнем регистре. |
modify_json | str,json,json | Возвращает измененную json-структуру. Подробнее в Функция modify json |
newid | | Возвращает сгенерированный UUID-идентификатор. |
regexreplace | str,str,str | Возвращает результат замены с помощью ре гулярного выражения. п1 - значение, п2 - паттерн, п3 - замена. |
regexreplaceg | str,str,str | Возвращает р езультат замены с помощью регулярного выражения с опцией global. п1 - значение, п2 - паттерн, п3 - замена. |
remove | str,int | Возвращает строку после удаления из нее подстроки с указанной позиции (п2) до конца. |
remove | str,int,int | Возвращает строку после удаления из нее подстроки с указанной позиции (п2) указанной длины (п3). |
replace | str,str,str | Возвращает результат замены в строке (п1) вхождения (п2) на значение (п3). |
reverse | str | Возвращает перевернутую строку. |
right | str,int | Возвращает правую часть строки не более чем указанной длины. |
rstr | str,str | Возвращает инде кс позиции последнего вхождения подстроки (п2) в строку (п1). Возвращает 0, если вхождений не обнаружено. |
str | str,str | Возвращает индекс позиции первого вхождения подстроки (п2) в строку (п1). Возвращает 0, если вхождений не обнаружено. |
substr | str,int | Возвращает подстроку с указанной позиции (п2) до конца. |
substr | str,int,int | Возвращает подстроку с указанной позиции (п2) не более чем указанной длины (п3). |
trim | str | Возвращает строку, избавленную от пустых символов в начале и в конце (пробел, табуляция и т.д.). |
trimend | str | Возвращает строку, избавленную от пустых символов в конце (пробел, табуляция и т.д.). |
trimstart | str | Возвращает строку, избавленную от пустых символов в начале (пробел, табуляция и т.д.). |
upper | str | Возвращает строку в верхнем регистре. |
Функция | Параметры | Описание |
date | | Возвращает текущую дату в локальном часовом поясе сервера без указания часового пояса. Формат YYYY-MM-DD. |
date | dt | Возвращает дату из указанной даты/времени. |
dateadd | atom,int,dt | Возвращает дату после добавления указанного количества (п2) указанных единиц времени (п1) к указанной дате/времени (п3). Параметр ук азывается в виде атома (не строки), например dateadd('mi',120,"2019-10-06T13:05:28") Возможные виды единиц по убыванию: yy, yyyy, q, qq, m, mm, ww, wk, d, dd, h, hh, mi, n, s, ss, ms |
datediff | atom,dt,dt | Возвращает число указанных единиц времени между двумя датами. Параметр указывается в виде атома (не строки), например datediff('dd',"2019-10-06","2019-10-05") Возможные виды единиц по убыванию: yy, yyyy, q, qq, m, mm, ww, wk, d, dd, h, hh, mi, n, s, ss, ms |
dateformat | str, dt | Возвращает строку с представление даты (п2) по указанному формату (п1). Например: yyyy-MM-dd. Возможные значения форматирующей строки: yyyy, yy, MM, d, dd, h, HH, MMM, mm, ss, ffff, fff, ff, f, zzz. |
datetime | int,int,int | Возвращает дату/время на основе переданных п1 - года, п2 - месяца, п3 - дня. |
datetime | int,int,int,int,int | Возвращает дату/время на основе переданных п1 - года, п2 - месяца, п3 - дня, п4 - часа, п5 - минуты. |
datetime | int,int,int,int,int,int | Возвращает дату/время на основе переданных п1 - года, п2 - месяца, п3 - дня, п4 - часа, п5 - минуты, п6 - секунды. |
datetime | int,int,int,int,int,int,int | Возвращает дату/время на основе переданных п1 - года, п2 - месяца, п3 - дня, п4 - часа, п5 - минуты, п6 - секунды, п7 - миллисекунды. |
datetime | str | Возвращает дату/время, сформированную по строке. Строка может содержать различные представления даты/времени, в том числе и RFC3339. |
datetimelocal | dt | Возвращает дату/время приведенную к локальному часовому поясу сервера. Числовые значения даты/времени не изменяются, однако абсолютная точка времени может быть сдвинута после изменения тайм-зоны на локальную. |
datetimeutc | dt | Возвращает дату/время приведенную к UTC. Числовые значения даты/времени не изменяются, однако абсолютная точка времени может быть сдвинута после изменения тайм-зоны на нулевую. |
day | dt | Возвращает текущий день (1-31) указанной даты/времени. |
dayofweek | dt | Возвращает номер дня недели (1-7) для указанной даты/времени. |
dayofyear | dt | Возвращает номер дня в году для указанной даты/времени. |
hour | dt | Возвращает текущий час (0-23) указанной даты/времени. |
isleapyear | int | Возвращает true, если указанная дата/время представляет високосный год. |
localtoutc | dt | Возвращает UTC дату/время для указанной даты/времени, рассматриваемой в локальном часовом поясе сервера. |
millisecond | dt | Возвращает текущую миллисекунду (0-999) указанной даты/времени. |
minute | dt | Возвращает текущую минуту (0-59) указанной даты/времени. |
month | dt | Возвращает текущий месяц (1-12) указанной даты/времени. |
now | | Возвращает текущую дату и время в локальном часовом поясе сервера в формате RFC3339. Например, 2019-10-06T16:43:30.46+03:00. |
nowgregsecond | | Возвращает количество секунд по григорианскому календарю, с 0 года н.э. |
nowtick | | Возвращает число, представляющее абсолютное значение в миллисекундах с 01.01.1970 года до текущего времени сервера. |
nowutc | | Возвращает текущую дату и время в UTC в формате RFC3339. |
second | dt | Возвращает текущую секунду (0-59) указанной даты/времени. |
ticktolocal | int | Возвращает дату в локальном часовом поясе сервера по абсолютному значению tick. |
ticktoutc | int | Возвращает дату в UTC по абсолютному значению tick. |
time | | Возвращает текущее время в локальном часовом поясе сервера без указания часового пояса. Формат HH:mm:ss.fff. |
time | dt | Возвращает время из указанной даты/времени. |
utctolocal | dt | Возвращает локальную дату/время для указанной даты/времени, рассматриваемой как UTC. |
valid_date | dt | Возвращает true, если указанная строка содержит корректную дату/время, иначе false. |
weekofyear | dt | Возвращает номер недели в году для указанной даты/времени. |
year | dt | Возвращает текущий год указанной даты/времени. |
Функция | Параметры | Описание |
base64decode | str | Возвращает строку, полученную в результате распаковки из Base-64 представления. |
base64encode | str | Возвращает строку, полученную в результате упаковки в Base64 представление. |
char | str | Возвращает строку с одним символом по его числовому коду. |
dechex | int | Возвращает строку с HEX-представлением числа. |
escape | str | Возвращает строку, полученную в результате преобразования к escape-последовательности. Применяется для вставки в JSON. |
hexdec | str | Возвращает число на основе его HEX-представления. |
htmldecode | str | Возвращает строку, раскодированную c помощью Unicode Hex Character Code |
htmlencode | str | Возвращает строку, закодированную c помощью Unicode Hex Character Code. |
ifelse | bool,any,any | Если значение первого параметра true, то возвращает п2, иначе возвращает п3. |
num | str | Преобразует строку к числу. При неудаче завершается с ошибкой. |
numval | str | Преобразует строку к числу, отрезая с конца неподходящие символы. В пределе возвращает 0. |
str | int | Преобразует числовое значение к строке. |
translit | str | Возвращает результат транслитерации строки. |
unescape | str | Возвращает строку, полученную в результате распаковки из escape-последовательности. Применяется для очистки после JSON. |
urldecode | str | Возвращает строку, раскодированную с помощью UrlEncode. |
urlencode | str | Возвращает строку, закодированную с помощью UrlEncode. |
Функция | Параметры | Описание |
adler32 | any | Хеш от любого значения по алгоритму Adler-32. |
adler32 | num,any | Новое значение хеша от предыдущего значения, скомбинированного с новой порцией. п1 - предыдущее значение хеша, п2 - новая порция данных. По алгоритму Adler-32. |
crc32 | any | Хеш от любого значения по алгоритму CRC32 (IEEE 802.3). |
crc32 | num,any | Новое значение хеша от предыдущего значения, скомбинированного с новой порцией. п1 - предыдущее значение хеша, п2 - новая порция данных. По алгоритму CRC32 (IEEE 802.3). |
md5 | str | Хеш от строки по алгоритму MD5. |
phash2 | any | Хеш-сумму от любого значения по внутреннему алгоритму. |
Функция | Параметры | Описание |
filedir | str | Возвращает название каталога. Для пути к файлу - это имя каталога, для пути к каталогу - это название родительского каталога. |
fileext | str | Возвращает расширение файла, выделенное из указанного пути. |
filename | str | Возвращает имя файла, выделенное из указанного пути. |
gs_domain | | Возвращает :GLOBALSHARE_DOMAIN_DATA - префикс категории сетевого межсайто вого каталога текущего домена. |
gs_public | | Возвращает :GLOBALSHARE_PUBLIC - префикс категории сетевого межсайтового каталога общего назначения. |
gs_script | | Возвращает :GLOBALSHARE_SCRIPT_DATA - префикс категории сетевого межсайтового каталога текущего сценария (по коду). |
makepath | str,str | Возвращает путь, сформированный в результате сцепки двух частей. |
makepath | str,str,str | Возвращает путь, сформированный в результате сцепки трех частей. |
pathtype | str | Возвращает тип пути (префикс категории из указанного пути). |
relpath | str | Возвращает относительный путь (указанный путь без префикса категории). |
ss_domain | | Возвращает :SITESHARE_DOMAIN_DATA - префикс категории сетевого внутрисайтового каталога текущего домена. |
ss_public | | Возвращает :SITESHARE_PUBLIC - префикс категории сетевого внутрисайтового каталога общего назначения. |
ss_script | | Возвращает :SITESHARE_SCRIPT_DATA - префикс категории сетевого внутрисайтового каталога текущего сценария (по коду). |
syn_domain | | Возвращает :SYNC_DOMAIN_DATA префикс категории синхронизирующегося каталога данных домена. |
syn_media | | Возвращает :SYNC_COMMON - префикс категории синхронизирующегося каталога общего назначения. |
syn_script | | Возвращает :SYNC_SCRIPT_DATA префикс категории синхронизирующегося каталога данных текущего сценария (по коду). |
syn_script_media | | Возвращает :SYNC_SCRIPT_STATIC префикс категории синхронизирующегося каталога статических файлов сценария (по коду). |
temp | | Возвращает :TEMP - префикс временного локального каталога сценария. |
Функция | Параметры | Описание |
getscriptref | | Возвращает строку с идентификатором текущего обработчика сценариев. По этому идентификатору обработчику могут отправлять сообщения другие обработчики сценариев, например с помощью компонента Взаимодействие сценариев. |
startparam | int | Возвращает значение входного параметра с указанным индексом. Сценарии могут принимать до 20 входных параметров. |
Функция | Параметры | Описание |
check_variable | str | Возвращает true, если переменная c указанным именем существует и содержит значение. |
get_variable_id | str | Возвращает строку с идентификатором переменной по её имени. |
get_variable_orig | str | Возвращает значение переменной по её имени, причем, если значение строковое, то оно возвращается в исходной кодировке без преобразования. |
get_variable_value | str | Возвращает значение переменной по её имени. |
var | str | Возвращает значение переменной по её имени. |
Функция | Параметры | Описание |
wsurl | | Возвращает URL ближайшего доступного сервера с логической ролью ws. В формате proto://ip-address:port. |
Функция | Параметры | Описание |
e | | Возвращает число e (2.718281828459045). |
phi | | Возвращает число phi (1.618033988749895). |