Астериск и облачная АТС Билайна
Для начала, нам выдали просто облако, там забит блатной номер, по идее - с него должен был быть редирект вызовов на физическую сим-карту, но этот вариант нам не нравился.
По этому запросили облако с сип-аккаунтом, нам такое дали, там еще один номер телефона - чисто для того, чтобы наша АТС на базе Астериск обращалась к этому облаку.
Как бы у нас уже есть провайдер, что дает нам сип-телефонию, с ним не было ни каких проблем, кроме завышеных цен на межгород.
Самое трудное - было авторизоваться. Не знаю зачем, но Билайн нам тоже что-то пытается во время авторизации кидать по порту 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()
Так же тут прописано в третей строке снизу - имя транка с которого звоним ну и как в примере входящих звонков - запись разговора.