AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

KX-TDA0490 (IPGW) и * по Н323

Asterisk IP PBX 8 сообщений -
#1

Ребята, знаю, что тема обсуждалась неодннократно, но всетаки подскажите пожалуйста:
1) Как можно сделать визуальный обзвон абонентов в реале или по рефрешу 3-5 сек, например ввиде
цветных кнопок как на FOP, чтоб когда звоним абоненту кнопка -красная, абонент ответил, - зеленая и т.д.

2) Как передать переменную $DIALSTATUS из диалплана в AGI PHP скрипт и извлеч, обработать. Если можно примером
например записать состояние в файл. Видел примеры, но полного и понятного нет...

Зараннее огромное спасибо!
Rolling Eyes
#2

2) exten => 1,1,AGI(script.php|$DIALSTATUS)
_______________________________
#!/usr/local/bin/php
$f=fopen('file','w');
fwrite($f,$ARGV[1]);
fclose($f);
_______________________________
#3

Огромное спасибо, сейчас буду пробовать... Smile

Added after 1 hours 2 minutes:

НЕ РАБОТАЕТ Sad Crying or Very sad
Делаю так:
1) Звоню call файлом:
Код:

Channel: SIP/401
MaxRetries: 1
RetryTime: 60
WaitTime: 30
Context: office
Extension: 400

2) В extensions.conf
Код:

[office]
exten => s,1,Dial(Sip/400)
exten => s,2,AGI(proba.php|$DIALSTATUS)
exten => h,1,DeadAGI(proba.php|$DIALSTATUS)

3) В proba.php:
Код:

#!/usr/bin/php -q


=========================================
Но файл создается пустой, как не кручу..... Sad
Если пишу вместо $ARGV[1] - $_SERVER['argv'][1] то в файле возвращает не значение, а $DIALSTATUS...
Что я делаю не так...???? Ткните носом
#4

[office]
exten => s,1,Dial(Sip/400)
exten => s,2,NoOp(DIALSTATUS--$DIALSTATUS)
exten => s,3,AGI(proba.php|$DIALSTATUS)
exten => h,1,DeadAGI(proba.php|$DIALSTATUS)

Что показывает в консоли при выполнении?
В сип-конф: qualify=yes.
#5

Код:

asterisk1*CLI>
-- Attempting call on SIP/401 for 400@office:1 (Retry 1)
== Starting SIP/401-716f at office,400,1 failed so falling back to exten 's'
-- Executing Dial("SIP/401-716f", "Sip/400") in new stack
-- Called 400
-- SIP/400-0e4b is ringing
-- SIP/400-0e4b answered SIP/401-716f
-- Attempting native bridge of SIP/401-716f and SIP/400-0e4b
-- Executing DeadAGI("SIP/401-716f", "proba.php|$DIALSTATUS") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/proba.php
-- AGI Script proba.php completed, returning 0


=======================================================

Странно но выполняется только DeadAGI, почему-то... Но файл пустой

Added after 20 minutes:

УРА!!!!!!!!! Smile Shocked
Чтоб заработало пришлось сделать следующее:
Код:

#!/usr/bin/php -q
#6

qazaq писал(а):


2)
А теперь вопрос в том, как мне узнать состояние канала в любой момент,
...??????


я ето делаю вот так
Код:

function is_ext_avail( $extnum, $context )
{
global $config;

$astman = new AGI_AsteriskManager( );
if (!$astman->connect("127.0.0.1", $config["MGRUSER"] , $config["MGRPASS"]))
{
return false;
}

$status = $astman->ExtensionState( $extnum, $context );
$astman->disconnect();
$status = $status['Status'];
return $status;

}
#7

Ой, спасибо, а можно подробнее для новичка...? Smile


Я получаю только два состояния либо STATUS=0 либо 1. Это верно или я, что-то
не понял....????

В phpagi.php есть замечательная функция:
Код:

function channel_status($channel='')
{
$ret = $this->evaluate("CHANNEL STATUS $channel");
switch($ret['result'])
{
case -1: $ret['data'] = trim("There is no channel that matches $channel"); break;
case AST_STATE_DOWN: $ret['data'] = 'Channel is down and available'; break;
case AST_STATE_RESERVED: $ret['data'] = 'Channel is down, but reserved'; break;
case AST_STATE_OFFHOOK: $ret['data'] = 'Channel is off hook'; break;
case AST_STATE_DIALING: $ret['data'] = 'Digits (or equivalent) have been dialed'; break;
case AST_STATE_RING: $ret['data'] = 'Line is ringing'; break;
case AST_STATE_RINGING: $ret['data'] = 'Remote end is ringing'; break;
case AST_STATE_UP: $ret['data'] = 'Line is up'; break;
case AST_STATE_BUSY: $ret['data'] = 'Line is busy'; break;
case AST_STATE_DIALING_OFFHOOK: $ret['data'] = 'Digits (or equivalent) have been dialed while offhook'; break;
case AST_STATE_PRERING: $ret['data'] = 'Channel has detected an incoming call and is waiting for ring'; break;
default: $ret['data'] = "Unknown ({$ret['result']})"; break;
}
return $ret;
}


Мне надо именно с этой функцией разобраться
Question Question Question Embarassed Embarassed Question Question Question
#8

Может быть кто-нибудь сталкивался с подобной проблемой, а то я никак не могу настроить нормальную связь между астериском 1.4.2 и офисной АТС Panasonic с 16-канальной VoIP-платой KX-TDA0490, которая работает только по Н323. Изначально хотел использовать родной h323. Но при звонках с PBX на * проблема - абонент астерискана своем телефоне слышит звонок, поднимает трубку, и тут же связь разрывается - идут короткие гудки. Что ни делал - ничего не помогло. Faststart, h245Tunneling менял, бесполезно. В дебаге * выдает:
== Everyone is busy/congested at this time (1:0/0/1)
-- ClearCall: Request to clear call with token ip$217.168.ххх.ххх:1078/6, cause 23
-- Sending RELEASE COMPLETE
-- ClearCall: Request to clear call with token ip$217.168.ххх.ххх:1078/6, cause 7
Посмотрел Standard Q.931 Disconnect Cause Codes, cause 7 соответствует "Call awarded and being delivered in an Established channel. Indicates that the user has been awarded the incoming call, and that the incoming call is being connected to a channel already established to that user for similar calls (e.g. packet-mode virtual calls)." Странная причина... не пойму как так может быть и с чем это связано. А расшифровки причины 23 я вообще не смог найти Sad. Вот что написано в официальном документе - "Many other
vendors have implemented a larger number of cause codes, but they do not map to the specification and Quintum does not support them."
Вобщем, пока эту проблему решить не удалось. Тогда попробовал ooh323 - заработало сразу, но возникла другая неприятная вещь - все входящие звонки лезут в дефолтовый контекст, чтобы они лезли в нужный контекст, созданный для определенного пользователя, нужно от звонящего передавать параметр H323ID, но плата KX-TDA0490 такого, как я понял, не может. По крайней мере в ее настройках ничего даже близко похожего нет. По IP адресу авторизоваться тоже не получилось, видимо эта штука еще очень плохо реализована в ooh323, так как разработчики на своей странице очень уклончиво отвечают на вопросы по поводу авторизации по IP, а не по H323ID, и прямого нормального ответа дать не могут. Бедным юзерам приходится писать свои драйвера на С. Я пока не такой гуру, чтоб подобными вещами заниматься, да и некогда Smile. Так что пока никак не могу сдвинуться с этой мертвой точки, буду надеяться на подсказку от более сведущих в этом деле коллег )