Входящий звонок с маршрутизацией на ответственного в bpm'online
Задача
При входящем вызове получить внутренний номер ответственного в bpm'online, направить звонок на него (10 секунд), если нет ответа - направить на номер секретаря, 100.
Реализация
В разделе с public маршрутами добавить новую схему для входящего номера:
Пример схемы
[
{
"ringback": {
"call": {
"name": "$${ru-ring}",
"type": "tone"
},
"transfer": {
"name": "$${ru-ring}",
"type": "tone"
}
}
},
{
"httpRequest": {
"exportCookie": "my_cookie",
"url": "https://example.bpmonline.com/ServiceModel/AuthService.svc/Login",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"data": {
"UserName": "Supervisor",
"UserPassword": "Supervisor"
}
}
},
{
"string": {
"fn": "reverse",
"data": "${caller_id_number}",
"setVar": "reverted_caller_id_number"
}
},
{
"string": {
"data": "${my_cookie}",
"fn": "replace",
"setVar": "BPMCSRF",
"args": [
"/.*BPMCSRF=([^;$]+).*/",
"$1"
]
}
},
{
"httpRequest": {
"url": "https://example.bpmonline.com/0/dataservice/json/reply/SelectQuery",
"method": "POST",
"headers": {
"Cookie": "${my_cookie}",
"BPMCSRF": "${BPMCSRF}",
"Accept": "application/json;odata=verbose",
"Content-Type": "application/json"
},
"exportVariables": {
"Contact": "rows.0.Name",
"owner_caller_id_number": "rows.0.OwnerLogin"
},
"data": {
"QueryType": 0,
"Columns": {
"Items": {
"Name": {
"OrderDirection": 0,
"OrderPosition": 0,
"Caption": null,
"Expression": {
"ExpressionType": 0,
"ColumnPath": "Name"
}
},
"OwnerLogin": {
"OrderDirection": 0,
"OrderPosition": 0,
"Caption": null,
"Expression": {
"ExpressionType": 0,
"ColumnPath": "[WSysAccount:Contact:Owner].Login"
}
}
}
},
"AllColumns": false,
"IsDistinct": false,
"RowCount": 1,
"Filters": {
"FilterType": 6,
"ComparisonType": 0,
"LogicalOperation": 0,
"IsNull": true,
"IsEnabled": true,
"IsNot": false,
"Items": {
"FilterByPhone": {
"FilterType": 1,
"ComparisonType": 9,
"LogicalOperation": 0,
"IsNull": true,
"IsEnabled": true,
"IsNot": false,
"LeftExpression": {
"ExpressionType": 0,
"ColumnPath": "[ContactCommunication:Contact].SearchNumber"
},
"RightExpression": {
"ExpressionType": 2,
"ColumnPath": null,
"Parameter": {
"DataValueType": 1,
"Value": "${reverted_caller_id_number}"
}
}
}
}
},
"RootSchemaName": "Contact",
"OperationType": 0
}
}
},
{
"setVar": [
"continue_on_fail=true",
"hangup_after_bridge=true",
"ignore_early_media=true"
]
},
{
"answer": "183"
},
{
"if": {
"expression": "${owner_caller_id_number}",
"then": [
{
"bridge": {
"endpoints": [
{
"name": "${owner_caller_id_number}",
"type": "user",
"parameters": [
"leg_timeout=10"
]
}
]
}
}
]
}
},
{
"bridge": {
"endpoints": [
{
"name": "100",
"type": "user"
}
]
}
}
]
Описание схемы
№ строки | Application | Описание |
---|---|---|
3 | Тон КПВ - устанавливает тон гудков. | |
15 | Проходим авторизацию в bpm'online и получаем cookie для дальнейших запросов. | |
29 | "Разворачиваем" номер телефона для запроса в bpm'online | |
36 | Получаем в переменную BPMCSRF значение токена из cookie. | |
47 | Выполняем запрос и сохраняем значение номера ответственного в переменную owner_caller_id_number | |
133 | Если переменная не пустая, тогда | |
137 | 10 секунд звоним на номер ответственного | |
153 | Звонить на номер секретаря |
авторизация в bpm'online
Обратите внимание, если изменяется пароль пользователя в bpm'online, новый пароль необходимо указать и в запросе. Иначе авторизация не будет проходить и webitel не сможет получить данные из bpm'online.