====== 10000109. Получение контекста для пира ====== [[astpanel:ats:asterisk_v6|Обратно к основной инструкции...]]\\ ===== Описание ===== **В этой статье описан алгоритм работы**. Пример реализации описан в [[http://wiki.miko.ru/astpanel:dialplan_miko_ajam | статье]] В плане набора должен быть описан контекст **miko_ajam**.\\ В контексте miko_ajam определяется extension с номером ** 10000109**.\\ [miko_ajam] exten => 10000109,1,NoOP(internal calling application: 10000109 1C_get_context) При начале работы, **“Панель телефонии Asterisk”** запрашивает контекст для пира, используя AMI команду [[:kb:asterisk:ami:originate|originate]].\\ **Параметры originate**\\ * channel - Local/10000109@miko_ajam * Application - NoCDR **Переменные канала** \\ * number - номер пользователя, который инициировал originate (пример 101) * tehnology - технология (SIP / IAX / DAHDI) ===== Действие ===== Приложение должно выполнить команду плана набора **UserEvent** и передать настройки: exten => 10000109,n,UserEvent(GetContest, chan1c: ${tehnology}/${number}, peercontext: ${1c_context}) ===== Описание параметров ===== * Channel - Канал пользователя, запросившего настройку (как правило равен ${tehnology}/${number}). * context - Этот контекст будет использоваться для набора номера (его необходимо определить ${1c_context}). ===== Примеры: ===== ==== Dialplan ==== [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 ==== PHP AGI скрипт ==== #!/usr/bin/php -q 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 [[astpanel:ats:asterisk_v6|Обратно к основной инструкции...]] ===== Комментарии ===== ~~DISQUS~~