150 маршрутов... мало вероятности, что до этого дойдем, а если превысим предел - можно и дополнительный сервак поднять. MVTS не умеет пробивать нат и не любит динамические айпишники (есть для нее примочка, но она стоит чуть дешевле самого билинга), по этому самый подходящий вариант - использовать Asterisk.
В моем примере (см. второй пост в этой ветке) на один маршрут используется 4 транка (это в качестве примера, в реали от 8 до 32) Теоретически астер, если в этом роуте нарывается на "битый" транк, звонок должен послать на следующий. Моя задумка заключается в следующем: допустим приходит что-то типа такого: 040101375297090101 - первым делом астер режет префикс 040101 и номер пихает в первый транк, добавляя ему префикс 401; если транк это не принял - дальше префикс 401 меняем на 402 и идем во второй транк и т.д. Но в реали происходит такое: получаем номер 040101375297090101, префикс 040101 меняем на 401 и 401375297090101 шлем в первый транк. Если транк номер принял - всё ОК, если нет - вываливаемся с кодом завершения "User Busy". Понятное дело, что такой код завершения билинг расценивает как номер набран, но в ответ получены "короткие гудки".
Код: Выделить всё
[outrt-3] ; GOIP-4-1
include => outrt-3-custom
exten => _040101.,1,Macro(user-callerid,LIMIT,)
exten => _040101.,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
exten => _040101.,n,Set(_NODEST=)
exten => _040101.,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
exten => _040101.,n,Macro(dialout-trunk,2,401${EXTEN:6},)
exten => _040101.,n,Macro(dialout-trunk,3,401${EXTEN:6},)
exten => _040101.,n,Macro(dialout-trunk,5,401${EXTEN:6},)
exten => _040101.,n,Macro(dialout-trunk,6,401${EXTEN:6},)
exten => _040101.,n,Macro(outisbusy,)
exten => _040102.,1,Macro(user-callerid,LIMIT,)
exten => _040102.,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
exten => _040102.,n,Set(_NODEST=)
exten => _040102.,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
exten => _040102.,n,Macro(dialout-trunk,2,402${EXTEN:6},)
exten => _040102.,n,Macro(dialout-trunk,3,402${EXTEN:6},)
exten => _040102.,n,Macro(dialout-trunk,5,402${EXTEN:6},)
exten => _040102.,n,Macro(dialout-trunk,6,402${EXTEN:6},)
exten => _040102.,n,Macro(outisbusy,)
exten => _040103.,1,Macro(user-callerid,LIMIT,)
exten => _040103.,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
exten => _040103.,n,Set(_NODEST=)
exten => _040103.,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
exten => _040103.,n,Macro(dialout-trunk,2,403${EXTEN:6},)
exten => _040103.,n,Macro(dialout-trunk,3,403${EXTEN:6},)
exten => _040103.,n,Macro(dialout-trunk,5,403${EXTEN:6},)
exten => _040103.,n,Macro(dialout-trunk,6,403${EXTEN:6},)
exten => _040103.,n,Macro(outisbusy,)
exten => _040104.,1,Macro(user-callerid,LIMIT,)
exten => _040104.,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
exten => _040104.,n,Set(_NODEST=)
exten => _040104.,n,Gosub(sub-record-check,s,1(out,${EXTEN},))
exten => _040104.,n,Macro(dialout-trunk,2,404${EXTEN:6},)
exten => _040104.,n,Macro(dialout-trunk,3,404${EXTEN:6},)
exten => _040104.,n,Macro(dialout-trunk,5,404${EXTEN:6},)
exten => _040104.,n,Macro(dialout-trunk,6,404${EXTEN:6},)
exten => _040104.,n,Macro(outisbusy,)
;--== end of [outrt-3] ==--;
и меня смущает во всех роутах последняя строчка: exten => _ХХХХХХ.,n,Macro(outisbusy,) - как бы вываливаемся с кодом "канал занят". Может здесь и зарыта собака?
А меня развращают дети: купят несколько балалаек, воткнут их в одну розетку и хотят бабло гребсти. А когда им задаешь вопрос: какой у тебя айпишник и в ответ слышишь: а кто это такой?.. Понимаешь что потра... помучиться придется.
В общем в сторону астера у меня задумок много, только нужно совсем чуть-чуть подкорректировать направление...