Ещё раз привет всем. Переделываю вопрос, т.к. глубже смог копнуть и смоделировать проблемную часть в диаплане.
Упростил так сказать вопрос. Засада в выполнении redirect из AMI Когда делаю редирект, вторая нога редиректиться абсолютно нормально, а вот первая нога попадая в новый контекст пытается выполнить первую строку и чудно убивается канал asterisk'ом Вот редирект
Action: Redirect
Channel: SIP/1602-00000035
Context: nway-confirence
Priority: 1
Exten: 10
ExtraChannel: SIP/1601-00000034
ExtraExten: s
ExtraContext: add-new-member
ExtraPriority: 1
Он выполняет сначал вторую ногу, потом первую, в первой и есть отбой канала
Event: VarSet
Privilege: dialplan,all
Channel: SIP/1601-00000034
ChannelState: 6
ChannelStateDesc: Up
CallerIDNum: 1601
CallerIDName: Chinkisbaeva Lazzat
ConnectedLineNum: 1602
ConnectedLineName: Kabdiev Kanat
Language: en
AccountCode:
Context: add-new-member
Exten: s
Priority: 1
Uniqueid: 1463388058.142
Linkedid: 1463388058.142
Variable: AGISTATUS
Value: HANGUP
Event: VarSet
Privilege: dialplan,all
Channel: SIP/1601-00000034
ChannelState: 6
ChannelStateDesc: Up
CallerIDNum: 1601
CallerIDName: Chinkisbaeva Lazzat
ConnectedLineNum: 1602
ConnectedLineName: Kabdiev Kanat
Language: en
AccountCode:
Context: add-new-member
Exten: s
Priority: 1
Uniqueid: 1463388058.142
Linkedid: 1463388058.142
Variable: MACRO_DEPTH
Value: 0
Event: HangupRequest
Privilege: call,all
Channel: SIP/1601-00000034
ChannelState: 6
ChannelStateDesc: Up
CallerIDNum: 1601
CallerIDName: Chinkisbaeva Lazzat
ConnectedLineNum: 1602
ConnectedLineName: Kabdiev Kanat
Language: en
AccountCode:
Context: add-new-member
Exten: s
Priority: 1
Uniqueid: 1463388058.142
Linkedid: 1463388058.142
И вот отбой
-- <SIP/1601-00000042>AGI Script n-way-conf.php completed, returning 4
== Spawn extension (add-new-member, s, 1) exited non-zero on 'SIP/1601-00000042' in macro 'nway-start'
-- Channel SIP/1601-00000042 left 'simple_bridge' basic-bridge <2c301bc8-c70f-4e79-acd5-a83a1c93808e>
-- Executing [s@add-new-member:1] Read("SIP/1601-00000042", "NEW_CALLEE,dial,20,i") in new stack
-- Accepting a maximum of 20 digits.
-- User disconnected
-- Executing [h@add-new-member:1] NoOp("SIP/1601-00000042", "Goodbye") in new stack
С чем может быть связано такое поведение Астериска?
Задан: 2016-05-04 06:03:55 +0400
Просмотрен: 1,540 раз
Обновлен: May 16 '16
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
попробуйте ваш вопрос задать в виде вопроса. Слишком много текста. Или тег бизнес добавьте
meral ( 2016-05-05 15:05:19 +0400 )редактироватьВопрос очень сложный. Я например, по логу не уверен, что редирект сфейлился. Ответ зависит от версии астериска, требует определенных тестов. Вобщем прийдется вам самому навык развивать
meral ( 2016-05-16 13:51:24 +0400 )редактироватьСпасибо, походу да, придётся самому капать. Версия Asterisk 13.1-cert7. Ведь по выполнению AGI не должен канал убиваться?
EXA ( 2016-05-16 14:15:37 +0400 )редактироватьЕсли agi вернет не 0 - должен
meral ( 2016-05-16 16:47:37 +0400 )редактироватьПолучается
<SIP/1601-00000016>AGI Script n-way-conf.php completed, returning 4
Уже не 0 и должен умереть канал? И почему 4-кой ругается, вроде ошибок нет ни каких
<SIP/1601-00000018>AGI Rx << GET VARIABLE BRIDGEPEER
<SIP/1601-00000018>AGI Tx >> 200 result=1 (SIP/1602-00000019)
<SIP/1601-00000018>AGI Rx << GET VARIABLE CONFNO
<SIP/1601-00000018>AGI Tx >> 200 result=1 (10)
<SIP/1601-00000018>AGI Rx << VERBOSE "SIP/1601-00000018" 1
n-way-conf.php: SIP/1601-00000018
<SIP/1601-00000018>AGI Tx >> 200 result=1
<SIP/1601-00000018>AGI Rx << VERBOSE "SIP/1602-00000019" 1
n-way-conf.php: SIP/1602-00000019
<SIP/1601-00000018>AGI Tx >> 200 result=1
<SIP/1601-00000018>AGI Rx << VERBOSE "10" 1
n-way-conf.php: 10
<SIP/1601-00000018>AGI Tx >> 200 result=1
EXA ( 2016-05-16 17:13:57 +0400 )редактироватьДа и скрипт вроде правильный, по крайней мере php n-way-conf.php - запуская ошибок 0
#!/usr/bin/php
<?php
require_once "phpagi.php";
settimelimit(30);
$agi = new AGI();
$CHANNEL=$agi->request['agi_channel'];
$BRIDGEPEER=$agi->get_variable('BRIDGEPEER');
$BRIDGEPEER=$BRIDGEPEER['data'];
$CONFNO=$agi->get_variable('CONFNO')['data'];
$agi->verbose($CHANNEL, 1);
$agi->verbose($BRIDGEPEER, 1);
$agi->verbose($CONFNO, 1);
$agimngr = new AGI_AsteriskManager();
$agimngr->connect('127.0.0.1','admin','6b644093e7ac093e164428eb92eb15ff');
$agimngr->send_request('Redirect',array('Channel'=>"$CHANNEL",'Context'=>"add-new-member",'Priority'=>"1",'Exten'=>"s",'ExtraChannel'=>"$BRIDGEPEER",'ExtraExten'=>"$CONFNO",'ExtraContext'=>"nway-confirence",'ExtraPriority'=>"1"));
$agimngr->disconnect();
return '0';
?>
EXA ( 2016-05-16 17:16:22 +0400 )редактироватьТам куча подводных камней.например звонок находящийся внутри dial-macro нельзя вообще редиректнуть. Рекомендую найти работающее решение.
meral ( 2016-05-16 23:42:04 +0400 )редактироватьПосле этой строки
$agimngr->send_request('Redirect',array('Channel'=>"$CHANNEL",'Context'=>"add-new-member",'Priority'=>"1",'Exten'=>"s",'ExtraChannel'=>"$BRIDGEPEER",'ExtraExten'=>"$CONFNO",'ExtraContext'=>"nway-confirence",'ExtraPriority'=>"1"));
Скрипт agi дальше не выполняется, хотя по факту отправляется AMI пакет. Пробовал присвоить к переменной результат, не помогло, пробовал другой реквест, другой реквест выполняется, что скрипт возвращает returning 0. Может знаете как запустить log phpagi-asmanager.php, головы не хватило пока что понять, как активировать, но там есть логи в коде.
Решение из интернета не заработало, вот и начался поиск у меня, почему оно не работает.
EXA ( 2016-05-17 08:48:37 +0400 )редактироватьА зачем тут вообще AMI ? Чем ChannelRedirect не устроил ?
virus_net ( 2016-05-17 09:51:07 +0400 )редактироватьрешение с voip-info - работает
meral ( 2016-05-17 09:54:39 +0400 )редактироватьА вообще да попробую ChannelRedirect , раз AMI тут не прёт. Надо попробовать, надеюсь там не вылезит чего.
http://www.voip-info.org/wiki/view/Asterisk+n-way+call+HOWTO Пробовал, но чёт не пошло, надо ещё раз попробовать, раз не помню. Или помню, там затыка была, то что нужен внешний редирект или System или AMI, надо ещё раз попробовать, ведь время поиска накопилось, результат может быть уже другим и более приятным.
EXA ( 2016-05-17 10:28:41 +0400 )редактироватьКажется фишка вот в чём, когда делаешь Redirect канала из AGI, и когда делается Redirect этого же канала, он теряется связь c AGI и AGI завершается плохо, не 0, и Астериск прибивает этот канал, т.к. AGI завершился 4-кой.
EXA ( 2016-05-17 14:35:30 +0400 )редактироватьвы не можете редиректнуть аги в другое место. используйте переменную, в ней выставьте что делать и делайте редирект диалпланом.зачем вы вообще ami и agi тут используете?
meral ( 2016-05-17 15:21:02 +0400 )редактироватьChannelRedirect вы тоже должны вызывать не из AGI. вообще редиректить самого себя таксебе идея.
meral ( 2016-05-17 15:21:47 +0400 )редактироватьСделал, такой же эффект, вторая нога (1602) перевелась, первая нога (1601) позвонила к 1603 и отбилась при ответе 1603. Я так понял это всегда так будет, если делать Dial из macro
[macro-nway-start]
exten => s,1,Set(__CONFNO=10)
exten => s,n,ChannelRedirect(${BRIDGEPEER},nway-confirence,${CONFNO},1)
exten => s,n,Read(NEW_CALLEE,dial,20,i)
exten => s,n,Dial(LOCAL/${NEW_CALLEE}@simple-call)
[simple-call]
exten => _X.,1,Dial(SIP/${EXTEN})
EXA ( 2016-05-17 15:37:06 +0400 )редактировать