ВидеоКонф(ВКС)  ::   Чат  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

балансировка исходящих вызовов

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модератор: april22

балансировка исходящих вызовов

Сообщение mixeren » 10 июн 2022, 14:43

Коллеги, Voip-оператор не хочет(не может) дать многоканальный транк.
В итоге имеем 4 внутренних логина и выход на 2 городских номера(т.е. 4 внутренних могут одновременно занимать до 2ух исход. линий).
Подскажите, как настроить Астер на два(три) исходящих транка, чтобы исходящий вызов выбирался рандомно и в случае, если транк занят, переключался на соседний свободный транк.
Или подскажите, где можно посмотреть примеры информацию по похожим кейсам. Заранее благодарю.
mixeren
 
Сообщений: 2
Зарегистрирован: 10 июн 2022, 14:30

Re: балансировка исходящих вызовов

Сообщение ded » 10 июн 2022, 15:40

По сути у вас две линии в транке, который может аутентифицировать четырёх клиентов на исходящие вызовы. Организуйте два или четыре транка с уникальными user & secret.
Выполните команду в CLI
Код: выделить все
*CLI> core show application Dial
и посмотрите на использование переменной ${DIALSTATUS}, по которой можно выполнить переход на вызов через вторую линию:
${DIALSTATUS}: This is the status of the call
CHANUNAVAIL
CONGESTION
NOANSWER
BUSY
ANSWER
CANCEL
DONTCALL: For the Privacy and Screening Modes. Will be set if the
called party chooses to send the calling party to the 'Go Away' script.
TORTURE: For the Privacy and Screening Modes. Will be set if the
called party chooses to send the calling party to the 'torture' script.
INVALIDARGS


Более сложный подход - использование переменных ${MACRO_RESULT} или ${GO SUB_RESULT} которые позволяют выполнить макрос в команде Dial, в принципе они делают одно и то же, просто макросы постепенно заменяются на gosub в Астериске.
The macro can set the variable ${MACRO_RESULT} to specify the following actions after the macro is finished executing:
${MACRO_RESULT}: If set, this action will be taken after
the macro finished executing.
ABORT: Hangup both legs of the call
CONGESTION: Behave as if line congestion was
encountered
BUSY: Behave as if a busy signal was encountered
CONTINUE: Hangup the called party and allow the
calling party to continue dialplan execution at the next priority
GOTO:[[<context>^]<exten>^]<priority>: Transfer the
call to the specified destination.
The Gosub routine can set the variable ${GO SUB_RESULT} to specify the following actions after the Gosub returns.
${GOSUB_RESULT}:
ABORT: Hangup both legs of the call.
CONGESTION: Behave as if line congestion was encountered.
BUSY: Behave as if a busy signal was encountered.
CONTINUE: Hangup the called party and allow the calling party to continue dialplan execution at the next priority.
GOTO:[[<context>^]<exten>^]<priority>: Transfer the call to the specified destination.
ded
 
Сообщений: 15312
Зарегистрирован: 26 авг 2010, 19:00

Re: балансировка исходящих вызовов

Сообщение Zavr2008 » 13 июн 2022, 00:29

В итоге имеем 4 внутренних логина и выход на 2 городских номера(т.е. 4 внутренних могут одновременно занимать до 2ух исход. линий).

Так 2 DID и 2 логина на каждый.
Ну а занятость / загруженность DID проверять через func GROUP() https://www.voip-info.org/asterisk-func-group/
Можно эти пиры обозвать Peer_00, Peer_01, Peer_10, Peer_11 ну и юзать Random для выбора 0 или 1, ну и вторая строка для верности обратная)
Российские шлюзы E1 Alvis-GW. Voip-Модернизация УПАТС, FreePBX, CRM. Продолжаем работать, импортозамещаем!
Аватар пользователя
Zavr2008
 
Сообщений: 1969
Зарегистрирован: 27 янв 2011, 01:35

Re: балансировка исходящих вызовов

Сообщение mixeren » 24 июн 2022, 17:48

Спасибо за советы.
Сделал так:
Код: выделить все
exten => _8XXXXXXXXXX.,1,NoOp()

same => n,Dial(SIP/${EXTEN}@trunk1)
same => n,GotoIf($[$["${DIALSTATUS}" = "BUSY"] | $["${DIALSTATUS}" = "CONGESTION"] | $["${DIALSTATUS}" = "CHANUNAVAIL"]?line2)
same => n(line2),Dial(SIP/${EXTEN}@trunk2)

same => n,Hangup()
mixeren
 
Сообщений: 2
Зарегистрирован: 10 июн 2022, 14:30

Re: балансировка исходящих вызовов

Сообщение ded » 27 июн 2022, 12:58

Некритичные замечания:
Этот шаг
Код: выделить все
exten => _8XXXXXXXXXX.,1,NoOp()
смысла не имеет. Зачем пустой операнд NoOp()? Он нужен для вывода чего-нибудь видуально понятного, содержания переменнных, хотя бы
exten => _8XXXXXXXXXX.,1,NoOp(:::::::::::::::::::::::::::::: Caller ID is ${CALLERID(all)} ::::::::::::::::::::::::::::::::::::)
ну и
exten => _8ZXXXXXXXXX,1, - без точки, если по РФ. Фиксированная длина, номера с 0 не начинаются. Или за границу тоже звоните?
Так -
Код: выделить все
same => n,Dial(SIP/${EXTEN}@trunk1)
писать не надо. Надо по формуле Технология / узел / экстен
Код: выделить все
same => n,Dial(SIP/trunk1/${EXTEN})


В такой реализации можно было не городить огород с Goto, а просто
Код: выделить все
exten => _8XXXXXXXXXX,1,Dial(SIP/trunk1/${EXTEN})
exten => _8XXXXXXXXXX,2,Dial(SIP/trunk2/${EXTEN})
ибо переход на шаг №;2 в этом случае будет именно при занятости или недоступности trunk1
ded
 
Сообщений: 15312
Зарегистрирован: 26 авг 2010, 19:00


Вернуться в Вопросы новичков

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

© 2008 — 2022 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH