Предлагаем вам взглянуть на пример реализации истории звонков при использовании IP-АТС 3CX Phone System v.12, а именно: дата и время звонка; длительность; входящий номер; исходящий номер; событие переадресации на другой номер; событие переадресации с другого номера, ссылка на файл аудиозаписи; возможность прослушивания записи. Интеграция возможна в любую конфигурацию 1С с минимальными изменениями исходной конфигурации.
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/a11/5d1/169/a115d116983b18613f16752505928c3d.png)
В версии 12 SIP АТС 3CX появился новый клиент — 3CX MyPhone. Функционал клиента впечатляет — состояние телефонов, телефонная книга, просмотр истории звонков с возможностью прослушивания записей и многое другое. Однако возможности интеграции с другими системами довольно ограничены. Интерфейс 3CX API, как и в прошлых версиях работает только на той же машине, где установлена система 3CX, и довольно сложен для программирования. Кроме API у 3CX Phone System есть еще замечательный интерфейс CallHistory, который ведет «посмертный» учет звонков. Этот интерфейс мы успешно использовали несколько лет в связке с Manageengine ServiceDesk Plus внутри своей компании, благодаря чему нам удалось значительно увеличить эффективность нашей «аутсорсерской» работы.
Т.к. у нас остро встал вопрос о внутреннем внедрении системы сервисдеск с открытым исходным кодом и основное направление деятельности у нас все таки 1С, то в качестве нового ПО были рассмотрены продукты компаний Рарус и Деснол-Софт. Выбор пал на Itilium от Деснол-Софт.
Но внедрение Itilium без связки с телефонией для нас не имеет смысла. Поэтому первым этапом мы поставили перед собой задачу хранить в 1С историю звонков, а именно: дату и время звонка; длительность; входящий номер; исходящий номер; событие переадресации на другой номер; событие переадресации с другого номера, ссылка на файл аудиозаписи; возможность прослушивания записи.
Итак мы имеем: установленная и настроенная система 3CX Phone System v.12; установленная и опубликованная на web сервере БД Итилиум. Перейдем к реализации.
1. Делаем дополнительные настройки 3CX CallHistory для наших целей. Нам понадобится файл %3CXData%\Data\CDRTemplates\CDRTemplate-SocketListen.xml (В случае ОС Windows Server 2008 это C:\ProgramData\3CX\Data\CDRTemplates\CDRTemplate-SocketListen.xml).
В строке
CallTemplate Host=«127.0.0.1» Port=«33555» OutboundOnly=«false»
меняем параметр Host на внешний IP адрес машины, на которой запущена система 3CX, например 192.168.11.2. Перезапустим сервис 3CX CallHistory и проверим работу сервиса командой
telnet [ip адрес сервера 3CX] 35555
После завершения любого звонка в окне telnet должна появиться информация по этому звонку. Формат данных зависит от содержимого файла CDRTemplate-SocketListen.xml. В принципе, можно использовать и формат по умолчанию, но с учетом того, что нам эти данные придется парсить, можно упростить себе дальнейшую жизнь. Например, так
Такой формат сообщений в дальнейшем сильно упростит работу.
Не забываем после правки CDRTemplate-SocketListen.xml перезапускать 3CXCallHistory сервис. И еще очень важное замечание – храните копию данного файла в другом месте или переименуйте его и установите в 3CX значение параметра CALLHISTTEMPLSOCKLISTEN равное имени вашего файла (Настройка – Дополнительные параметры – Вкладка Пользовательские параметры), т.к. при установке сервиспаков для 3CX файлы в каталоге CDRTemplates перезаписываются дефолтными файлами. Итак, на стороне 3CX пока все...
2. В системе 1С создаем регистр сведений ТФ_ИсторияЗвонков:
Затем создаем Web-сервис CallHistory. В нем создаем метод SaveHistory(Record) который будет на входе получать строку из п.1, парсить ее и создавать записи в регистре сведений ТФ_ИсторияЗвонков. Избегаем в названиях сервисов, методов и параметров русских названий.
3. Рисуем реализацию метода SaveHistory (hi-res: habr.habrastorage.org/post_images/d4a/f4c/d4f/d4af4cd4f675daf692c5160fb396ef6b.png)
![Метод SaveHistory Метод SaveHistory](http://infostart.ru/upload/iblock/4bb/4.png)
Как видно, исправление формата сообщений дает возможность упростить парсинг. Дополнительные функции нужны, т. к. форматы даты и времени 1C и С# отличаются:
![Дополнительные функции Дополнительные функции](https://habrastorage.org/r/w1560/getpro/habr/post_images/e86/7be/b57/e867beb5754b7b7618b0fad44f019e1b.png)
Основная функция преобразует строку вида [ключ]=[значение];[ключ]=[значение] в соответствующую структуру:
![Основная функция Основная функция](https://habrastorage.org/r/w1560/getpro/habr/post_images/da7/bc5/1df/da7bc51dff30df75059124698a065ede.png)
Еще одно замечание по хранению аудиозаписей. Их можно хранить в базе, однако при этом размер базы растет как на дрожжах. Поэтому файлы лучше хранить в виде ссылок на сетевой ресурс. Формирование правильных ссылок выполняет очень простая функция (в комментарии только ВИД записи):
![Хранение аудиозаписей Хранение аудиозаписей](https://habrastorage.org/r/w1560/getpro/habr/post_images/7ad/bd5/308/7adbd53082feecd5df3d6f7580c2646d.png)
С Web-сервисом пока все. Теперь свяжем все это вместе. Для связки используем C# Visual Studio 2012, хотя можно и любой другой инструмент, которым Вы владеете.
Наша программа на C# должна подключиться к порту 3CXCallHistory сервиса и все принятое передавать сервису 1С. Вся обвязка имеет своей целью автоматический перезапуск при обрывах связи или недоступности Web-сервиса. Программа (в ближайшем будущем мы ее опубликуем) может быть запущена из командной строки, тогда она будет выдавать в консоль диагностику. Можно установить ее как службу, причем если назвать службу 3CX_CDRClient1C, то она будет видна в консоли управления 3CX Phone System.
Теперь нюансы.
1. Авторизация.
Первый вариант — никаких пользователей в базе. Web-сервис доступен. Но мы не ищем легких путей, тем более что боевая база без пользователей — нонсенс.
Второй вариант — запуск веб-сервера от пользователя ОС IUSR_IIS7, например, плюс заведение в 1С пользователя IUSR_IIS7 с авторизацией ОС и правами РОЛИ на запуск веб-сервиса. На первый взгляд работает, но… При запуске веб-клиента получаем не косяк, а КОСЯК!!! Скриншот не сделали, а возвращать настройки лень, поэтому кому не лень — проверьте, кому лень — поверьте.
![Авторизация Авторизация](https://habrastorage.org/r/w1560/getpro/habr/post_images/7c1/e4f/79d/7c1e4f79d9fe1c382b4c95d37d2b1dc5.png)
Так вот, при запуске веб-клиента окно авторизации 1С не появляется, а в красном квадратике на скриншоте пишет пользователь IUSR_IIS7. К тому же в ПараметрыСеанса.ТекущийПользователь пустое значение и это приводит к ошибке «Попытка обращения к неинициализированному параметру сеанса». Так что мимо авторизации никак.
Третий вариант — http://www.forum.mista.ru/topic.php?id=661110 (за что огромное «Спасибо»!). Использование 3 варианта привело к дополнительным строкам в проекте C# app.config .
Если кто знает, как прочитать — будем рады информации.
В результате получилось вот что:
![Результат 1 ЗCX + 1C результат 1](https://habrastorage.org/r/w1560/getpro/habr/post_images/660/8f6/da2/6608f6da2e2e3305b8015cf86266ad12.png)
![3CX + 1C результат 2](https://habrastorage.org/r/w1560/getpro/habr/post_images/42b/857/31c/42b85731c38b9356cdff777571223037.png)
Имя файла — ссылка. При нажатии открывается плэйер:
![3CX + 1C результат 3](https://habrastorage.org/r/w1560/getpro/habr/post_images/533/0de/bee/5330debee1a4a9479f0c583673609858.png)
Интеграция возможна в любую конфигурацию 1С с минимальными изменениями исходной конфигурации.
Источник: infostart.ru/public/237772
![image](https://habrastorage.org/getpro/habr/post_images/a11/5d1/169/a115d116983b18613f16752505928c3d.png)
В версии 12 SIP АТС 3CX появился новый клиент — 3CX MyPhone. Функционал клиента впечатляет — состояние телефонов, телефонная книга, просмотр истории звонков с возможностью прослушивания записей и многое другое. Однако возможности интеграции с другими системами довольно ограничены. Интерфейс 3CX API, как и в прошлых версиях работает только на той же машине, где установлена система 3CX, и довольно сложен для программирования. Кроме API у 3CX Phone System есть еще замечательный интерфейс CallHistory, который ведет «посмертный» учет звонков. Этот интерфейс мы успешно использовали несколько лет в связке с Manageengine ServiceDesk Plus внутри своей компании, благодаря чему нам удалось значительно увеличить эффективность нашей «аутсорсерской» работы.
Т.к. у нас остро встал вопрос о внутреннем внедрении системы сервисдеск с открытым исходным кодом и основное направление деятельности у нас все таки 1С, то в качестве нового ПО были рассмотрены продукты компаний Рарус и Деснол-Софт. Выбор пал на Itilium от Деснол-Софт.
Но внедрение Itilium без связки с телефонией для нас не имеет смысла. Поэтому первым этапом мы поставили перед собой задачу хранить в 1С историю звонков, а именно: дату и время звонка; длительность; входящий номер; исходящий номер; событие переадресации на другой номер; событие переадресации с другого номера, ссылка на файл аудиозаписи; возможность прослушивания записи.
Итак мы имеем: установленная и настроенная система 3CX Phone System v.12; установленная и опубликованная на web сервере БД Итилиум. Перейдем к реализации.
1. Делаем дополнительные настройки 3CX CallHistory для наших целей. Нам понадобится файл %3CXData%\Data\CDRTemplates\CDRTemplate-SocketListen.xml (В случае ОС Windows Server 2008 это C:\ProgramData\3CX\Data\CDRTemplates\CDRTemplate-SocketListen.xml).
В строке
CallTemplate Host=«127.0.0.1» Port=«33555» OutboundOnly=«false»
меняем параметр Host на внешний IP адрес машины, на которой запущена система 3CX, например 192.168.11.2. Перезапустим сервис 3CX CallHistory и проверим работу сервиса командой
telnet [ip адрес сервера 3CX] 35555
После завершения любого звонка в окне telnet должна появиться информация по этому звонку. Формат данных зависит от содержимого файла CDRTemplate-SocketListen.xml. В принципе, можно использовать и формат по умолчанию, но с учетом того, что нам эти данные придется парсить, можно упростить себе дальнейшую жизнь. Например, так
![CDRTemplate-SocketListen.xml CDRTemplate-SocketListen.xml](https://habrastorage.org/getpro/habr/post_images/841/fc4/19d/841fc419dd56b5dc093cb92adb805706.png)
Такой формат сообщений в дальнейшем сильно упростит работу.
Не забываем после правки CDRTemplate-SocketListen.xml перезапускать 3CXCallHistory сервис. И еще очень важное замечание – храните копию данного файла в другом месте или переименуйте его и установите в 3CX значение параметра CALLHISTTEMPLSOCKLISTEN равное имени вашего файла (Настройка – Дополнительные параметры – Вкладка Пользовательские параметры), т.к. при установке сервиспаков для 3CX файлы в каталоге CDRTemplates перезаписываются дефолтными файлами. Итак, на стороне 3CX пока все...
2. В системе 1С создаем регистр сведений ТФ_ИсторияЗвонков:
![Регистр сведений ТФ_ИсторияЗвонков Регистр сведений ТФ_ИсторияЗвонков](https://habrastorage.org/getpro/habr/post_images/ebc/b60/175/ebcb601750e7113f61c7b9522061424f.png)
Затем создаем Web-сервис CallHistory. В нем создаем метод SaveHistory(Record) который будет на входе получать строку из п.1, парсить ее и создавать записи в регистре сведений ТФ_ИсторияЗвонков. Избегаем в названиях сервисов, методов и параметров русских названий.
![Web-сервис CallHistory Web-сервис CallHistory](https://habrastorage.org/getpro/habr/post_images/e0f/f63/f69/e0ff63f6937274bf275f62d91be54eeb.png)
3. Рисуем реализацию метода SaveHistory (hi-res: habr.habrastorage.org/post_images/d4a/f4c/d4f/d4af4cd4f675daf692c5160fb396ef6b.png)
![Метод SaveHistory Метод SaveHistory](http://infostart.ru/upload/iblock/4bb/4.png)
Как видно, исправление формата сообщений дает возможность упростить парсинг. Дополнительные функции нужны, т. к. форматы даты и времени 1C и С# отличаются:
![Дополнительные функции Дополнительные функции](https://habrastorage.org/getpro/habr/post_images/e86/7be/b57/e867beb5754b7b7618b0fad44f019e1b.png)
Основная функция преобразует строку вида [ключ]=[значение];[ключ]=[значение] в соответствующую структуру:
![Основная функция Основная функция](https://habrastorage.org/getpro/habr/post_images/da7/bc5/1df/da7bc51dff30df75059124698a065ede.png)
Еще одно замечание по хранению аудиозаписей. Их можно хранить в базе, однако при этом размер базы растет как на дрожжах. Поэтому файлы лучше хранить в виде ссылок на сетевой ресурс. Формирование правильных ссылок выполняет очень простая функция (в комментарии только ВИД записи):
![Хранение аудиозаписей Хранение аудиозаписей](https://habrastorage.org/getpro/habr/post_images/7ad/bd5/308/7adbd53082feecd5df3d6f7580c2646d.png)
С Web-сервисом пока все. Теперь свяжем все это вместе. Для связки используем C# Visual Studio 2012, хотя можно и любой другой инструмент, которым Вы владеете.
Наша программа на C# должна подключиться к порту 3CXCallHistory сервиса и все принятое передавать сервису 1С. Вся обвязка имеет своей целью автоматический перезапуск при обрывах связи или недоступности Web-сервиса. Программа (в ближайшем будущем мы ее опубликуем) может быть запущена из командной строки, тогда она будет выдавать в консоль диагностику. Можно установить ее как службу, причем если назвать службу 3CX_CDRClient1C, то она будет видна в консоли управления 3CX Phone System.
Теперь нюансы.
1. Авторизация.
Первый вариант — никаких пользователей в базе. Web-сервис доступен. Но мы не ищем легких путей, тем более что боевая база без пользователей — нонсенс.
Второй вариант — запуск веб-сервера от пользователя ОС IUSR_IIS7, например, плюс заведение в 1С пользователя IUSR_IIS7 с авторизацией ОС и правами РОЛИ на запуск веб-сервиса. На первый взгляд работает, но… При запуске веб-клиента получаем не косяк, а КОСЯК!!! Скриншот не сделали, а возвращать настройки лень, поэтому кому не лень — проверьте, кому лень — поверьте.
![Авторизация Авторизация](https://habrastorage.org/getpro/habr/post_images/7c1/e4f/79d/7c1e4f79d9fe1c382b4c95d37d2b1dc5.png)
Так вот, при запуске веб-клиента окно авторизации 1С не появляется, а в красном квадратике на скриншоте пишет пользователь IUSR_IIS7. К тому же в ПараметрыСеанса.ТекущийПользователь пустое значение и это приводит к ошибке «Попытка обращения к неинициализированному параметру сеанса». Так что мимо авторизации никак.
Третий вариант — http://www.forum.mista.ru/topic.php?id=661110 (за что огромное «Спасибо»!). Использование 3 варианта привело к дополнительным строкам в проекте C# app.config .
![Спасибо известному ресурсу Спасибо известному ресурсу](https://habrastorage.org/getpro/habr/post_images/d04/dfe/c6b/d04dfec6b6b66035c79d35c63046c226.png)
Если кто знает, как прочитать — будем рады информации.
В результате получилось вот что:
![Результат 1 ЗCX + 1C результат 1](https://habrastorage.org/getpro/habr/post_images/660/8f6/da2/6608f6da2e2e3305b8015cf86266ad12.png)
![3CX + 1C результат 2](https://habrastorage.org/getpro/habr/post_images/42b/857/31c/42b85731c38b9356cdff777571223037.png)
Имя файла — ссылка. При нажатии открывается плэйер:
![3CX + 1C результат 3](https://habrastorage.org/getpro/habr/post_images/533/0de/bee/5330debee1a4a9479f0c583673609858.png)
Интеграция возможна в любую конфигурацию 1С с минимальными изменениями исходной конфигурации.
Источник: infostart.ru/public/237772