Руководитель компании
0,0
рейтинг
13 февраля 2012 в 14:08

Разработка → SDK для связи Asterisk и 1С: Предприятие 8

Более 3-х лет мы пытались настроить грамотную интеграцию 1С: Предприятия 8 и телефонной АТС на базе Asterisk для своего офиса. За какое бы решение мы не брались, всегда получались какие-то костыли. Это очень огорчало. Но на рынке действительно не было нормального решения для интеграции. Перепробовали разные продукты, бесплатные и платные, потратив не один 10-ток тысяч рублей, но счастья не наступало.

Хочешь, чтобы было сделано хорошо — сделай сам


Собственно, после очередной неудачной попытки, идея сделать все с нуля самостоятельно, захватила наш ум, тем более, реализация лежала на самой поверхности, необходимо было только взяться и сделать.
Решили, что лучше всего создавать универсальное решение, не привязанное к конкретной задаче на 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: Совместимо. Разработали агентскую и партнерскую программы.

Демонстрация работы компонента




Ссылки на более подробную информацию




upd. 24 февраля SDK прошла сертификацию на 1С: Совместимо. В итоге мы сделали первое сертифицированное фирмой 1С решение для интеграции 1С и Asterisk.
Николай Бекетов @jorikfon
карма
30,0
рейтинг 0,0
Руководитель компании
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (7)

  • 0
    Поправьте «Aynchronous Javascript Asterisk Manager»
    • 0
      Спасибо, исправил. Первая ссылка в гугле «ajam asterisk» дает неправильную расшифровку, а я никогда не вчитывался.
  • 0
    Скажите, что за софт используется для виртуализации?
    • 0
      У нас в продакшине используется VMware ESXi 4.1

      Тестовый Asterisk висит на Amazon EC2 в Ирландии.

      В ролике на маке я использовал VMware Fusion.
      • +1
        Спасибо, я про софт в ролике спрашивал.

        А вообще — молодцы! Интересное решение.
  • 0
    Не увидел ничего кроме парсера и отправки AMI запросов к серверу
    • 0
      Ну это именно то, о чем вы говорите. Парсер и отправка запросов из среды 1С.
      А что вы ожидали увидеть?

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.