Работа с графическим редактором сценариев
Графический интерфейс создания сценариев предоставляет удобный и легкий в использовании инструментарий, отражающий концепцию Low-Code/No-Code.
Общая логика обработки сценариев Аксател
В Аксател реализовано два типа сценариев:
IVR сценарии - сценарии, участвующие в SIP диалогах и являющиеся одной из сторон разговора
SVC сценарии - сервисные сценарии, выполняющие определённые действия и запускаемые по расписанию или по событиям.
Все сценарии выполняются обработчиком, который является интерпретатором визуального кода в исполняемые действия. Каждый запуск сценария создает новый исполняемый экземпляр со своим идентификатором.
Сценарий состоит из компонентов. Обработчик сценариев включает в себя алгоритмы реализации функциональности компонентов.
Процесс работы обработчика сценария можно представить в следующей последовательности действий:
1. загружает сценарий,
2. создает области данных для хранения объявленных переменных,
3. отыскивает в сценарии компонент Старт с типом основной ветки,
4. сопоставляет с компонентом алгоритм его работы,
5. передает управление алгоритму компонента, передавая на вход параметры для компонента из сценария и накопленный контекст,
6. направляет полученные во время работы компонента события в его очередь обработки и передает ему управление на обработку этой очереди,
7. обрабатывает ответ компонента:
a. продолжение работы компонента;
b. откладывание обработки очередного события;
c. завершение работы компонента. По завершении работы компонента тот возвращает:
i. идентификатор следующего компонента, тогда процесс повторяется с новым компонентом начиная с этапа его поиска в сценарии, расширяясь накопленным контекстом;
ii. код следующего сценария (при необходимости запустить вложенный / асинхронный сценарий);
iii. ошибка, тогда сценарий завершается и, возможно, производится запуск ветки пост-обработки;
iv. команда возврата к предыдущему сценарию, тогда восстанавливается контекст предыдущего сценария и позиция в нем;
v. команда остановки, тогда сценарий завершается, и, возможно, производится запуск ветки пост-обработки;
Выполнение компонента может протекать синхронно и асинхронно.
В любой момент времени обработчик может получить извне команду на завершение. В этом случае выполнение основной ветки сценария прерывается и при наличии соответствующей ветки пост-обработки управление передается на нее.
Компонент при завершении работы на основании полученного результата выбирает для передачи управления ту или иную ветку перехода. Большинство компонентов разделяют успешные и неуспешные результаты работы, сопоставляя им различные ветки перехода. Если ветка перехода не задана, то переход осуществляется по основной ветке (переход по-умолчанию). Если переход по-умолчанию не задан, то происходит остановка выполнения сценария с ошибкой "Нет перехода" и возможный запуск пост-обработки.
Возможные варианты пост обработки определены в компоненте Старт. Выполнение ветки пост-обработки при завершении уже не предполагает переключения на другую ветку.
При запуске сценария на его вход могут передаваться начальные значения
определенные в сценарии в рамках Web интерфейса Администрирования
передаваемые из родительского сценария дочернему (имеют приоритет над определенными через Гуи-интерфейс)
В компоненте Старт всем объявленным переменным без установленных значений могут быть присвоены дефолтные нулевые значения. Это делается для того, чтобы не вызвать ошибок при работе с переменными без значений.
IVR сценарии
Сценарии голосовой обработки (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().
Примеры выражений
Примеры числовых выражений
Примеры строковых выражений
Операции
Операции над аргументами
Функция
Тип значения
Описание
+
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).
pi
Возвращает число pi (3.141592653589793).
Символы
Функция
Параметры
Описание
dblquot
Возвращает строку с символом двойной кавычки.
endline
Возвращает строку с символом конца строки.
quot
Возвращает строку с символом кавычки.
tab
Функции сценариев IVR
Функция
Примечание
Описание
calledext()
только для вызовов, поступивших в IVR
Возвращает строку с расширением КАФ, по которому звонок поступил в IVR.
callednum()
только для вызовов, поступивших в IVR
Возвращает строку с набранным абонентом номером.
callid()
Возвращает строку со значением заголовка CallId плеча b2b - ivr текущего разговора
huntid()
только для сценариев Прекоммутации и Ожидания в очереди обработки очередей
Возвращает строку с идентификатором сущности hunt-группы, на которую направлен вызов.
huntobjid
только для сценариев Прекоммутации и Ожидания в очереди обработки очередей
Возвращает строку с идентификатором текущего абонента очереди hunt-группы.
ivrparam(str)
только для вызовов, поступивших в IVR.
Возвращает значение указанного параметра из заголовка X-R-Ivr, который формируется ролью b2b. Например, from, to, by.
q_displayname
только для сценария Прекоммутации обработки очередей
Возвращает displayname абонента, ожидающего коммутации с вызываемым оператором
q_domain
только для сценария Прекоммутации обработки очередей
Возвращает domain абонента, ожидающего коммутации с вызываемым оператором
q_username
только для сценария Прекоммутации обработки очередей
Возвращает username абонента, ожидающего коммутации с вызываемым оператором
queueestimatedsec()
только для сценария Ожидания в очереди обработки очередей
Предполагаемое время ожидания в очереди
queueposition()
только для сценария Ожидания в очереди обработки очередей
Возвращает текущую позицию в очереди.
queuepriority()
только для сценария Ожидания в очереди обработки очередей
Возвращает текущее числовое значение приоритета в очереди.
queuepriority(int)
только для сценария Ожидания в очереди обработки очередей
Устанавливает новое числовое значение приоритета в очереди, автоматически производится перемещение.
queuerescount()
только для сценария Ожидания в очереди обработки очередей
Возвращает количество операторов в хант-группе.
queuerescount(str)
только для сценария Ожидания в очереди обработки очередей
Возвращает количество операторов в хант-группе, находящихся в указанном в переменной str состоянии. Возможные варианты:
online
free
queuestate()
только для сценария Ожидания в очереди обработки очередей
Возвращает строку с названием состояния ожидания в очереди.
r_number
только для сценария Прекоммутации обработки очередей
Возвращает строку с номером оператора
remotenum()
Возвращает строку с номером абонента, сформированным в результате применения правил представления.
Переменные
В этом блоке находятся все объявленные в сценарии переменные. В Выражения сценариев они добавляется в [ и ] Например, переменная ABC в Выражение (и шаблоны) будет добавлена как [ABC]
Дополнительная информация
Функция modify json
Применяет поисковый запрос (п1) к значению (п2), обнаруженный элемент подвергает модификации согласно опциям (п3) и возвращает общий результат.
Пример:
Опции представлены в виде json-объекта с обязательным ключом action. Возможные варианты:
append - для массива. Добавляет новый элемент в конец. В опциях значение элемента по ключу value.
prepend - для массива. Добавляет новый элемент в начало. В опциях значение элемента по ключу value
insert - для массива. Добавляет новый элемент в указанную позицию. В опциях значение элемента по ключу value, позиция по ключу index.
replace - для массива. Заменяет элемент в указанной позиции на новый. В опциях значение нового элемента по ключу value, позиция по ключу index.
replace_auto - для массива. Заменяет все элементы массива на указанное значение. В опциях значение по ключу value.
delete - для массива. Удаляет элемент из указанной позиции. В опциях значение позиции по ключу index.
keystore - для объекта. Сохраняет элемент по указанному ключу, в зависимости от наличия ключа добавляет или изменяет значение. В опциях значение элемента по ключу value, значение ключа по ключу key.
keyreplace - для объекта. Заменяет элемент по указанному ключу, а если ключ отсутствует, то оставляет без изменений. В опциях значение элемента по ключу value, значение ключа по ключу key.
keyinsert - для объекта. Сохраняет элемент по указанному ключу, если он отсутствует, а иначе завершается с ошибкой. В опциях значение элемента по ключу value, значение ключа по ключу key.
keydelete - для объекта. Удаляет элемент по указанному ключу. В опциях значение ключа по ключу key.
Примеры.
Исходная переменная x
Пример 1. Keyinsert
Добавлено в json ключа "channel" со значением "test".
Результат
Если Key channel существует до выполнения modify_json, то результат будет Ошибка
Пример 2. Keyreplace
Заменена значения у поля name.
Результат
Взаимодействие сценариев
Каждый сценарий в процессе своего выполнения может запускать другие сценарии в двух режимах
Вложенное (синхронное) выполнение. Родительский сценарий ждет завершения дочернего для продолжения своей работы.
Асинхронное выполнение. Родительский сценарий не ждет завершения дочернего, а продолжает свою работу.
Варианты вызова сценариев
IVR → IVR
Вызов дочернего IVR осуществляется через Запуск сценария по имени или по коду. Вызов возможен только во Вложенном (синхронном) режиме. Все Локальные переменные родительского IVR наследуются дочерним сценарием. Для возврата управления в родительский IVR, дочерний сценарий необходимо завершить компонентом Стоп с включенным признаком возврата управления. Вместе с управлением в родительский вернутся изменения в значениях локальных переменных, если таковые были сделаны в дочернем сценарии.
Обычно применяется для
разбиения больших сценариев на более понятные;
для выделения идентичной логики несколькими сценариями;
IVR → Служебный сценарий
Вызов служебного сценария из IVR-сценария осуществляется через Запуск сценария по имени или по коду. Вызов возможен только в Асинхронном служебном режиме. Все Локальные переменные родительского IVR наследуются служебным сценарием.
Обычно применяется для асинхронной обработки данных, полученных из IVR сценария (которая может занять длительное время и не должна влиять на голосовое взаимодействие с абонентом)
Служебный → IVR сценарий
Для вызова IVR-сценария из служебного сценария используется Исходящий звонок. Происходит инициация исходящего звонка от имени IVR на указанный номер и при поднятии трубки запускается указанный IVR сценарий.
Обычно используется для автоматических задач дозвона и оповещения.
Служебный → Служебный сценарий
Для вызова служебного сценария из служебного сценария используется Запуск сценария . Вызов возможен в обоих режимах - вложенного и асинхронного.
В режиме вложенного будет ожидать завершения вызываемого сценария. Локальные переменные наследуются в дочерний.
В режиме асинхронного запускает параллельное выполнение сценария. Родительский сценарий не ждет завершения дочернего. Даже если родительский сценарий завершится, асинхронный служебный сценарий продолжит свою работу пока не завершится сам. Используется для параллельной обработки больших объемов данных.
Все сценарии настраиваются в модуле Редактор сценариев (scripteditor). Модуль предоставляет возможность с помощью графического интерфейса визуально программировать сценарии и имеет все требуемые компоненты для решения большинства задач.
Верхняя панель
Название
Описание
Имя сценария
Отображается имя сценария
Код сценария
Отображается заданный код сценария
Тип сценария
Сохранить
Сохранение сценария
Затем выберите нужно действие в контекстном меню выбора.
Основное окно
Отображается последовательность выполнения компонентов сценария и условные переходы между ними.
Правила хорошего тона
Графический интерфейс создания сценариев предоставляет удобный и легкий в использовании инструментарий, отражающий концепцию Low-Code/No-Code. Но с другой стороны "некрасивое" рисование сценария приведет к сложностям дальнейшей модификации и понимания. Поэтому мы рекомендуем придерживаться следующих правил:
1. Разбивать сценарии по функциональному предназначению. Можно все активности свести в один громоздкий сценарий, но стоимость любого изменения и возможной ошибки будет пропорционально количеству компонент.
2. Названия сценариев должны быть "говорящими".
a. Префикс должен отражать прямое предназначение, проект, другую классификацию.
b. Основная часть имени должна нести смысловую нагрузку
c. Постфикс можно использовать на номер версии, дату последнего релиза и т.п.
3. Коды сценариев должны быть максимально сжатыми и отвечать единым правилам наименования. В пределе Код и Наименования могут совпадать, но обычно код меньше по количеству символов.
4. Планарность самого рисунка. Пересекаемые линии переходов сильно усложняют чтение картинки. Рекомендуется избегать пересечений или минимизировать их смысловое влияние на чтение сценария
5. Использование Комментарий где можно выделить отдельно значимый блок. В описании указать что это за блок, какие функции он выполняет и в дальнейшем вести changeLog изменений в нем
6. Оптимизация количества компонент. Не рекомендуется более 100 компонент в одном сценарии. Рекомендация крайне условная, но ей можно придерживаться при формальной оценке сложности сценария.
7. У компонент тоже должны быть "говорящие" названия. Не "Присвоение 3" (по пиктограмме видно что это Присвоение, а "i+1" или "увеличение счетчика i".
8. Названия переменных так же важны. Не рекомендуется плодить множество переменных, но и ограничений нет. Используйте переменные и их наименования чтобы облегчить восприятие сценария.
9. После компонента Старт задать все начальные значения, которые являются константами и не получаются из Дефолтных значений объекта или из других переменных.
10. Отладочные компоненты настроены не на константы, а на переменные, которые можно изменить в начале сценария. Например пользователь у компонента Уведомление.
11. Нет брошенных веток. Каждая ветка завершается компонентом Стоп или Отбой или другим конечным компонентом.
12. При необходимости отладочных данных в работающем сценарии записывать их в Лог-файлы через Уведомление. После можно будет собрать логи и проанализировать выпонение разных экземпляров.
13. Использование компонента SQL-запрос только там, где данные принадлежат Аксател (а не другой системе) или в случае, если сторонняя ИС не может предоставить WebService API доступ к данным.
Рекомендации по этапам работы над сценариями
Этап проектирования архитектуры разбиения ответственности за реализацию по сценариям.
Этап проектирования структуры сценария
– входные - выходные данные,
– протоколы взаимодействия,
– основные блоки и алгоритмы внутри сценария
Этап разработки.
Этап отладки.
Этап приведения сценария в состояние релиза
Этап оценки качества. Рекомендуем на этот этап привлекать инженера, кто не задействован в текущем проекте. Цель этапа - оценить читаемость сценария и насколько сторонний инженер сможет в нем разобраться через месяц-год.
IVR-сценарии и Служебные сценарии имеют как общие компоненты так и уникальные. Также набор компонент может отличаться между Продуктами.
Далее приведен полный список компонентов и их свойств, которые могут быть в любых типах сценариев во всех Продуктах.
Last updated
Was this helpful?