VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

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

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

Ответить
debian-asterisk
Сообщения: 62
Зарегистрирован: 22 май 2016, 11:12
Контактная информация:

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

Сообщение 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 звонок в зависимости от доступности транка.

спасибо
gosha
Сообщения: 375
Зарегистрирован: 06 сен 2010, 17:41
Контактная информация:

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

Сообщение gosha »

у вас и в первом случае два звонка будет ( если трубку первым повесит тот кому звонили )


статус после первого диал проверять просто надо.
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение 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
gosha
Сообщения: 375
Зарегистрирован: 06 сен 2010, 17:41
Контактная информация:

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

Сообщение gosha »

да да. про g я не заметил что нет его там...
debian-asterisk
Сообщения: 62
Зарегистрирован: 22 май 2016, 11:12
Контактная информация:

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

Сообщение debian-asterisk »

и как же такой механизм проделать в скрипте, с помощью AGI?
очень интересно. В инете, конечно, нет примеров или намеков.
gosha
Сообщения: 375
Зарегистрирован: 06 сен 2010, 17:41
Контактная информация:

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

Сообщение gosha »

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

переменная DIALSTATUS
debian-asterisk
Сообщения: 62
Зарегистрирован: 22 май 2016, 11:12
Контактная информация:

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

Сообщение debian-asterisk »

спасибо получилось:

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

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

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

if ($status eq BUSY )
{ $AGI -> verbose(" Status tranka:  $status "); 
bla bla bla
}
я до этого пытался воспользоваться командой channelstatus (ничего не вышло)
debian-asterisk
Сообщения: 62
Зарегистрирован: 22 май 2016, 11:12
Контактная информация:

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

Сообщение 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)?
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH