| Технология Native API – собственный интерфейс системного программирования 1С:Предприятия 8. Она поддерживает операционные системы Windows и Linux, и дает возможность создавать внешние компоненты, работающие как под одной, так и под другой операционной системой. Компоненты, созданные по технологии Native API, могут быть подключены в толстом клиенте, в тонком клиенте, в веб-клиенте, внешнем соединении и в сервере приложений. |
Пример кода осуществления исходящего вызова из 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,Результат);
Сообщить("Результат оригинации "+Результат);
Исключение
Сообщить("Исключение при оригинации. Ошибка:"+ИнформацияОбОшибке());
КонецПопытки;
КонецПроцедуры |
Все ответы от астериск приходят в асинхронном режиме в предопределенную процедуру 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С:Предприятия 8, ведется разработка демо-примеров работы в Web клиенте.
Мы активно пишем документацию по использованию компоненты и ее методов, а также пошаговые инструкции по настройке Asterisk на сайте http://wiki.miko.ru/doc
На 1 квартал 2012 года запланирована разработка компоненты под Linux и сертификация на 1C:Совместимо.
Для связи с Asterisk компонент использует протокол HTTPS и механизмы шифрования SSL, что позволяет значительно повысить безопасность взаимодействия 1С:Предприятия 8 и Asterisk.

Комплект предназначен в первую очередь для разработчиков программ 1С. В состав комплекта включена компонента и ключ защиты на 10 рабочих мест.
Заказать бесплатную полнофункциональную 30 дневную версию или купить комплект можно в разделе с ценами.
