В плане набора должен быть описан контекст miko_ajam.
В контексте miko_ajam определяется extension с номером 10000109.
[miko_ajam] exten => 10000109,1,NoOP(internal calling application: 10000109 1C_get_context)
При начале работы, “Панель телефонии Asterisk” запрашивает контекст для пира, используя AMI команду originate.
Параметры originate
Переменные канала
Приложение должно выполнить команду плана набора UserEvent и передать настройки:
exten => 10000109,n,UserEvent(GetContest, chan1c: ${tehnology}/${number}, peercontext: ${1c_context})
[miko_ajam] exten => 10000109,1,NoCDR() exten => 10000109,n,Noop(internal calling application: 10000109 1C_get_context) exten => 10000109,n,AGI(1C_get_context.php) exten => 10000109,n,Hangup
#!/usr/bin/php -q <?php // Получение переменной AGI канала // function GetVarChannnel($agi, $_varName){ $v = $agi->get_variable($_varName); if(!$v['result'] == 0){ return $v['data']; } else{ return ""; } } // GetVarChannnel($_agi, $_varName) require_once('phpagi.php'); $agi = new AGI(); // $exten = GetVarChannnel($agi, "number"); $tehnology = GetVarChannnel($agi, "tehnology"); $output = array(); $result=''; if($tehnology == 'SIP'){ $result = exec("asterisk -rx\"sip show peer $exten\" | grep Context | awk -F'[:]+[ ]+' ' { print $2 } '",$output); }elseif($tehnology == 'DAHDI'){ $result = exec("asterisk -rx\"dahdi show channel $exten\" | grep Context | awk -F'[:]+[ ]+' ' { print $2 } '",$output); }elseif($tehnology == 'IAX'){ $result = exec("asterisk -rx\"iax2 show peer $exten\" | grep Context | awk -F'[:]+[ ]+' ' { print $2 } '",$output); } $agi->exec("UserEvent", "GetContest," ."chan1c:$tehnology/$exten," ."peercontext:$result"); // отклюаем запись CDR для приложения $agi->exec("NoCDR", ""); // ответить должны лишь после выполнения всех действий // если не ответим, то оргининация вернет ошибку $agi->answer(); ?>
#!/bin/sh dir_script='/tmp/'; # каталог из asterisk.conf astspooldir='/var/spool/asterisk'; # call_text="Channel: SIP/104 Context: miko_ajam Extension: 10000109 Callerid: Alexey<104> Setvar: number=104 Setvar: tehnology=SIP"; echo "$call_text" > /tmp/file.call; mv '/tmp/file.call' "$astspooldir/outgoing/"; asterisk -rvvv;
Вывод в консоли:
-- AGI Script Executing Application: (UserEvent) Options: (GetContest,Channel:SIP/104,context:from-internal)
Вывод в AMI
Event: UserEvent Privilege: user,all UserEvent: GetContest Uniqueid: 1412097801.8 Channel:SIP/104 context:internal