Интеграция 1С с SIP телефонией, или CRM за 3 рубля.




Сейчас многие компании используют SIP телефонию как внутри офиса так и для внешних звонков. Возникла задача сделать в CRM-системе возможность отслеживания входящих / исходящих звонков.

Был проведен поиск решения, но оказалось, что почему-то никто из операторов не предоставляет 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

Из этого номер очень просто вытащить сам номер телефона с помощью простой функции .

функция ПреобразоватьНомерТелефона(Номер)
Номер= СтрЗаменить(Номер,"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 сервис и опубливать его выходят за рамки данной статьи. Информации об этом море, ищите… 

13 Comments

  1. Infactum

    На сколько я помню, начиная с 8.3.5 в платформе есть поддержка HTTP сервисов. Так что можно будет спокойно отказаться от промежуточного PHP скрипта.

    Да и в целом не совсем ясно: у вас что, каждый телефон подключен к сип провайдеру напрямую? Странно, что в качестве единой точки подключения не используется IP PBX: тот же Asterisk или FreeSwitch. Потому что в этом случае все события можно генерировать в самой PBX, и в случае необходимости что-то поменять это делается в одном месте; не надо бегать к каждому телефону.

    P.S. Называть параметры веб-сервиса транслитом — моветон.

    Reply
  2. lavrov

    Да , каждый телефон подключен к провайдеру напрямую.

    Reply
  3. panvartan

    Может не увидел, а набрать номер из 1с на телефоне получилось?

    Reply
  4. lavrov

    Задача такая не стояла, но это совсем просто сделать — нужно на телефон передать ссылку. Вида

    http://admin:123@192.168.10.10/cgi-bin/ConfigManApp.com?key=74951234567/#/POUND

    Где admin — логин

    123 — пароль

    192.168.10.10 — ip адрес телефона

    74951234567 — номер телефона

    Reply
  5. wunderland

    Когда-то занимался SIP, правда, сервер был на наш, а не стороннего провайдера, на базе Asterisk TrixBox. Вся информация писалась в базу на MySQL — и никаких проблем. Програмку правда сам писал: статистика, поиск, графики, прослушка записей, управление архивом и т.д. Остались приятные воспоминания.

    Reply
  6. Prometeus2011
    Reply
  7. Nikola23

    Странно, что не нашли готовых решений. Полный интернет…

    Цена — копейки, настраивается за 2 часа.

    Работает в онлайн и никаких секундных задержек.

    Заинтересует — пишите.

    Reply
  8. Nikola23

    Да, кстати, при чем тут CRM? CRM — это далеко не автоматическая фиксация звонка или определение карточки клиента.

    Напишите в заголовке Интеграция с виртуальной АТС и не путайте людей.

    Reply
  9. lavrov

    Приведите пример готовых решений, без выделенного сервера при подключении напрямую к виртуальной АТС провайдера. Например для zadarma.com или mango.ru

    Reply
  10. Nikola23

    (9)

    БИТ:Phone, Рарус:СофтФон.

    Reply
  11. Nikola23

    (11) На что спорим? Показать вам БИТ:Phone подключенный к Манго телеком?

    Reply
  12. mzhirnov

    Мы интегрировали нашу виртуальную АТС и программную Sipteco с панелью телефонии 1С Мико и Рарус софтфон. Вы можете подключить любых облачных операторов связи, Манго, Задарма и любых других к 1С.

    http://sipteco.ru/index.php/integracia-ats-1c/

    Reply
  13. merabn

    (1) Infactum,

    Сейчас через HTTP-сервисы можно организовать связь через API таких провайдеров SIP как Задарма и Манго-офис.

    Таким образом можно интегрировать в конфигурацию 1С уведомления о звонках и callback, и т.п. И телефоны не нужны, у Манго свой софтфон, да и любой может использоваться. Для небольших организаций, на мой взгляд, хорошее решение, если телефонная инфраструктура не навязана и только создается. Даже существующие телефонные линии можно интегрировать через SIP-шлюз, подключив к Задарма. Это интеграция не за 3 рубля, конечно, но цены за виртуальный PBX, особенно у Задарма, вполне приемлемые. А вот, если в организации уже есть Астерикс, то тратить ничего не надо — только труд.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *