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.
    Метки:
    • +3
    • 25,5k
    • 7
    Поделиться публикацией
    Похожие публикации
    Комментарии 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С.
            А что вы ожидали увидеть?

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