Интеграция 3CX Phone System с 1С. Звонки туда и обратно.

10.02.12

Интеграция - Телефония, SIP

Получение информации о входящем звонке из 3CX Phone System. Набор номера в 3CXPhone.

Скачать файл

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

Наименование По подписке [?] Купить один файл
Интеграция3CX.epf
.epf 7,51Kb
64
64 Скачать (1 SM) Купить за 1 850 руб.

Здравствуйте, друзья!

Установил у себя 3CX Phone System. Какие ощущения? Как бесплатный вариант АТС для небольшой компании или для дома даже очень хорош. Можно быстро её настроить, интуитивно всё понятно, но есть ограничения в бесплатной версии.
В бесплатном варианте 4 одновременные коммутации. Некоторые незначительные ограничения,
и среди них одно важное: модуль интеграции с 1С, который они рекламируют отдельно, в 3CX Free Edition не поддерживается.
Если активировать 3CX демонстрационным ключом, заработает модуль 1С, но вместо 4 одновременных коммутаций будет только две.
Да и сам модуль в бесплатном варианте можно установить только на одно рабочее место. Всё это не вписывалось в мои планы.

Но очень загорелось подключить 1С к этой АТС из-за таких нужных удобств:
- звонить не набирая номера, ткнув мышкой в номер контрагента,
- при звонке клиента, до снятия трубки увидеть подсказку: контрагент, вероятное контактное лицо, его долги, свои долги.
- возможность вести журнал звонков в 1С.

Пришлось идти в обход. В файле 3CXDialer.log АТС записывает каждый звонок в реальном времени. Если оперативно эту информацию забирать, то можно, всё чудно и устроить. Ну а в обычном файловом варианте работы 1С с оперативностью может помочь, например, внешняя компонента AddInNative.dll, которая создаёт внешнее событие десять раз в секунду. Но так часто не нужно, поэтому мы частоту слегка уменьшим.

Теперь за дело:
Находим AddInNative.dll, качаем, размещаем её в нужном месте, запускаем из командной строки Regsvr32.exe "C:\наше нужное место\AddInNative.dll"
Не забываем в свойствах формы подключить ВнешнееСобытие, ПриОткрытии, ПриЗакрытии.

Перем Таймер, ВремяСтарта, РазмерЛогФайла, НомерТекущейСтроки;

Процедура ВнешнееСобытие(Источник, Событие, Данные)
	Если Данные - ВремяСтарта > 600 Тогда
		ВремяСтарта = Данные;
		Попытка
			ПрочитатьЛогФайл();
		Исключение
		КонецПопытки;
	КонецЕсли;
КонецПроцедуры

Процедура ПриОткрытии()
	ПолноеИмяФайла = "C:\Наше нужное место\AddInNative.dll";
	Файл = Новый Файл(ПолноеИмяФайла);
	Если Не Файл.Существует() Тогда
		Сообщить("Не обнаружен файл внешней компоненты " + ПолноеИмяФайла + ОписаниеОшибки(), СтатусСообщения.Внимание);
		Отказ = Истина;
		Возврат;
	КонецЕсли;
	Попытка
		ПодключитьВнешнююКомпоненту(ПолноеИмяФайла, "AddInNative", ТипВнешнейКомпоненты.Native);
		Таймер = Новый("AddIn.AddInNative.AddInNativeExtension");
		Таймер.StartTimer();
	Исключение
		Сообщить("Компонента " + ПолноеИмяФайла + " не загружена! " + ОписаниеОшибки(), СтатусСообщения.Внимание);
		Возврат;
	КонецПопытки;
	ВремяСтарта = 0;
	РазмерЛогФайла = 0;
	НомерТекущейСтроки = 0;
КонецПроцедуры

Процедура ПриЗакрытии()
	Если Таймер <> Неопределено Тогда
		Таймер.StopTimer();
		Таймер.Включен = Ложь;
		Таймер = Неопределено;
	КонецЕсли;
КонецПроцедуры

Процедура ПрочитатьЛогФайл()
	ПутьКЛогФайлу = "C:\ProgramData\3CX\Data\Logs\3CXDialer.log";
	//ПутьКЛогФайлу = "C:\Documents and Settings\All Users\Application Data\3CX\Data\Logs\3CXDialer.log";   // в XP
	фсо = Новый ComОбъект("Scripting.FileSystemObject");
	Файл = фсо.GetFile(ПутьКЛогФайлу);
	текРазмерЛогФайла = Файл.Size();
	Если РазмерЛогФайла = текРазмерЛогФайла Тогда
		фсо = Неопределено;
		Возврат;
	КонецЕсли;
	РазмерЛогФайла = текРазмерЛогФайла;
	ЛогФайл = фсо.OpenTextFile(ПутьКЛогФайлу, 1);
	Если НомерТекущейСтроки > 0 Тогда
		Для i = 1 По НомерТекущейСтроки Цикл
			ЛогФайл.SkipLine();
		КонецЦикла;
	КонецЕсли;
	Пока Не ЛогФайл.AtEndOfStream Цикл
		НомерТекущейСтроки = НомерТекущейСтроки + 1;
		текСтрока = ЛогФайл.Readline();
		Если Найти(текСтрока, "[Ringing]") = 0 Тогда Продолжить КонецЕсли;
		датаДействия = Дата("20" + СтрЗаменить(СтрЗаменить(СтрЗаменить(Лев(текСтрока, 17), ".", ""), " ", ""), ":", ""));
		Если датаДействия + 3 < ТекущаяДата() Тогда Продолжить КонецЕсли;
		Если Найти(текСтрока, " Ins: ") > 0 Тогда
			Действие = "Звонок"
		Иначе
			Действие = "Отбой"
		КонецЕсли;
		меткаВходВнутНомера = Найти(текСтрока, " DN=");
		меткаИсходВнутрНомера = Найти(текСтрока, " IP=");
		меткаНомераКонтрагента = Найти(текСтрока, " EP=");
		ВходВнутрНомер = Сред(текСтрока, меткаВходВнутНомера + 4, меткаИсходВнутрНомера - 4 - меткаВходВнутНомера);
		ИсходВнутрНомер = Сред(текСтрока, меткаИсходВнутрНомера + 4, меткаНомераКонтрагента - 4 - меткаИсходВнутрНомера);
		текНомерКонтрагента = Прав(текСтрока, СтрДлина(текСтрока) - меткаНомераКонтрагента - 3);
		Сообщить("датаДействия = " + датаДействия + ", Действие = " + Действие + ", ВходВнутрНомер = " + ВходВнутрНомер + ", ИсходВнутрНомер = " + ИсходВнутрНомер + ", НомерКонтрагента = " + текНомерКонтрагента);
	КонецЦикла;
	ЛогФайл.Close();
	фсо = Неопределено;
КонецПроцедуры

Процедура Позвонить(НабираемыйНомер)
	ЗапуститьПриложение("""C:\Program Files (x86)\3CXPhone\3CXPhone.exe""" + " sip:" + НабираемыйНомер);  // в 64
	//ЗапуститьПриложение("""C:\Program Files\3CXPhone\3CXPhone.exe""" + " sip:" + НабираемыйНомер);
КонецПроцедуры

3CXPhone.exe - это софтфон той же компании, устанавливается отдельно.
Встроенная функция ЧтениеТекста не смогла открыть лог-файл, поскольку он постоянно открыт самой АТС, пришлось прибегнуть к помощи FSO.

В Windows7 первый запуск формы выполняем по следующему сценарию: "Параметры управления учетными записями пользователей"  - ползунок вниз "Никогда не уведомлять", затем перезагрузка, теперь запускаем форму и можно ползунок возвращать на место.

Теперь имея входящий, исходящий внутренние номера, номер контрагента и события "Звонок" и "Отбой" в 1С, мы ограничены только фантазией.
Всем удачи и всяческих благ!
Ваш Лёлёсь

См. также

Телефония, SIP Платформа 1С v8.3 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Модуль интеграции с виртуальной телефонией Новофон для решения 1С:Управление нашей фирмой, редакция 3.0. Обновление релиза в связи с переходом на API 2.0 поставщиком сервиса. Бета-версия 2.0 до окончания перехода поставщиком на новую версию.

12000 руб.

26.02.2024    737    1    0    

2

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

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

12000 руб.

20.03.2019    22815    53    0    

36

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

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

9600 руб.

08.05.2020    27060    30    74    

42

Телефония, SIP Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Модуль для интеграции облачной АТС "Билайн" и конфигураций на платформе 1С v8. Список поддерживаемых конфигураций: УТ 11.2 и выше, УНФ 1.6, КА 2.0, ERP 2.0 и выше. Краткий перечень возможностей: - Подъем карточки клиента при звонке - Журнал звонков - Скачивание и прослушивание записей разговоров - Аналитика по звонкам. Не нужно покупать дорогостоящее оборудование и лицензии. Разговоры не зависят от наличия Интернета, он нужен только для получения данных с АТС в 1С. Подходит для выездных сотрудников, агентов, торговых представителей и т.п.

5100 руб.

17.07.2017    26770    13    23    

14

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

Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)

2400 руб.

04.05.2018    46276    119    66    

64

Телефония, SIP Пользователь Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 Россия Абонемент ($m)

Данная внешняя обработка позволяет делать звонки из программы 1С, используя сервис сайта zvonok.com.

1 стартмани

18.01.2024    820    0    v3132    0    

3

Телефония, SIP Россия Бесплатно (free)

Делимся опытом разработки системы обзвона абонентов-задолжников.

18.01.2024    1098    slavik27    11    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. sytkosa 119 07.02.12 22:31 Сейчас в теме
Раскрась код, добавь скриншоты и будет тебе плюс
4. leles 67 10.02.12 01:46 Сейчас в теме
Спасибо за советы.

(1), (2) Да, да всё правильно, тут же исправил, но пока без той компоненты.
Что-то не смог её найти, адрес или название не подскажите?

(3) Конечно, это не совсем серьезная работа, а простая попытка быстро получить доступ к 3CX.
И Ваш плюс мне особенно дорог. Это первые 10 центов Скруджа Макдака:)
6. leles 67 10.02.12 20:07 Сейчас в теме
(5) О! Это для меня открытие!
По сравнению с таймером это очень элегантный способ.
Беру на вооружение.
Mucho gracias, Вам и автору!
2. petunov 09.02.12 13:42 Сейчас в теме
Читать лог-файл по таймеру - не самый лучший вариант. Можно воспользоваться внешней компонентой (есть на Инфостарте), которая мониторит изменение файла и вызывает внешнее событие. А если уже все-таки использовать таймер, то сначала логичней будет проверить изменение файла по атрибутам (время, размер), и только потом читать.
3. SiAl 76 09.02.12 20:37 Сейчас в теме
Поставил + за хорошее оформление публикации. Работа проделана не зря.
7. itwonline 17.05.12 12:26 Сейчас в теме
Спасибо! Только у нас почему то в окне служебных сообщений ничего не пишется..
8. leles 67 20.05.12 11:27 Сейчас в теме
(7) Одна из причин - не подключена внешняя компонента, для проверки в процедуре ВнешнееСобытие вместо ПрочитатьЛогФайл() напишите Сообщить(Данные), при открытии обработки должны ритмично появляться сообщения.
Вторая возможная - убедитесь что файл 3CXDialer.log действительно находится по указанному Вами адресу.
Откройте его, в нём должны быть записи о совершённых вызовах.
Это для начала. Спасибо
9. Diversus 2327 26.02.14 16:35 Сейчас в теме
(0) Лучше все таки не
ЗапуститьПриложение("""C:\Program Files (x86)\3CXPhone\3CXPhone.exe""" + " sip:" + НабираемыйНомер);

а
ЗапуститьПриложение("""C:\Program Files (x86)\3CXPhone\3CXPhone.exe""" + " dial:" + НабираемыйНомер);


Скажите, а Вы не пробовали через параметры коммандной строки 3CXPhone завершить разговор?
Получается, для начала разговора достаточно в коммандной строке дописать " dial:НомерТелефона", а можно ли завершить текущий разговор, аналогично?
10. Igorro82IT 77 25.09.14 14:06 Сейчас в теме
Очень полезная публикация для меня!
Пришлась и ко времени и к месту.
Благодарен автору за доброту. (Голос по умолчанию прилагается))
11. fixin 4263 09.08.21 11:50 Сейчас в теме
А почему таймер вместо старой доброй ПодключитьОбработкуОжидания?
Оставьте свое сообщение