Страница 1 из 1

AGI, два транка от одного провайдера

Добавлено: 07 июн 2016, 19:51
debian-asterisk
Есть провайдер и у него два сервера (одно доменное имя и два разных айпи-адреса) , в sip.conf

прописано так:

Код: Выделить всё

register => 5555555555:password@prov.ru/5555555555
далее текст (убрал некоторые строки из конфиги, чтобы текст был читабельным):

Код: Выделить всё

[trunk-1]
type=peer
host=80.80.80.1
defaultuser=5555555555
secret=password
context=5555555555
fromuser=5555555555
fromdomain=prov.ru

Код: Выделить всё

[trunk-2]
type=peer
host=80.80.80.2 
defaultuser=5555555555
secret=password
context=5555555555
fromuser=5555555555
fromdomain=prov.ru
В общем, провайдер сказал, что будут использоваться два сервера, и типа так пишите в сип.конф

Ситуация: когда я обычным способом делаю звонки, то пишу

Код: Выделить всё

exten => _8XXXXXXXXXX,1,Dial(SIP/trunk-1/{EXTEN},60)
same => n,Dial(SIP/trunk-2/{EXTEN},60)
same => n,Hangup()
Все работает, в логах смотрю, что звонок идет либо через транк-1, либо через транк-2.


Но как сделать этот же звонок (через разные транки) используя AGI?

Если прописать

Код: Выделить всё

$AGI->exec('Dial','SIP/trunk-1/'.$nomer.',40');
$AGI->exec('Dial','SIP/trunk-2/'.$nomer.',40');
то получается два последовательных звонка , а надо чтобы был 1 звонок в зависимости от доступности транка.

спасибо

Re: AGI, два транка от одного провайдера

Добавлено: 08 июн 2016, 07:56
gosha
у вас и в первом случае два звонка будет ( если трубку первым повесит тот кому звонили )


статус после первого диал проверять просто надо.

Re: AGI, два транка от одного провайдера

Добавлено: 08 июн 2016, 09:46
ded
gosha, нет, не будет второго звонка в этом случае.

Код: Выделить всё

exten => _8XXXXXXXXXX,1,Dial(SIP/trunk-1/{EXTEN},60)
same => n,Dial(SIP/trunk-2/{EXTEN},60)
same => n,Hangup()
Если трубку первым повесит тот кому звонили , то следующий шаг
same => n,Dial(SIP/trunk-2/{EXTEN},60)
не выполняется. Если же нужно продолжить выполнение команд далее по текущему контексту то в команде Dial указывается опция g
http://asterisk.ru/knowledgebase/Asterisk+cmd+Dial

Re: AGI, два транка от одного провайдера

Добавлено: 08 июн 2016, 10:04
gosha
да да. про g я не заметил что нет его там...

Re: AGI, два транка от одного провайдера

Добавлено: 08 июн 2016, 10:13
debian-asterisk
и как же такой механизм проделать в скрипте, с помощью AGI?
очень интересно. В инете, конечно, нет примеров или намеков.

Re: AGI, два транка от одного провайдера

Добавлено: 08 июн 2016, 10:24
gosha
>статус после первого диал проверять просто надо.

переменная DIALSTATUS

Re: AGI, два транка от одного провайдера

Добавлено: 08 июн 2016, 11:00
debian-asterisk
спасибо получилось:

Код: Выделить всё

$status = $AGI -> get_variable("DIALSTATUS");

Код: Выделить всё

if ($status eq BUSY )
{ $AGI -> verbose(" Status tranka:  $status "); 
bla bla bla
}
я до этого пытался воспользоваться командой channelstatus (ничего не вышло)

Re: AGI, два транка от одного провайдера

Добавлено: 09 июн 2016, 11:59
debian-asterisk
Ребята, косячок! (с) Иваныч Универ. Новая общага.

Делаю звонок с определенного транка, получается транк занят, диалстатус = BUSY
С другого телефона делаю второй звонок с этого же транка,
но после Dial меня сразу вырубает (короткие гудки), т.е. я не успеваю сделать команды, которые должны выполняться после того, как выяснится, что транк занят.

В логах написано:

Код: Выделить всё

    -- Called SIP/trunk-1/84952485358
    -- Got SIP response 603 "Decline" back from prov.ru:5060
    -- SIP/trunk-1-0000004b is busy
  == Everyone is busy/congested at this time (1:1/0/0)
<SIP/1706-0000004a>AGI Tx >> 200 result=0
    -- <SIP/1706-0000004a>AGI Script /var/lib/asterisk/agi-bin/script.pl completed, returning 0
как мне надо пустить звонок по другой линии, в случае если основная линия занята (именно в скрипте, юзая AGI)?