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

17.06.14

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Файл скрипта по преобразованию строки с параметрами в запрос к WEB сервису 1с
.zip 0,78Kb ver:1
32
32 Скачать (1 SM) Купить за 1 850 руб.

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

См. также

Платные (руб)

Битрикс24 – это цифровое рабочее пространство для автоматизации вашей компании и работы сотрудников. Ставьте и контролируйте задачи, отправляйте файлы и голосовые сообщения, общайтесь в чате, обсуждайте планы и принимайте взвешенные решения. Используйте для работы десктопное и мобильное приложения. Мы проконсультируем по стоимости Bitrix24 и выбору нужного тарифа, а также поможем внедрить решение в вашем бизнесе!

159000 руб.

30.11.2020    31058    163    0    

58

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

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

9700 руб.

10.11.2015    43700    36    1    

20

Бизнес-аналитик Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет Налоговый учет Управленческий учет Платные (руб)

Прикладное решение «1С:Комплексная автоматизация 2» позволяет построить современную систему учета с высокой степенью детализации затрат, определить показатели управления и ответственности пользователей в рамках единого информационного пространства.

83000 руб.

19.02.2016    83313    113    0    

112

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

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

250000 руб.

02.11.2015    113979    6    89    

187

WEB-интеграция Анализ продаж Системный администратор Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Модуль "Подсистема интеграции AmoCRM с 1С" позволяет обеспечить единое информационное пространство, в котором пользователи могут эффективно управлять клиентской базой, следить за статусами сделок и поддерживать актуальность данных как в AmoCRM, так и в 1С.

60000 руб.

07.05.2019    34900    68    45    

27

SALE! 50%

Мессенджеры и боты SMS рассылки Email рассылки Пользователь Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Управленческий учет Платные (руб)

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

4800 2400 руб.

07.04.2014    86428    52    197    

137

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

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

9600 руб.

08.05.2020    28220    33    74    

45
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Infactum 318 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 167 20.06.14 10:14 Сейчас в теме
Да , каждый телефон подключен к провайдеру напрямую.
3. panvartan 20.06.14 10:40 Сейчас в теме
Может не увидел, а набрать номер из 1с на телефоне получилось?
4. lavrov 167 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 203 23.06.14 10:25 Сейчас в теме
Когда-то занимался SIP, правда, сервер был на наш, а не стороннего провайдера, на базе Asterisk TrixBox. Вся информация писалась в базу на MySQL - и никаких проблем. Програмку правда сам писал: статистика, поиск, графики, прослушка записей, управление архивом и т.д. Остались приятные воспоминания.
6. Prometeus2011 177 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 707 07.07.14 16:51 Сейчас в теме
Странно, что не нашли готовых решений. Полный интернет...
Цена - копейки, настраивается за 2 часа.
Работает в онлайн и никаких секундных задержек.
Заинтересует - пишите.
15. fobos400 05.04.20 16:52 Сейчас в теме
(7) Николай, здравствуйте
пытаемся соеденить ip-телефонию Zadarma с 1с
Есть конфигурация "Управление торговлей + CRM 3" , можете помочь словом или делом
8. Nikola23 707 07.07.14 16:53 Сейчас в теме
Да, кстати, при чем тут CRM? CRM - это далеко не автоматическая фиксация звонка или определение карточки клиента.
Напишите в заголовке Интеграция с виртуальной АТС и не путайте людей.
9. lavrov 167 07.07.14 17:11 Сейчас в теме
Приведите пример готовых решений, без выделенного сервера при подключении напрямую к виртуальной АТС провайдера. Например для zadarma.com или mango.ru
10. Nikola23 707 10.07.14 14:56 Сейчас в теме
(9)
БИТ:Phone, Рарус:СофтФон.
16. sergegm 11.08.20 13:06 Сейчас в теме
(10)Добрый день, Пожалуйста расскажите про интеграцию манго телеком с БИТ:Phone, где и что настроить, что бы работало.
11. lavrov 167 10.07.14 19:42 Сейчас в теме
Эти системы не интегрируются с виртуальными АТС.
12. Nikola23 707 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/
Оставьте свое сообщение