AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Как изящно организовать обработку вызовов через разные контексты на двух связанных астерисках?

Asterisk IP PBX 4 сообщений -
#1

Как изящно организовать обработку вызовов через разные контексты на двух связанных астерисках?


Че-то не приходит в голову, как реализовать красиво.
Грубо говоря: aster1 и aster2 соединены как friend.

Когда поступает вызов от абонента aster1, который должен перевестись на aster2, он обрабатывается так:
Код:
exten => _XXXXXX,1,Dial(IAX2/peer_aster2/${EXTEN},40,rT)



При этом пир/транк, под которым авторизуется aster1 на aster2, имеет на втором астериске прописанный контекст LOCAL.
То есть кто бы ни позвонил с aster1 на номерную ёмкость aster2, его вызов на aster2 будет обработан правилами контекста LOCAL.

Нужно сделать, чтобы звонки некоторых абонентов с aster1 на aster2 обрабатывались не в контексте LOCAL, а в контексте GOROD. Нам напрашивается такое решение: сделать еще один пир как friend на aster2, например peer_gorod_aster2, и указать ему контекст GOROD. Тогда с aster1 можно будет звонить через него так:
Код:
exten => _XXXXXX,1,Dial(IAX2/peer_gorod_aster2/${EXTEN},40,rT)

Но ведь его тоже придется прописывать на aster1, и такое решение кажется громоздким, поскольку на aster1 предполагается много абонентов, которые должны звонить через разные контексты второго астериска: GOROD1, GOROD2, GOROD3 и т.п.
Подскажите пожалуйста, какие еще могут быть варианты.
#2

aster1 или aster2 должен определять контекст? по какому условию?

можно все условия хранить в MySQL и второй * будет туда обращаться за выбором контекста (http://voip.rus.net/tiki-index.php?page=Asterisk+cmd+MYSQL)
на втором использовать goto для перехода в нужный контекст
#3

Не вижу смысл городить сложности с этим.

Делаем раз:
Код:
mkdir /etc/asterisk/scripts
mkdir /etc/asterisk/asterisk1
mkdir /etc/asterisk/asterisk2
mkdir /etc/asterisk/common_part
Делаем скрипт синхронизации:
Код:
cat /etc/asterisk/scripts
#!/bin/sh
rsync -avzP /etc/asterisk/asterisk1/* -e "ssh PARAMS" user@asterisk1:/etc/asterisk/
rsync -avzP /etc/asterisk/common_part/* -e "ssh PARAMS" user@asterisk1:/etc/asterisk/

rsync -avzP /etc/asterisk/asterisk2/* -e "ssh PARAMS" user@asterisk2:/etc/asterisk/
rsync -avzP /etc/asterisk/common_part/* -e "ssh PARAMS" user@asterisk2:/etc/asterisk/
Делаем общий дайлплан и включаем его через директиву #include

Никаких баз данных нет.
В моей системе, я пользуюсь акаунтом в дропбокс, благо он работает на ура как консольный клиент, заодно и бакап файлов есть. А части дайлплана в у меня через симлинк сделаны.

Настройки по перекидыванию звонков минимальны и кстати, звонить через иакс не надо, есть команда switch.
#4

Fido, andyk74 - спасибо за ответ, подсказали целый выбор решений.
Будем пробовать реализовать.

Немного поясню про условия:
Вопрос возник из-за того, что к aster1 подключены внешние (в интернете) абоненты. А к aster2 - транки на sip-провайдеров городской связи и абоненты внутри сети организации.
Так сделано с целью безопасности и по некоторым другим причинам.

И когда через aster1 звонит абонент, который является сотрудником пятого отдела, его вызов на aster2 должен произойти из контекста GOROD5 - то есть через определенную городскую линию, чтобы определился нужный номер и правильно произошла тарификация именно на пятый отдел.