Новый продукт - SDK: Компонент связи 1C и Asterisk

24 января 2012, 11:06
  Компания МИКО разработала комплект разработчика для интеграции телефонии на базе сервера Asterisk с системой 1С:Предприятие 8. Компонент написан с использованием технологии Native API и реализует прозрачный интерфейс между сервером Asterisk и программами на платформе 1С:Предприятие 8.

Технология Native API – собственный интерфейс системного программирования 1С:Предприятия 8. Она поддерживает операционные системы Windows и Linux и дает возможность создавать внешние компоненты, работающие как под одной, так и под другой операционной системой. Компоненты, созданные по технологии Native API, могут быть подключены в толстом клиенте, в тонком клиенте, в веб-клиенте, внешнем соединении и в сервере приложений.

Суть работы компоненты заключается в том, что она умеет передавать управляющие команды серверу Asterisk и в асинхронном режиме генерировать внешние события в системе 1С:Предприятие 8. Для передачи команд используется протокол Asterisk – AJAM, который в качестве транспорта использует HTTP или HTTPS протокол. Это достаточно удобно, особенно при облачном варианте инсталляции Asterisk. А применение SSL шифрования значительно сокращает вероятность перехвата конфиденциальной информации.

Компонент написан на языке C++ с использованием кроссплатформенных библиотек, что позволяет в ближайшее время выпустить Linux версию (после выхода клиентской части 1С:Предприятие 8 под Linux). Компонент позволяет использовать все доступные в AMI интерфейсе управляющие команды. Протестирована работа с Asterisk версий 1.6, 1.8, 10 на платформах Windows XP, Windows 2003R2, Windows 2008R2 и Windows 7 Prof в тонком, толстом и веб режиме 1С:Предприятия 8.2. На видео ролике представлена демонстрация работы компонента:


Пример кода осуществления исходящего вызова из 1С:

Код

Процедура ОригинацияЗвонка()

//   Название канала, с которого совершается исходящий вызов.

   Channel    ="SIP/261";   

//   Название контекста для совершения исходящего вызова .   

   Context    ="from-internal";

//   Номер на который звоним

   Exten      ="74952293042";   

//   Приоритет звонка, если есть конкуренция

   Priority   ="1";   

//   Таймаут (в миллисекундах) для соединения с инициатором исходящего вызова.

   Timeout    ="";   

//   Значение CallerID, используемое для совершения исходящего вызова.

   CallerID   ="MIKO";   

//   Установка переменных канала (максимум 32)

   Variable   ="";   

//   Поле для учета биллинговой информации

   Account    ="miko";

//   Команда плана набора, используемая для совершения исходящего вызова

   Application="";   

//   Параметры команды плана набора, используемой для совершения исходящего вызова.

   Data       ="";   

//   Если указано “true” исходящий вызов будет производиться асинхронно.

   Async      = Истина;   

//   Не обязательный идентификатор запроса. Позволяет сопоставить результат выполнения конкретному запросу.

   ActionID   ="123123123";   

 

   Попытка

      Результат="";

      Компонент.Originate(Channel,Context,Exten,Priority,Timeout,CallerID,Variable,Account,Application,Data,Async,ActionID,Результат);

      Сообщить("Результат оригинации "+Результат);

   Исключение

      Сообщить("Исключение при оригинации.  Ошибка:"+ИнформацияОбОшибке());

   КонецПопытки;

 

КонецПроцедуры



Все ответы от
Asteriskприходят в асинхронном режиме в предопределенную процедуру 1С:

Код

Процедура ВнешнееСобытие(Источник, Событие, Данные)

 

   Если Источник="MikoAjamEvent" Тогда      

 

      Если Событие="Dial" Тогда    //Входящий звонок до поднятия трубочки

         //ПРИМЕР ОТВЕТА при внешнем входящем звонке с номера 79265244745

         // XML строка в переменной "Данные"

         //<generic

         // event='Dial'

         // privilege='call,all'

         // sequencenumber='67955'

         // file='app_dial.c'

         // line='695'

         // func='senddialevent'

         // subevent='Begin'

         // channel='SIP/multifon-out-00000171'

         // destination='SIP/263-00000172'

         // calleridnum='79265244745'

         // calleridname='MIKOKONTRAGENT'

         // uniqueid='1322297638.642'

         // destuniqueid='1322297638.643'

         // dialstring='263'

         // />

 

      ИначеЕсли Событие="Bridge" Тогда //2 абонента соеденились и разговаривают

         //ПРИМЕР ОТВЕТА  исходящий звонок с 263 на 04 XML строка в переменной "Данные"

         //<generic

         //event='Bridge'

         //privilege='call,all'

         //sequencenumber='56804'

         //file='channel.c'

         //line='5345'

         //func='manager_bridge_event'

         //bridgestate='Link'

         //bridgetype='core'

         //channel1='SIP/263-0000014b'

         //channel2='SIP/04-0000014c'

         //uniqueid1='1322226827.577'

         //uniqueid2='1322226827.578'

         //callerid1='263'

         //callerid2='04'

         ///>

 

         //Пример ответа Входящий звонок с 79265244742 на мультифонтранк XML строка в переменной "Данные"

         //<generic

         // event='Bridge'

         // privilege='call,all'

         // sequencenumber='67966'

         // file='channel.c'

         // line='5345'

         // func='manager_bridge_event'

         // bridgestate='Link'

         // bridgetype='core'

         // channel1='SIP/multifon-out-00000171'

         // channel2='SIP/263-00000172'

         // uniqueid1='1322297638.642'

         // uniqueid2='1322297638.643'

         // callerid1='79265244742'

         // callerid2='263'

         // />            

      ИначеЕсли Событие="Hangup" Тогда    //Положили трубку

         //ПРИМЕР ОТВЕТА XML строка в переменной "Данные"

         //<generic

         //event='Hangup'

         //privilege='call,all'

         //sequencenumber='53031'

         //file='channel.c'

         //line='1901'

         //func='ast_hangup'

         //channel='SIP/263-0000013c'

         //uniqueid='1322225501.546'

         //calleridnum='263'

         //calleridname='&lt;unknown&gt;'

         //cause='16'

         //cause_txt='Normal Clearing'

         ///>

      КонецЕсли;

 

   КонецЕсли;

 

КонецПроцедуры



Asterisk генерирует огромное количество событий. Все они представляют из себя XML структуру, которую очень удобно разбирать встроенным объектом
ЧтениеXML.

Код

Процедура OnDial(Данные)

   ЧтениеХМЛ = Новый ЧтениеXML;

   ЧтениеХМЛ.УстановитьСтроку(СтрокаХМЛ);

   Если ЧтениеХМЛ.Прочитать() Тогда

      channel       =XMLУзел.ЗначениеАтрибута("channel");

      destination   =XMLУзел.ЗначениеАтрибута("destination");

      uniqueid      =XMLУзел.ЗначениеАтрибута("uniqueid");

      destuniqueid  =XMLУзел.ЗначениеАтрибута("destuniqueid");

      calleridnum   =XMLУзел.ЗначениеАтрибута("dialstring");

   КонецЕсли;

КонецПроцедуры


Мы активно ищем партнеров по разработке программ на базе 1С с использованием компоненты и интеграторов, способных правильно установить и настроить
Asteriskв любом уголке нашей Родины!


Более подробная документация (бета версия) доступна на сайте:
http://wiki.miko.ru/doc:1cajam

Скачать бесплатную полнофункциональную версию с 30-ти дневным ограничением можно на сайте:
http://www.miko.ru/sales/product/1c_asterisk_sdk/