Это старая версия документа!
Перем Компонент Экспорт; // объявляем глобальную переменную для компонента Процедура Инициализация() // подключаем компонент Попытка ИмяФайла="C:\mikoAjam.dll"; ПодключитьВнешнююКомпоненту(ИмяФайла,"Comp" ,ТипВнешнейКомпоненты.Native); Компонент = Новый ("AddIn.Comp.MikoAjam"); Исключение Сообщить("Исключение при инициализации"); КонецПопытки; КонецПроцедуры Процедура Логин() //авторизуемся на сервере Asterisk Попытка Компонент.Хост = "nash.asterisk.ru"; // адрес сервера астериск с опубликованным ajam интерфейсом Компонент.Порт = "8088"; // порт опубликованного ajam интерфейса Компонент.Таймаут = 5; // время в секундах на ожидание ответа Asterisk, по умолчанию 5 секунд. Компонент.РежимSSL = Ложь; // режим SSL шифрования пакетов result=""; Компонент.Login(МенеджерЛогин,МенеджерПароль,result); Сообщить("Результат авторизации "+result); Исключение Сообщить("Исключение при установке параметров логина "+ИнформацияОбОшибке()); КонецПопытки; КонецПроцедуры Процедура Логофф() //разрываем соединение Попытка Результат=""; Компонент.Logoff(Результат); Исключение Сообщить("Исключение при разлогинивании"); КонецПопытки; КонецПроцедуры
Процедура Ping() Попытка respose =""; Результат=Компонент.Ping(respose); Сообщить("Результат пинга "+Результат+". Ответ asterisk "+respose ); Исключение Сообщить("Исключение при пинге"); КонецПопытки; КонецПроцедуры
Процедура Originate() Channel = КаналАбонентаA; // Channel: Название канала, с которого совершается исходящий вызов (В том же формате, как если бы Вы совершали вызов этому абоненту командой Dial.) Context = Контекст; // Context: Название контекста для совершения исходящего вызова (используется только совместно с параметрами Exten и Priority) Exten = НомерАбонентаБ ;// Exten: Extension to use on connect (используется только совместно с параметрами Context и Priority) Priority = "1"; // Priority: Priority to use on connect (используется только совместно с параметрами Context и Exten) Timeout = ""; // Timeout: Таймаут (в миллисекундах) для соединения с инициатором исходящего вызова (значение по умолчанию: 30000 миллисекунд). CallerID = "MIKO_Abonent"; // CallerID: Значение CallerID, используемое для совершения исходящего вызова. Variable = ""; // Variable: Установка переменных канала (максимум 32). Переменные будут установлены для обоих каналов, участвующих в соединении (локального, для абонента от которого совершается вызов и для вызываемого канала). Account = "miko"; // Account: Значение для “Account code” исходящего вызова. Application = ""; // Application: Команда плана набора, используемая для совершения исходящего вызова (используется параметр “Data”, для указания ее параметров) Data = ""; // Data : Параметры команды плана набора, используемой для совершения исходящего вызова. Async = "1"; // Async: Если указано “true” исходящий вызов будет производиться асинхронно. Результат ее выполнения будет возвращен позже, в пакете типа “Event” (позволяет осуществлять несколько вызовов без ожидания результата предыдущей команды, совершающей исходящий вызов) ActionID = "123123123"; // ActionID: Не обязательный идентификатор запроса. Позволяет сопоставить результат выполнения конкретному запросу. В качестве значения можно использовать или номер или строку. Очень полезно использовать, когда выполняется несколько асинхронных запросов одновременно. Попытка Результат=""; Компонент.Originate(Channel,Context,Exten,Priority,Timeout,CallerID,Variable,Account,Application,Data,Async,ActionID,Результат); Сообщить("Результат оригинации "+Результат); Исключение Сообщить("Исключение при "+Элемент.Имя+" ошибка:"+ИнформацияОбОшибке()); КонецПопытки; КонецПроцедуры
//Срабатывает на каждое внешнее событие тут будем мониторить входящие звонки Процедура ВнешнееСобытие(Источник, Событие, Данные) Если Источник="MikoAjamEvent" Тогда Если Событие="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' ///> ИначеЕсли Событие="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' // /> ИначеЕсли Событие="Unlink" Тогда //ПРИМЕР ОТВЕТА XML строка в переменной "Данные" // <generic // event='Unlink' // privilege='call,all' // channel1='SIP/263-000000e0' // channel2='SIP/17-000000e1' // uniqueid1='1322828367.324' // uniqueid2='1322828367.325' // callerid1='263' // callerid2='17' // /> ИначеЕсли Событие="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' // /> ИначеЕсли Событие="Newchannel" Тогда //ПРИМЕР ОТВЕТА Звоню с номера 263 на номер 17 XML строка в переменной "Данные" //<generic // event='Newchannel' // privilege='call,all' // sequencenumber='83247' // file='channel.c' // line='978' // func='__ast_channel_alloc_ap' // channel='SIP/263-000001ca' // channelstate='0' // channelstatedesc='Down' // calleridnum='263' // calleridname='device' // accountcode='' // exten='17' // context='from-internal' // uniqueid='1322315915.748' /> // /> //ПРИМЕР ОТВЕТА Звоню с номера 74997623634 на номер 229-30-42 оператора МАНГО XML строка в переменной "Данные" //<generic //event='Newchannel' //privilege='call,all' //channel='SIP/mangotrunk-0000016b' //channelstate='0' //channelstatedesc='Down' //calleridnum='74997623634' //calleridname='74997623634' //accountcode='' //exten='info' //context='from-trunk-sip-mangotrunk' //uniqueid='1323941846.598' /> ИначеЕсли Событие="Cdr" Тогда ИначеЕсли Событие="ReceiveFAX" Тогда //ПРИМЕР ОТВЕТА получаем факс XML строка в переменной "Данные" //<generic // event='ReceiveFAX' // privilege='call,all' // sequencenumber='508724' // file='res_fax.c' // line='1654' // func='receivefax_exec' // channel='SIP/mangotrunk-00000a37' // context='ext-fax' // exten='s' // callerid='A16551705P1' // remotestationid='(null)' // localstationid='(null)' // pagestransferred='0' // resolution='(null)' // transferrate='(null)' // filename='/var/spool/asterisk/fax/1322812029.3901.tif' // /> ИначеЕсли Событие="SendFAX" Тогда //ПРИМЕР ОТВЕТА отправляем факс XML строка в переменной "Данные" // <generic // event='SendFAX' // privilege='call,all' // sequencenumber='506205' // file='res_fax.c' // line='2155' // func='sendfax_exec' // channel='SIP/263-00000a31' // context='amidll' // exten='333' // callerid='263' // remotestationid='(null)' // localstationid='(null)' // pagestransferred='0' // resolution='(null)' // transferrate='(null)' // filename='/var/spool/asterisk/tmp/SIP-261-fax.tif' // /> КонецЕсли; //Виду события КонецЕсли; // Если ЭтоМИКО КОМПОНЕНТА КонецПроцедуры