В Asterisk`e есть 25 SIP провайдеров, как сделать dialplan чтоб набор шел циклически по кругу?

В Asterisk`e есть 25 SIP провайдеров, как сделать dialplan чтоб набор шел циклически по кругу?
Т. е. первый вызов от абонента направляется к первому SIP провайдеру, второй вызов на второго провайдера, 3-тий вызов на 3 провайдера... 25-тый вызов на 25 провайдера, 26 - снова попадает на первого провайдера.

На просторах интернета нашел пример реализации для трех SIP провайдеров (проверял для трех SIP провайдеров, работает)... Прошу оказать содействие для модернизации кода, либо предложения с более гибким кодом без привязки к количеству SIP провайдеров.

[context]
exten => _X.,1,ExecIF($["${DB_EXISTS(dial/count)}" = "0"]?Set(DB(dial/count)=0))
exten => _X.,n,Set(DB(dial/count)=${IF($[${DB(dial/count)} > 2]?1:$[${DB(dial/count)} +1])})
exten => _X.,n,ExecIF($["${DB(dial/count)}" = "1"]?Dial(SIP/${EXTEN}@sipgate,,tT))
exten => _X.,n,ExecIF($["${DB(dial/count)}" = "2"]?Dial(SIP/${EXTEN}@arinos,,tT))
exten => _X.,n,ExecIF($["${DB(dial/count)}" = "3"]?Dial(SIP/${EXTEN}@sipnet,,tT))
exten => _X.,n,Hangup
  • Вопрос задан
  • 625 просмотров
Решения вопроса 1
Winsik
@Winsik
сис.админ, недопрограммист :)
2 строка: ... ial/count)} > 2]?1:$[${DB(dial/count)} +1])})
и дописать все нужные экстеншены
....al/count)}" = "25"]?Dial(SIP/${EXTEN}@sip25net,,tT))
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Я не настолько хорошо конечно знаю Asterisk, и особенно возможности AEL, но мне кажется в любом случае нужно каждому провайдеру присваивать номер. Будет это в диалплане при помощи переменной-счетчика, как в приведенном Вами примере, или в sip.conf у каждого провайдера будет свой “номер”, показывающий диалплану конечное количество транков, по сути не имеет значения. Ваш диалплан навскидку рабочий, есть переменная, которая увеличивается на 1 после каждого звонка, и это общий алгоритм работы перебора транков. Но в AEL количество строчек будет меньше, особенно если у Вас 25 транков.
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Вместо имён 'sipgate', 'arinos', 'sipnet' и т.д. используйте номера 'sip1', 'sip2', ..., 'sip25'. Тогда диалплан сокращается до:
[context]
exten => _X.,1,ExecIF($["${DB_EXISTS(dial/count)}" = "0"]?Set(DB(dial/count)=0))
same => n,Set(DB(dial/count)=${IF($[${DB(dial/count)} > 24]?1:$[${DB(dial/count)} +1])})
same => n,Dial(SIP/${EXTEN}@sip${DB(dial/count)},,tT))
same => n,Hangup
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы