Новый продукт - SDK: Компонент связи 1C и Asterisk
Компания МИКО разработала комплект разработчика для интеграции телефонии на базе сервера 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='<unknown>' //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/