t-alexashka
@t-alexashka
Сразу пишу legacy код

Как звонить рандомно/последовательно с разных номеров?

Привет друзья!

Купил у МТТ несколько тел. номеров (пусть будут A B C). Как мне в астериске настроить чтобы из астериска звонить через случайный номер каждый раз? т.е. сначала звонит через A, потом через B, потом через C. Потом снова через A и тд? Чтобы клиенты видели разные номера.

Какие то группы транков или что-то такое по логике. подскажите пожалуйста.

PS. если клиент сам звонит на A, B или C то он попадает на входящуюю линию (это я уже настроил).
  • Вопрос задан
  • 139 просмотров
Пригласить эксперта
Ответы на вопрос 2
@dronmaxman
VoIP Administrator
Попробуй так. Код не тестил, написал в блокноте, могут быть ошибки.
asterisk -rx "database put TRUNKS_LIST/1/MYTRUNK1"
asterisk -rx "database put TRUNKS_LIST/2/MYTRUNK2"
asterisk -rx "database put TRUNKS_LIST/3/MYTRUNK3"

exten => XXXXX.,1,Noop(---------------Random-trunk-for-out-calls-----------------)
 same => n,Set(CIRCLE_COUNT=4) ;;; указываем количество попыток, что бы не зациклиться
 same => n(set_trunk),Set(TRUNK_NUMBER=${RAND(1,3)}) ;;; выбираем номер транка
 same => n,Set(CIRCLE_COUNT=$[${CIRCLE_COUNT} - 1])
 same => n,GotoIf($["${CIRCLE_COUNT}"="0"]?end_call) ;;; если попыток не осталось - закончить перебор
 same => n,Set(TRUNK_NAME=${DB(TRUNKS_LIST/${TRUNK_NUMBER})}) ;;;; достаем имя транка из внутренней ДБ по номеру
 same => n,Set(TRUNK_STATE=${DEVICE_STATE(SIP/${TRUNK_NAME})}) ;;;; проверяем занят ли транк
 same => n,GotoIf($["${TRUNK_NAME}"="NOT_INUSE"]?:set_trunk) ;;; если транк занят, берем следующий
 same => n,Dial(SIP/${TRUNK_NAME}/${EXTEN})
 same => n(end_call),HangUp()
Ответ написан
Насколько я помню, встроенного механизма для SIP нет.

Используйте глобальную переменную-счетчик, а исходящие транки пронумеруйте, например trunk1, trunk2...

Перед каждым вызовом увеличивайте значение переменной на 1, пока она меньше числа транков. При переполнении - сбрасывать счетчик. А затем вызывайте транк, собрав его имя из константы "trunk" и номера транка.

Счетчик при желании можно заменить на RAND, диалплан будет выглядеть по-проще, если нет особой необходимости в round-robin
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы