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

17.06.14

Функциональные - Управление взаимоотношениями с клиентами (CRM)

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

Скачать файлы

Наименование Файл Версия Размер
Файл скрипта по преобразованию строки с параметрами в запрос к WEB сервису 1с
.zip 0,78Kb
32
.zip 1 0,78Kb 32 Скачать

Был проведен поиск решения, но оказалось, что почему-то никто из операторов не предоставляет 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 сервис и опубливать его выходят за рамки данной статьи. Информации об этом море, ищите... 

SIP телефония интеграция телефон CRM СРМ

См. также

1С:CRM ПРОФ, КОРП, СТАНДАРТ, редакция 3.0

Управление взаимоотношениями с клиентами (CRM) Управление маркетингом (EMM) Платформа 1С v8.3 Управленческий учет Платные (руб)

Решение 1С:CRM 3.0 предназначено для компаний с потребностью совместной работы более 5 пользователей в единой информационной базе. Решение позволяет автоматизировать все бизнес-процессы компании в соответствии с концепцией CRM, включая закупки, продажи, маркетинг, сервисное обслуживание и пр.

8500 руб.

10.11.2015    42328    27    1    

15

Бонусная система для УТ 10.3

Управление взаимоотношениями с клиентами (CRM) Оптовая торговля Розничная торговля Платформа 1С v8.3 Оперативный учет Управляемые формы 1С:Управление торговлей 10 1С:Розница 2 Россия Управленческий учет Платные (руб)

Подсистема призвана упростить и автоматизировать процесс расчета и начисления бонусов покупателей. Работает с конфигурациями 1С:УТ 10.3, 1С:Розница. Механизм реализован в начале 2013г. и работает до сих пор с постоянными совершенствованиями.

30000 руб.

02.11.2015    109655    93    87    

182

Email, SMS, Telegram рассылки из 1С - Директ Маркетинг

Управление взаимоотношениями с клиентами (CRM) Мессенджеры и боты SMS рассылки Email рассылки Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Полный набор инструментов для качественных транзакционных и маркетинговых Email, SMS, Telegram рассылок из 1С. Даже простые уведомления об оплате счетов способны существенно упростить сбор дебиторской задолженности. Применение всех возможностей прямого маркетинга выводит коммуникацию с клиентами, уровень сервиса и лояльность на новый уровень.

7788 руб.

07.04.2014    83622    40    191    

127

Модуль или Расширение Автосервис для 1С: УТ10.3, УТ11, БП3.0, Розница, УНФ

Управление взаимоотношениями с клиентами (CRM) Производство готовой продукции (работ, услуг) Рабочее место Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Автомобили, автосервисы Управленческий учет Платные (руб)

Модуль или расширение для автоматизации автосервиса, является дополнением для системы 1С:Предприятие и предназначен для автоматизации работ на станциях технического обслуживания автомобилей (программа для СТО). С помощью модуля автосервиса Вы сможете значительно сократить время на оформление документов, что позволит уделить больше времени клиенту автосервиса и ремонту его автомобиля.

11900 руб.

09.03.2016    48588    121    1    

57

Облачная АТС Билайн - интеграция с 1С

Управление взаимоотношениями с клиентами (CRM) Телефония, SIP Облачные сервисы, хостинг Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Продукт интеграции возможностей Облачной АТС Билайн в систему 1С Предприятие 8. Звонки прямо из программы 1С, уведомления о текущих звонках, регистрация пропущенных и завершенных вызовов, ведение журнала, анализ данных об использовании мобильной связи.

12000 руб.

20.03.2019    22325    52    0    

35

Интеграция 1С с телефонией и чатами WhatsApp и Telegram

Телефония, SIP Мессенджеры и боты Платформа 1С v8.3 Конфигурации 1cv8 Россия Управленческий учет Платные (руб)

Интеграция 1С с телефонией и чатами WhatsApp и Telegram автоматизирует работу оператора со звонками и чатами и добавит вашей 1С элементы CRM системы. Храните всю историю взаимоотношений в 1С, не теряйте звонки, скачивайте, прослушивайте в любое время из карточки клиента или журнала звонков, держите руку на пульсе, используя блок отчетов по звонкам. Интегрируйте вашу 1С и чатами WhatsApp и Telegram, общайтесь с клиентами с единого номера и в одном окне. Теперь чаты с клиентами хранятся в карточке партнера в 1С, а не в личных мобильных ваших менеджеров.

4100 руб.

28.04.2022    13857    11    6    

36
Вознаграждение за ответ
Показать полностью
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Infactum 315 20.06.14 08:21 Сейчас в теме
На сколько я помню, начиная с 8.3.5 в платформе есть поддержка HTTP сервисов. Так что можно будет спокойно отказаться от промежуточного PHP скрипта.
Да и в целом не совсем ясно: у вас что, каждый телефон подключен к сип провайдеру напрямую? Странно, что в качестве единой точки подключения не используется IP PBX: тот же Asterisk или FreeSwitch. Потому что в этом случае все события можно генерировать в самой PBX, и в случае необходимости что-то поменять это делается в одном месте; не надо бегать к каждому телефону.

P.S. Называть параметры веб-сервиса транслитом - моветон.
14. merabn 22 16.02.16 17:00 Сейчас в теме
(1) Infactum,
Сейчас через HTTP-сервисы можно организовать связь через API таких провайдеров SIP как Задарма и Манго-офис.
Таким образом можно интегрировать в конфигурацию 1С уведомления о звонках и callback, и т.п. И телефоны не нужны, у Манго свой софтфон, да и любой может использоваться. Для небольших организаций, на мой взгляд, хорошее решение, если телефонная инфраструктура не навязана и только создается. Даже существующие телефонные линии можно интегрировать через SIP-шлюз, подключив к Задарма. Это интеграция не за 3 рубля, конечно, но цены за виртуальный PBX, особенно у Задарма, вполне приемлемые. А вот, если в организации уже есть Астерикс, то тратить ничего не надо - только труд.
2. lavrov 164 20.06.14 10:14 Сейчас в теме
Да , каждый телефон подключен к провайдеру напрямую.
3. panvartan 20.06.14 10:40 Сейчас в теме
Может не увидел, а набрать номер из 1с на телефоне получилось?
4. lavrov 164 20.06.14 16:05 Сейчас в теме
Задача такая не стояла, но это совсем просто сделать - нужно на телефон передать ссылку. Вида
http://admin:123@192.168.10.10/cgi-bin/ConfigManApp.com?key=74951234567/#/POUND
Где admin - логин
123 - пароль
192.168.10.10 - ip адрес телефона
74951234567 - номер телефона
panvartan; +1 Ответить
5. wunderland 201 23.06.14 10:25 Сейчас в теме
Когда-то занимался SIP, правда, сервер был на наш, а не стороннего провайдера, на базе Asterisk TrixBox. Вся информация писалась в базу на MySQL - и никаких проблем. Програмку правда сам писал: статистика, поиск, графики, прослушка записей, управление архивом и т.д. Остались приятные воспоминания.
6. Prometeus2011 210 26.06.14 13:04 Сейчас в теме
Стояла похожая задача. Надо было выводить информацию о произведенных пользователем звонках. Использовали прямые sql-запросы к ИБ. Сервер - октелл. Идея подсмотрена в одном решении. Не буду называть, кто разработчик, чтобы не сочли за рекламу.

Функция ВыполнитьSQLЗапрос(ТекстЗапроса, СтруктураПредставленияПолей = Неопределено, ТестСтрокиПодключения = Ложь) Экспорт
	Соединение = Новый COMОбъект("ADODB.Connection");
	База = Новый COMОбъект("ADOX.Catalog");

	СтрокаПодключения = СоздатьСтрокуПодключения(ТестСтрокиПодключения);
	
	Command = Новый COMОбъект("ADODB.Command");
	Command.ActiveConnection = Соединение;
	Command.CommandText = ТекстЗапроса;


	Записи = Новый COMОбъект("ADODB.RecordSet");
	Записи = Command.Execute();

	ТаблицаЗначений = Новый ТаблицаЗначений;


	КолВоПолей = Записи.Fields.Count - 1;
	Для Н = 0 По КолВоПолей Цикл
		СКЛИмяПоля = Записи.Fields.Item(Н).Name;
		ИмяПоля = СКЛИмяПоля;
		Если СтруктураПредставленияПолей <> Неопределено И СтруктураПредставленияПолей.Свойство(СКЛИмяПоля) Тогда
			ИмяПоля = СтруктураПредставленияПолей[СКЛИмяПоля];
		КонецЕсли;
		Если ТаблицаЗначений.Колонки.Найти(ИмяПоля) = Неопределено Тогда
			ТаблицаЗначений.Колонки.Добавить(ИмяПоля);
		КонецЕсли;
	КонецЦикла;

	Если Записи.Bof Тогда
		Возврат ТаблицаЗначений;
	КонецЕсли;

	Записи.MoveFirst();
	Пока Записи.EOF() = 0 Цикл
		СтрокаТЧ = ТаблицаЗначений.Добавить();
		Для Н = 0 По КолВоПолей Цикл
			СКЛИмяПоля = Записи.Fields.Item(Н).Name;
			ИмяПоля = СКЛИмяПоля;
			Если СтруктураПредставленияПолей <> Неопределено И СтруктураПредставленияПолей.Свойство(СКЛИмяПоля) Тогда
				ИмяПоля = СтруктураПредставленияПолей[СКЛИмяПоля];
			КонецЕсли;
			ЗначениеПоля = Записи.Fields.Item(Н).Value;
			СтрокаТЧ[ИмяПоля] = ЗначениеПоля;
		КонецЦикла;
		Записи.MoveNext();
	КонецЦикла;
	Записи.Close();

	Возврат ТаблицаЗначений;
КонецФункции

Функция СоздатьСтрокуПодключения(ТестСтрокиПодключения)
	Если Не ТестСтрокиПодключения И ПараметрыСеанса.ОктеллСтрокаПодключения <> "" Тогда
		Возврат ПараметрыСеанса.ОктеллСтрокаПодключения;
	КонецЕсли;
	Логин = Константы.БДОктелЛогин.Получить();
	Пароль = Константы.БДОктелПароль.Получить();
	Компьютера = Константы.БДОктелИмяКомпьютера.Получить();
	Базы = Константы.БДОктелИмяБазы.Получить();
	СтрокаСоединения = "Provider=SQLOLEDB.1;
	|Persist Security Info=False;
	|User ID=" + Логин + ";
	|Pwd=" + Пароль + ";
	|Data Source=" + Компьютера + ";
	|Initial Catalog=" + Базы + "";
	ПараметрыСеанса.ОктеллСтрокаПодключения = СтрокаСоединения;
	Возврат СтрокаСоединения;
КонецФункции

//Строка соединения выглядит так:
Provider=SQLOLEDB.1;
Persist Security Info=False;
User ID=AutelService;
Pwd=Version2;
Data Source=192.168.1.39;
Initial Catalog=oktell

//Вызов Запроса:
Процедура КнопкаВыполнитьНажатие(Кнопка)
	//ОбновлениеДанныхПоЗвонкамПользователя.ОбновлениеДанныхПоЗвонкамПользователя();
	ТекстЗапроса = "Select A_Stat_Connections_1x1.Id, A_Stat_Connections_1x1.AUserID, A_Stat_Connections_1x1.TimeAnswer, 
 |A_Stat_Connections_1x1.IsBetweenUsers, A_Stat_Connections_1x1.BStr as UserName,
 |A_Stat_Connections_1x1.TimeStop, A_Stat_Connections_1x1.BOutNumber as TelNumber, A_Users.Name,
 |A_Stat_Connections_1x1.AOutNumber, A_Stat_Connections_1x1.TimeStart, A_Stat_Connections_1x1.TimeStop,
 |A_Stat_Connections_1x1.TimeAnswer, A_Stat_Connections_1x1.ReasonStart, A_Stat_Connections_1x1.ReasonStop
 |from A_Stat_Connections_1x1 left outer join A_Users on A_Stat_Connections_1x1.AUserID = A_Users.ID
 |where A_Stat_Connections_1x1.Bstr = 'Иванов Иван Иванович'
 |and TimeStart  between  '2014-02-01 00:00:00.000' and CURRENT_TIMESTAMP
 |and IsBetweenUsers = 0";
 
 ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"Иванов Иван Иванович",СокрЛП(ПараметрыСеанса.ТекущийПользователь.Наименование));
 Запрос = новый запрос;
 Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
                |	МАКСИМУМ(СостояниеЗвонков.НачалоЗвонка) КАК НачалоЗвонка
                |ИЗ
                |	РегистрСведений.СостояниеЗвонков КАК СостояниеЗвонков
                |ГДЕ
                |	СостояниеЗвонков.Пользователь = &Пользователь";
Запрос.УстановитьПараметр("Пользователь",ПараметрыСеанса.ТекущийПользователь);
ВыбЗап = Запрос.Выполнить().Выбрать();
Если ВЫбЗап.Следующий() тогда
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"2014-02-01 00:00:00.000",Формат(ВЫбЗап.НачалоЗвонка, "ДФ='yyyy-MM-dd чч:мм:сс.000'"));
КонецЕсли;

ТаблицаЗвонка = ОктеллСервер.ВыполнитьSQLЗапрос(ТекстЗапроса);


КонецПроцедуры
Показать
7. Nikola23 696 07.07.14 16:51 Сейчас в теме
Странно, что не нашли готовых решений. Полный интернет...
Цена - копейки, настраивается за 2 часа.
Работает в онлайн и никаких секундных задержек.
Заинтересует - пишите.
15. fobos400 05.04.20 16:52 Сейчас в теме
(7) Николай, здравствуйте
пытаемся соеденить ip-телефонию Zadarma с 1с
Есть конфигурация "Управление торговлей + CRM 3" , можете помочь словом или делом
8. Nikola23 696 07.07.14 16:53 Сейчас в теме
Да, кстати, при чем тут CRM? CRM - это далеко не автоматическая фиксация звонка или определение карточки клиента.
Напишите в заголовке Интеграция с виртуальной АТС и не путайте людей.
9. lavrov 164 07.07.14 17:11 Сейчас в теме
Приведите пример готовых решений, без выделенного сервера при подключении напрямую к виртуальной АТС провайдера. Например для zadarma.com или mango.ru
10. Nikola23 696 10.07.14 14:56 Сейчас в теме
(9)
БИТ:Phone, Рарус:СофтФон.
16. sergegm 11.08.20 13:06 Сейчас в теме
(10)Добрый день, Пожалуйста расскажите про интеграцию манго телеком с БИТ:Phone, где и что настроить, что бы работало.
11. lavrov 164 10.07.14 19:42 Сейчас в теме
Эти системы не интегрируются с виртуальными АТС.
12. Nikola23 696 17.07.14 19:24 Сейчас в теме
(11) На что спорим? Показать вам БИТ:Phone подключенный к Манго телеком?
13. mzhirnov 10.11.15 21:29 Сейчас в теме
Мы интегрировали нашу виртуальную АТС и программную Sipteco с панелью телефонии 1С Мико и Рарус софтфон. Вы можете подключить любых облачных операторов связи, Манго, Задарма и любых других к 1С.

http://sipteco.ru/index.php/integracia-ats-1c/
Оставьте свое сообщение