HTTP Маршрутизация телефонных вызовов
ECSS-10 существует возможность изменения параметров проходящего вызова при помощи команд от HTTP-сервера, посылаемых в ответ на http-запросы. Команды передаются в текстовом виде json с использованием Key-Value атрибутов. В общем виде формат атрибутов выглядит следующим образом:
При попадании вызова в action "Внешняя маршрутизация по http", на указанный сервер отправляется POST запрос с текущими параметрами вызова в теле сообщения:
{ "cgpn:"102", "caller_id":"102", "cgpn_display_name":"Sidorov", "cdpn":"789", "domain":"test.domain", "iface_a":"054a20799850a72b", "tag":"default, "context":"local", "api_key":"sdtgywq398yhetg9831qy" }
В случаи успешной маршрутизации в ответ с сервера ожидается 200 код. Если серверу необходимо изменить какой либо из параметров, в тело ответа помещается json с свойствами и значениями параметров вызова, которые необходимо изменить:
{ "cgpn": "string", (опционально) "caller_id": "string", (опционально) "cgpn_display_name": "string", (опционально) "cdpn": "string", (опционально) "cdpn_display_name": "string", (опционально) "tag": "string", (опционально) "cgpn_numtype": "internationNumber" | "nationalNumber" | "subscriberNumber" | "unknown", (опционально) "cdpn_numtype": "internationNumber" | "nationalNumber" | "subscriberNumber" | "unknown", (опционально) "cgpn_plantype": "isdnTelephony" | "reserved1" | "reserved2" | "spare", (опционально) "cdpn_plantype": "isdnTelephony" | "reserved1" | "reserved2" | "spare", (опционально) "presentation": "presentationAllowed" | "presentationRestricted" | "addressNotAvailable" | "spare" (опционально) }
Для того чтобы вызвать внешнюю маршрутизации на ECSS-10, в контексте маршрутизации необходимо задекларировать http сервер:
Далее добавить в контекст маршрутизации правило вида:
В этом правиле говорится, что в случае совпадения условий, выполнить внешнюю HTTP маршрутизацию на серверах с идентификаторами routeHttp. Команды для настройки HTTP серверов можно посмотреть тут. При этом на внешнюю маршрутизацию потратить не более 5000ms. По результатам выполнения HTTP запроса, продолжится ECSS маршрутизация в контексте ctx_after_http. Но с измененными cgpn, cdpn, tag (если эти поля были изменены в результате HTTP запроса).
Если сервер вернет код не равный 200 или не ответит, маршрутизация продолжится так, будто HTTP сервер не поменял параметров вызова.
Если в секции Результат ("<result>") выполняется действие выставление тега, то фактически этот тег будет выставлен в секции Действия ("<actions>") и в запросе к HTTP серверу будет указан уже новый тег.
Если в секции Действия ("<actions>") выполняется действие аналогичные действия выполняемым на сервере действует следующая логика:
- выполняются действия в секции <actions>;
- выполняется установка тега из <result>;
- выполняется запрос к HTTP серверу, где в параметрах вызова указываются уже измененные параметры;
- параметры вызова изменяются согласно указанным параметрам с сервера.
Пример получения DisplayName из внешней БД организаций от 2gis, Yandex и др.
Создаем HTTP-сервера для сервисов 2gis и Yandex:
Далее создаем контекст маршрутизации, который будет обращаться к данным серверам по HTTP:
Таким образом при совершении звонка, ECSS-10 произведет обращение к серверам 2gis, Yandex. При получении ответа от сервера, в котором содержится DisplayName, ECSS-10 производит подстановку данной информации в cgpn DisplayName.