Астериск и облачная АТС Билайна

Для начала, нам выдали просто облако, там забит блатной номер, по идее - с него должен был быть редирект вызовов на физическую сим-карту, но этот вариант нам не нравился.

По этому запросили облако с сип-аккаунтом, нам такое дали, там еще один номер телефона - чисто для того, чтобы наша АТС на базе Астериск обращалась к этому облаку.

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

Самое трудное - было авторизоваться. Не знаю зачем, но Билайн нам тоже что-то пытается во время авторизации кидать по порту 5060 (стандартный порт авторизации сервера IP-телефонии). Разумеется данный порт извне у нас был открыт только для айпи-адресов удаленных офисов, для всех остальных - закрыт. Пришлось пинговать домен билайна и добавлять в белый список в файрволе IP-адрес Билайна (mpbx.sip.beeline.ru - сервер куда долбимся, чтобы авторизоваться, его IP-адресу нужно открыть в файрволе порт UDP 5060).

И так... открыли, прописали неизвращенную строку авторизации в sip.conf:

register => 9*********:пароль@mpbx.sip.beeline.ru:5060/9*********

Далее в этом же файле создаем транк, чтоб можно было звонить. Для приема звонков транк создавать не обязательно:

[9*********]
type=peer
host=mpbx.sip.beeline.ru
port=5060
username=9*********
fromuser=9*********
fromdomain=mpbx.sip.beeline.ru
secret=пароль
context=9*********
directmedia=no
allowtransfer=no
allowoverlap=no
disallow=all
allow=alaw
progressinband=yes
qualify=yes
t38pt_udptl=yes,redundancy,maxdatagram=400
qualifyfreq=60
dtmfmode=auto
insecure=port,invite

У меня возникли траблы, я вместо домена по привычке указывал IP-адрес и это оказывается плохо, не любит Билайн самодеятельность. Они мне скинули лог что от меня им летит при звонке, попросили в конфиге изменить IP адрес на домен mpbx.sip.beeline.ru  и тогда пошла исходящая связь.

И так... настраиваем правила приема, открываем файл extensions.conf

и пишем в него:

[9*********]
include => local
exten => 9*********,1,NoOp(Inbound dial ${CALLERID(num)} to ${EXTEN})
exten => 9*********,n,Set(CALLERID(name)=${CALLERID(num)})
exten => 9*********,n,Set(FILENAME=${STRFTIME(${EPOCH},,%Y-%m-%d_%H-%M-%S)}-${CALLERID(num)}-${EXTEN}.wav)
exten => 9*********,n,Set(PATHFILENAME=/home/yurec/www/intranet.ru/wav/${FILENAME});как обычно включаем запись
exten => 9*********,n,Set(CDR(userfield)=${FILENAME})
exten => 9*********,n,Set(CDR(metka_vrem)=${EPOCH})
exten => 9*********,n,MixMonitor(${PATHFILENAME},b)
exten => 9*********,n,Dial(SIP/117,30,tT); внутренний номер абонента, кому звоним
exten => 9*********,n,Goto(${DIALSTATUS},1)
exten => 9*********,n,Answer
exten => 9*********,n,Playtones(congestion)
exten => 9*********,n,Congestion(4)
exten => 9*********,n,Hangup()

То, что в квадратных скобках должно быть таким же, как в хвосте строки register в файле sip.conf - после слеша номер телефона. Здесь у меня описаны еще правила, чтобы записывать телефонный разговор. Плюс мне нужна была переменная, которая хранит метку времени Unix.

Звонки на мобилку 9********* должны идти редиректом на внутренний номер 117

Теперь правило исходящих звонков... Так как количество линий ограничено, то по межгороду у нас будет звонить лишь один абонент, допустим тот же 117, в секции, которую традиционно называют local пишем правило - 117 - звони по облачной АТС Билайна:

exten => _8XXXXXXXXXX/_117,1,GoTo(mezhgorod,${EXTEN},1)

Для справки - звонить можно хоть через 8-ку, хоть через +7, но не через 7 или 9126666666

И так правило для звонка с Билайна:

[mezhgorod];виртуальная АТС для звонков за пределы региона
exten => _8XXXXXXXXXX,1,NoOp(Long distance dial ${CALLERID(num)} to ${EXTEN})
exten => _8XXXXXXXXXX,n,Set(FILENAME=${STRFTIME(${EPOCH},,%Y-%m-%d_%H-%M-%S)}-${CALLERID(num)}-${EXTEN}.wav);
exten => _8XXXXXXXXXX,n,Set(PATHFILENAME=/home/yurec/www/intranet.ru/wav/${FILENAME})
exten => _8XXXXXXXXXX,n,Set(CDR(userfield)=${FILENAME})
exten => _8XXXXXXXXXX,n,Set(CDR(metka_vrem)=${EPOCH})
exten => _8XXXXXXXXXX,n,MixMonitor(${PATHFILENAME},b)
exten => _8XXXXXXXXXX,n,Set(CID=${CALLERID(num)})
exten => _8XXXXXXXXXX,n,Set(CALLERID(all)="<9*********>")
exten => _8XXXXXXXXXX,n,Dial(SIP/9*********/${EXTEN},50,tT)
exten => _8XXXXXXXXXX,n,Goto(${DIALSTATUS},1)
exten => _8XXXXXXXXXX,n,HangUp()

Так же тут прописано в третей строке снизу - имя транка с которого звоним ну и как в примере входящих звонков - запись разговора.

Комментарии

Дорогие посетители моего сайта, подпишитесь на мой канал в Дзене! Это стимулирует меня писать новые и новые познавательные статьи!