Более 3-х лет мы пытались настроить грамотную интеграцию 1С: Предприятия 8 и телефонной АТС на базе Asterisk для своего офиса. За какое бы решение мы не брались, всегда получались какие-то костыли. Это очень огорчало. Но на рынке действительно не было нормального решения для интеграции. Перепробовали разные продукты, бесплатные и платные, потратив не один 10-ток тысяч рублей, но счастья не наступало.
Собственно, после очередной неудачной попытки, идея сделать все с нуля самостоятельно, захватила наш ум, тем более, реализация лежала на самой поверхности, необходимо было только взяться и сделать.
Решили, что лучше всего создавать универсальное решение, не привязанное к конкретной задаче на 1С. Нам нужен «прозрачный прокси» из 1С в Asterisk и обратно, с помощью которого, в будущем, мы соберем свою панель телефонии мечты, о которой 3 года грезили.
Платформа 1С: Предприятие 8 допускает подключение внешних модулей в виде динамических библиотек, однако к самим библиотекам есть специальные требования. По требованиям 1С библиотека должна быть разработана с использованием технологии NativeAPI.
Технология Native API – собственный интерфейс системного программирования 1С: Предприятия 8. Она поддерживает операционные системы Windows и Linux, и дает возможность создавать внешние компоненты, работающие как под одной, так и под другой операционной системой. Компоненты, созданные по технологии Native API, могут быть подключены в толстом клиенте, в тонком клиенте, в веб-клиенте, внешнем соединении и в сервере приложений.
Потому мы, вооружившись свежекупленной Visual Studo 2010, начали погружаться в творческий процесс программирования.
Около месяца мы изучали различные технологии взаимодействия Asterisk с внешними системами, ставили опыты, меряли производительность и в конце концов решили, что лучше всего нам подходит “Asynchronous Javascript Asterisk Manger”. AJAM в качестве транспорта использует протокол HTTP, поддерживает Digiest авторизацию и шифрование SSL, что повышает безопасность соединения, а также позволяет использовать Asterisk, размещенный в облаке. Ответы, передаваемые сервером Asterisk, могут быть представлены в виде XML структур, с которыми очень удобно работать в 1С: Предприятии 8.
В интернете можно найти много разрозненных знаний об Asterisk, но в одном месте их нет, и нам пришлось по частям собирать список команд с описанием параметров, список ответов. Иногда приходилось читать листинги исходного кода Asterisk для того, чтобы понять, как же должна выглядеть та или иная команда и что передавать в параметрах. Мы решили, что разработка должна быть хорошо задокументирована, чтобы все методы и функции были описаны в одном месте. В итоге, у нас появилась WIKI, в которую мы собрали всю документацию по Asterisk AMI протоколу, а затем на основании этих данных систематизировали описание внутренних функций разрабатываемой компоненты.
Как оказалось, хотя решение и лежало на поверхности, вся разработка и написание документации заняли более 3-х месяцев работы нескольких высококвалифицированных специалистов.
В результате, после инициализации компоненты в 1С, становится доступен весь спектр AMI команд Asterisk, если мне не изменяет память, то в общей сложности 103 функции.
Например, оригинация звонка из 1С c номера SIP/26 на городской 74952293042 выглядит так:
Channel = «SIP/26»
Context = «from-internal»;
Exten = «74952293042»;
Priority = «1»;
Timeout = "";
CallerID = «MIKO_Abonent»;
Variable = "";
Account = «miko»;
Application = "";
Data = "";
Async = «1»;
ActionID = «114»;
Результат = "";
Компонент.Originate(Channel, Context, Exten, Priority, Timeout, CallerID, Variable, Account, Application, Data, Async, ActionID, Результат)
Во время активного соединения компонент вызывает в 1С обработчики внешних событий, благодаря чему, мы можем отлавливать состояние каналов, информацию о звонящем номере, состояние очередей и даже управлять в реальном времени маршрутизацией звонка.
В итоге, мы перешли на новый уровень разработки бизнес решений 1С, интегрированных с телефонией на базе Asterisk. Теперь разработчик 1С может использовать весь доступный функционал АТС в понятной для него среде 1С: Предприятие 8, а функционал решения ограничен лишь его фантазией.
В качестве пробы, на основе компоненты мы разработали «Панель телефонии Asterisk для 1С:CRM», которую используем в работе нашей компании, добавили функции умной маршрутизации клиента на ответственного менеджера, используя только логику 1С, научили панель сохранять запись разговора в документе «Событие», проработали механизмы передачи истории звонков из Asterisk в 1С, а также управление различными переадресациями и вызовами прямо из 1С: Предприятия 8. Получилась достаточно удобная панель телефонии, и спустя 3 года метаний мы создали то, чего хотели изначально от сторонних разработчиков.
Нам понравилось разрабатывать, описывать, тестировать решение интеграции 1С и Asterisk. Мы решили не останавливаться и выпустить нашу компоненту в качестве SDK для разработчиков 1С. Занялись сертификацией продукта в фирме 1С на статус 1C: Совместимо. Разработали агентскую и партнерскую программы.
upd. 24 февраля SDK прошла сертификацию на 1С: Совместимо. В итоге мы сделали первое сертифицированное фирмой 1С решение для интеграции 1С и Asterisk.
Хочешь, чтобы было сделано хорошо — сделай сам
Собственно, после очередной неудачной попытки, идея сделать все с нуля самостоятельно, захватила наш ум, тем более, реализация лежала на самой поверхности, необходимо было только взяться и сделать.
Решили, что лучше всего создавать универсальное решение, не привязанное к конкретной задаче на 1С. Нам нужен «прозрачный прокси» из 1С в Asterisk и обратно, с помощью которого, в будущем, мы соберем свою панель телефонии мечты, о которой 3 года грезили.
Технология NativeAPI
Платформа 1С: Предприятие 8 допускает подключение внешних модулей в виде динамических библиотек, однако к самим библиотекам есть специальные требования. По требованиям 1С библиотека должна быть разработана с использованием технологии NativeAPI.
Технология Native API – собственный интерфейс системного программирования 1С: Предприятия 8. Она поддерживает операционные системы Windows и Linux, и дает возможность создавать внешние компоненты, работающие как под одной, так и под другой операционной системой. Компоненты, созданные по технологии Native API, могут быть подключены в толстом клиенте, в тонком клиенте, в веб-клиенте, внешнем соединении и в сервере приложений.
Потому мы, вооружившись свежекупленной Visual Studo 2010, начали погружаться в творческий процесс программирования.
AJAM интерфейс Asterisk
Около месяца мы изучали различные технологии взаимодействия Asterisk с внешними системами, ставили опыты, меряли производительность и в конце концов решили, что лучше всего нам подходит “Asynchronous Javascript Asterisk Manger”. AJAM в качестве транспорта использует протокол HTTP, поддерживает Digiest авторизацию и шифрование SSL, что повышает безопасность соединения, а также позволяет использовать Asterisk, размещенный в облаке. Ответы, передаваемые сервером Asterisk, могут быть представлены в виде XML структур, с которыми очень удобно работать в 1С: Предприятии 8.
Документация по Asterisk и компоненте
В интернете можно найти много разрозненных знаний об Asterisk, но в одном месте их нет, и нам пришлось по частям собирать список команд с описанием параметров, список ответов. Иногда приходилось читать листинги исходного кода Asterisk для того, чтобы понять, как же должна выглядеть та или иная команда и что передавать в параметрах. Мы решили, что разработка должна быть хорошо задокументирована, чтобы все методы и функции были описаны в одном месте. В итоге, у нас появилась WIKI, в которую мы собрали всю документацию по Asterisk AMI протоколу, а затем на основании этих данных систематизировали описание внутренних функций разрабатываемой компоненты.
Что получилось
Как оказалось, хотя решение и лежало на поверхности, вся разработка и написание документации заняли более 3-х месяцев работы нескольких высококвалифицированных специалистов.
В результате, после инициализации компоненты в 1С, становится доступен весь спектр AMI команд Asterisk, если мне не изменяет память, то в общей сложности 103 функции.
Например, оригинация звонка из 1С c номера SIP/26 на городской 74952293042 выглядит так:
Channel = «SIP/26»
Context = «from-internal»;
Exten = «74952293042»;
Priority = «1»;
Timeout = "";
CallerID = «MIKO_Abonent»;
Variable = "";
Account = «miko»;
Application = "";
Data = "";
Async = «1»;
ActionID = «114»;
Результат = "";
Компонент.Originate(Channel, Context, Exten, Priority, Timeout, CallerID, Variable, Account, Application, Data, Async, ActionID, Результат)
Во время активного соединения компонент вызывает в 1С обработчики внешних событий, благодаря чему, мы можем отлавливать состояние каналов, информацию о звонящем номере, состояние очередей и даже управлять в реальном времени маршрутизацией звонка.
Новый уровень взаимодействия 1С и Asterisk
В итоге, мы перешли на новый уровень разработки бизнес решений 1С, интегрированных с телефонией на базе Asterisk. Теперь разработчик 1С может использовать весь доступный функционал АТС в понятной для него среде 1С: Предприятие 8, а функционал решения ограничен лишь его фантазией.
В качестве пробы, на основе компоненты мы разработали «Панель телефонии Asterisk для 1С:CRM», которую используем в работе нашей компании, добавили функции умной маршрутизации клиента на ответственного менеджера, используя только логику 1С, научили панель сохранять запись разговора в документе «Событие», проработали механизмы передачи истории звонков из Asterisk в 1С, а также управление различными переадресациями и вызовами прямо из 1С: Предприятия 8. Получилась достаточно удобная панель телефонии, и спустя 3 года метаний мы создали то, чего хотели изначально от сторонних разработчиков.
Коммерческий продукт и партнерская сеть
Нам понравилось разрабатывать, описывать, тестировать решение интеграции 1С и Asterisk. Мы решили не останавливаться и выпустить нашу компоненту в качестве SDK для разработчиков 1С. Занялись сертификацией продукта в фирме 1С на статус 1C: Совместимо. Разработали агентскую и партнерскую программы.
Демонстрация работы компонента
Ссылки на более подробную информацию
- Общее описание SDK
- Список функций реализованных в SDK
- Технология внешних комонент на сайте 1C
- Описание протокола AMI (англ.)
upd. 24 февраля SDK прошла сертификацию на 1С: Совместимо. В итоге мы сделали первое сертифицированное фирмой 1С решение для интеграции 1С и Asterisk.