Был проведен поиск решения, но оказалось, что почему-то никто из операторов не предоставляет API для этих целей. Были только какие то попытки сделать что-то подобное на своих ресурсах, но пользоваться этим не удобно, да и, как правило, за использование просят немало денег.
Парсить отчет по звонкам просто нереально, и получается, что не в реальном времени.
Был найден простой выход из ситуации . Во многих моделях современных телефонов существует возможность при наступлении события передавать данные на web сервер.
Например для телефонов Yealink это выглядит так.
Для телефонов Dlink это выглядит так.
Нас интересуют основные 4 события:
Входящий вызов (трубку еще не поднимали )
Вызов установлен — разговор начался .
Вызов завершен — разговор закончен
Исходящий вызов — мы кому-то звоним.
Таблица параметров из инструкции к аппарату.
№ п/п |
Параметр |
Описание на англ |
Описание на русском |
|
$mac |
MAC address of the IP phone |
MAC-адрес IP телефона |
|
$ip |
The current IP address of the IP phone |
IP-адрес IP-телефона |
|
$model |
Phone model |
Модель телефона |
|
$firmware |
Phone firmware version |
Номер прошавки |
|
$active_url |
The SIP URI of the current account when the IP phone is in the incoming, outgoing or connecting state. |
SIP URI текущего соеденения , когда IP-телефон в сети. |
|
$active_user |
The username of the current account when the IP phone is in the incoming, outgoing or connecting state. |
Имя пользователя используемого для подключения, когда IP- телефон находится сети. |
|
$active_host |
The host name of the current account when the IP phone is in the incoming, outgoing or connecting state. |
Имя хоста используемого для подключения, когда IP- телефон находится сети. |
|
$local |
The SIP URI of the caller when the IP phone places a call. The SIP URI of the callee when the IP phone receives an incoming call. |
SIP URI вызывающего абонента, когда IP-телефон далет исходящий вызов SIP URI вызываемого абонента, когда получает IP-телефон делает входящий вызов. |
|
$remote |
The SIP URI of the callee when the IP phone places a call. The SIP URI of the caller when the IP phone receives an incoming call. |
SIP URI из вызывается, когда IP-телефон делает исходящий вызов. SIP URI вызывающего абонента, когда получает IP-телефон входящий вызов. |
|
$display_local |
The display name of the caller when the IP phone places a call. The display name of the callee when receives an incoming call. |
Имя отображаемое на дисплее когда телефон осуществляет вызов. Имя отображаемое на дисплее когда телефон получает входящий вызов. |
|
$display_remote |
The display name of the callee when the IP phone places a call. The display name of the caller when the IP phone receives an incoming call. |
На дисплее вызываемого абонента, когда IP-телефон осуществляет вызов. На дисплее имя звонящего, когда IP-телефон получает входящий вызов. |
|
$call_id |
The caller ID when in incoming, outgoing or connecting state. |
Показания АОН, входящие, исходящие или состояние подключения. |
Переводил через гугл транслит так что не пинайте сильно.
Наша строка инициализации выглядит примерно так.
http://myserver.ru/checkphone.php?event=1&p1=$remote&p2=$display_local
Где event=1 — это номер события чтобы понимать что за событие у нас происходит.
Для каждой строки у нас будет свой номер события
1 - Входящий звонок
2 - Разговор
3 - Исходящий звонок
4 - Вызв завершен.
p1=$remote - первый параметр это номер входящего звонка в формате SIP
примерный вид получаемых данных такой sip:74951234567@operatorsip.ru
Из этого номер очень просто вытащить сам номер телефона с помощью простой функции 1с.
функция ПреобразоватьНомерТелефона(Номер)
Номер= СтрЗаменить(Номер,"sip:","");
Номер= СтрЗаменить(Номер,"@operatorsip.ru","");
Номер= СтрЗаменить(Номер," ","");
Номер= сокрЛП(Номер);
Возврат Номер;
КонецФункции
р2 =$display_local — внутренний номер аппарата , с которого делается вызов. Например 101 ,105 и так далее.
Возможно на ваших аппаратах параметры будут по другому называться.
Телефон делает запрос на веб сервер, на веб сервере нам нужен скрипт , который бы преобразовал запрос с параметрами в запрос к WEB сервису 1с. Так как 1с параметризированные запросы через WEB сервер обрабатывать не может.
Скрипт сделан для двух параметров P1 и P2 , при желании их количество можно увеличить.
Архив со скриптом прикреплен к статье.
Создаем в 1с web сервис с именем TelData с функцией .
Функция TelData(Nomer_Sobitia, Nomer_sip, moi_nomer)
результат="Cобытие "+Nomer_Sobitia+" Входящий номер "+(Nomer_sip)+" Мой номер "+Moi_nomer;
ЗаписьЖурналаРегистрации("Телефон",,,,результат);
ЗвонкиПривелигированный.ЗаписатьТелефон(Nomer_Sobitia, Nomer_sip,moi_nomer); // наша процедура по обработке звонка.
возврат результат;
КонецФункции
Дальше уже по событию, номеру телефона и по внутреннему номеру закрепленному за телефоном определяем кто звонит, кому звонит, создаем события, обрабатываем события в 1с .
Время срабатывания такой связки составляет около секунды.
Описание того как сделать WEB сервис и опубливать его выходят за рамки данной статьи. Информации об этом море, ищите...