====== 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~~