General applications
- Vitalii Kovalyshyn
- Olesya Tantsyura
- Daniil Lohvinov
Операторы
if
Оператор if управляет условным ветвлением.
{ "if": { "expression": "${myVar} == '1'", "then": [], "else": [] } }
switch
Операторы switch и case помогают управлять сложными условными операциями и операциями ветвления.
{ "switch": { "variable": "${getIvrDigit}", "case": { "1": [], "2": [], "3": [], "default": [] } } }
while
Логика работы такая же, как и в языках программирования. Первый раз аппликейшены в блоке [do] выполняются без проверки условия. Последующие разы выполняются только если условие истинно.
{ "while": { "condition": "${myVar} < 10", "maxSteps": "1000", "do": [ { "log": "log is ${myVar}" }, { "js": { "data": "+${myVar} + 1", "setVar": "myVar" } } ] } }
condition - условие, написанное с учетом синтаксиса js;
maxSteps -глобальный параметр отвечает за максимальное количество шагов в непосредственно блоке (сделано для того чтобы если где-то дальше например в конце схемы цикл будет снова вызван из goto то схема не зациклилась) если не указывать по умолчанию будет 1000;
do – массив аппликейшенов, которые будут выполняться в цикле.
Триггеры
disconnected
Выполняет набор приложений после завершение основного скрипта. Объявляется единожды вначале скрипта.
{ "trigger": { "disconnected": [] } }
commands
Commands влиять пока только на все recvMessage в схеме, если будет выполнена команда, тогда recvMessage таймаут обновляется.
{ "trigger": { "commands": { "/queue": [ { "sendText": "queue" } ], "/show map": [ { "sendText": "map" } ], "press button 1": [ { "sendText": "button" } ] }, "disconnected": [ { "dump": true } ] } }, { "sendText": "start" }, { "recvMessage": { "set": "текст", "timeout": 20 } },
Функции
function
Объединить набор приложений в именную функцию. Объявляется вначале скрипта.
{ "function": { "name": "myFunction", "actions": [] } }
execute
Выполнение предварительно объявленной функции по имени.
{ "execute": { "name": "myFunction" } }
Переменные
set
Назначение переменных на канал.
{ "set": { "hangup_after_bridge": "true", "ivrLang": "en" } }
export
Экспорт переменных на сторону оператора, а также в статистику.
{ "export": [ "reverted_caller_id_number" ] },
unSet
Разустанавливает переменную.
{ "unSet": [ "reverted_caller_id_number" ] }
Служебные приложения
calendar
Приложение позволяет проверить текущее время с рабочим календарем. Значение сохраняется в переменную.
{ "calendar": { "extended": false, "name": "WorkDay", "setVar": "isWorkDay" } }
cache
Приложение позволяет работать с данными в памяти либо Redis сервере.
[ { "cache": { "action": "set", "set": { "data": { "key": "value" }, "ttl": "10000" }, "type": "memory" } }, { "cache": { "action": "get", "get": { "myVar": "key" }, "type": "redis" } }, { "cache": { "action": "delete", "delete": { "keys": [ "key", "key1" ] }, "type": "redis" } } ]
httpRequest
Выполнение HTTP REST запроса и обработка результата (get JSON)
{ "httpRequest": { "url": "https://sales.bpmonline.com/${id}/dataservice/json/reply/SelectQuery", "method": "POST", "timeout": 1000, "insecureSkipVerify": false, "parser": "application/json", "cacheCookie": false, "responseCode": "http_response_code", "headers": { "Content-Type":"application/json", "Cookie": "${my_cookie}" }, "path": { "id": 0 }, "data": { "Name": "Supervisor", "UserID": "Supervisor" }, "exportVariables": { "effective_caller_id_name": "callerIdName", "owner_caller_id_number": "callerIdOwner" } } }
js
Выполнение произвольного JavaScript кода с возвращением результата в переменную
{ "js": { "data": "var time = LocalDate(); time.setDate(time.getDate() + (+${dpd}*-1)); return time.getMonth() + '-' + time.getDate() + '-' + time.getFullYear()", "setVar": "myVar" } }
joinAgent
Постановка абонента в личную очередь оператора. Работает только для звонков.
{ "joinAgent": { "agent": { "extension": "1008" }, "processing": { "sec": 30, "form": { "id": 604 }, "enabled": true, "renewal_sec": 10 }, "queue_name": "${cc_queue_name}", "cancel_distribute": false } }
processing.form.id
- идентификатор формы. Если пусто, или 0 - без формы.
joinAgentToTask
Возможность из схемы оператору назначить таску (join task новая очередь task)
{ "joinAgentToTask": { "agent": { "extension": "1008", "id": "OR AGENT ID" }, "communication": { "description": "bla bla bla description", "destination": "bla bla", "type": { "id": 1 } }, "processing": { "enabled": true, "form": { "id": 604 }, "renewal_sec": 10, "sec": 30 }, "queue_name": "Igor test queue", "timeout": 20 } }
Работает для всех типов схем.
agent.id
oragent.extension
- обязательные поля, на какого оператора нужно назначить задачу;communication.description
- не обязательно, описание типа связи (см. Абоненты);communication.destination
- не обязательно, номер или любой текст типа связи (см. Абоненты);communication.type.id
- ид типа связи (Swagger UI здесь список);processing
- настройки постобработки:enabled
- включена или выключена постобработка;form.id
- ид формы (не обязательно);sec
- время в секундах постобработки в секундах;renewal_sec
- время возможности добавить постобработку;
queue_name
- название очередиtimeout
- время в секундах сколько ожидать ответа оператора (по умолчанию включено автоподнятие, поэтому этот параметр нужен больше для случаев, когда оператор не в Workspace).
math
Приложение для работы с математическими функциями
{ "math": { "data": "${caller_id_array}", "setVar": "new_random_caller_id", "fn": "random" } }
fn
random
: returns a random number from arraymin
andmax
: can be used to find the lowest or highest value in a list of argumentsround
: rounds a number to the nearest integerceil
: rounds a number up to the nearest integerfloor
: rounds a number down to the nearest integer
string
Приложение для работы со строкой.
{ "string": { "data": "${caller_id_number}", "fn": "replace", "setVar": "reverted_caller_id_number", "args": [ "/^0/", "+84" ], } }
fn
length
: returns the length of a stringindexOf
andlastIndexOf
: returns the index of (the position of) the first or last occurrence of a specified text in a stringsearch
: searches a string for a specified value and returns the position of the matchslice
: extracts a part of a string and returns the extracted part in a new stringsubstring
: is similar to slice. The difference is thatsubstring
cannot accept negative indexes.substr
: is similar to slice. The difference is that the second parameter specifies the length of the extracted part.replace
: replaces a specified value with another value in a stringtoUpperCase
ortoLowerCase
: A string is converted to upper case or to lower casecharAt
: returns the character at a specified index (position) in a stringcharCodeAt
: returns the unicode of the character at a specified index in a stringsplit
: A string can be converted to an array with thesplit
functionreverse
: Reverse the provided stringbase64
: base64 encoder / decoderMD5
: Computes a digest from a string usingMD5
algorithmSHA-256
: Computes a digest from a string usingSHA-256
algorithmSHA-512
: Computes a digest from a string usingSHA-512
algorithm
markIVR
Позволяет сохранить массив значений в переменную, которая будет доступна в истории
{ "markIVR": { "name": "Log", "value": "Входящий звонок" } }
topicExtraction
Для определение тематики полученного сообщения: сообщение в чате, speech-to-text на IVR
{ "topicExtraction": { "connection": "http://10.10.10.222:3333/extract_topics/", "limit": 2, "messages": [ { "message": "интересует ли вас покупка авто?", "sender": "operator" }, { "message": "Вы мне надоели, я же сказал так", "sender": "user" } ], "possibleTopics": [ "заинтересованный", "не заинтересованный", "неудобно говорить" ], "definedTopic": "topicResponse", "score": "confidenceResponse" } }
где,
limit
- не обязательно, по умолчанию 4, это последние сообщения из чата или из распознавания в звонке
definedTopic
- в какую переменную записать ответ (topic)
score
- в какую переменную записать сonfidence
messages
- используется только для всех типов кроме chat / call
userInfo
Приложение позволяет получить значение из объекта пользователя по номеру телефона
{ "userInfo": { "set": { "usrId": "id", "email": "email", "mob": "variables.fwd_mob", "out": "variables.out_cid" }, "user": { "extension": "${ext}" } } }
setGrantee
Передать права на канал пользователю с идентификатором указанным в id
{ "setGrantee": { "id": 10 } }
schema
Выполнить внешнюю схему по идентификатору
{ "schema": { "id": 1 } }
softSleep
Пауза выполнения скрипта в миллисекундах
{ "softSleep": 1000 }
sql
Приложение доступно исключительно для выделенных либо собственных серверов Webitel, позволяет выполнить запрос в базу данных и вернуть результат в переменную
[ { "sql": { "dns": "admin:123Webitel4@tcp(database-1.cluster-cnvuzqnsxvyv.eu-central-1.rds.amazonaws.com:3306)/mysql", "driver": "mysql", "params": [ "db" ], "query": "select 1 as tst_number, true as tst_bool, table_name, last_update from mysql.innodb_index_stats where table_name = ? order by rand() limit 1" } }, { "sql": { "dns": "user=webitel password=webitel host=10.9.8.111 dbname=webitel sslmode=disable", "driver": "postgres", "params": [ 12 ], "query": "select user_id from call_center.cc_agent where id = $1", "timeout": 5000 } }, { "sql": { "dns": "/opt/DataGripProjects/default/identifier.sqlite", "driver": "sqlite3", "query": "select count(*) as ss from storage where key like 'mph_%'", "timeout": 5000 } } ]
list
Проверка на наличие абонента в списке с выполнением действий
{ "list": { "name": "StopList_Chat_bot", "destination": "${user}", "actions": [ { "sendText": "BAN: ${from} ⛔️", "break": true } ] } }
listAdd
Добавить абонента в список
{ "listAdd": { "destination": "${caller_id_number}", "description": "${caller_id_name}", "expireAt": "${expired_at}", "list": { "id": 16 } } }
log
Вывод дополнительной информации в лог файл приложений
{ "log": " >> ${Hold} <<<" }
goto
Перейти к именной метке
{ "goto": "tagName" }
monoPay
Перейти к именной метке
{ "monoPay":{ "invoice":{ "action":"create", "body":{ "amount":"1", "paymentType":"debit", "setVar":"monoInvoice", "validity":"3600" } }, "token":"uLRpgdn9yE5JP11NuXVqdvWpKk6TbSiQnquzS2BxtiCw" }
Параметры приложений
Данные приложения могут вызываться как самостоятельно, так и как параметр другого приложения.
tag
Установить именную метку в скрипте
{ "tag": "tagName" }
async
Выполнение приложения без блокировки
{ "async": true }
break
Прерывает выполнение скрипта
{ "break": true }
limit
Позволяет прерывать цикл после прохождения количества указанного в атрибуте max. Выход осуществляется в именную метку, указанную в атрибуте failover.
{ "limit": { "max": 5, "failover": "anotherTag" } }