Опишу простую задачу и столь же простое решение по ограничению звонков для определенной группы номеров в астериск. Например, вам нужно создать диапазон номеров 500-510, которым нужно разрешить совершать только локальные звонки. Все остальные звонки должны быть закрыты.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Расскажу, зачем это может понадобиться. Например, у вас есть офисная АТС на астериск, которой пользуются сотрудники в офисе. Вам хочется, чтобы удаленные сотрудники так же подключались к этому серверу, например, со своих смартфонов и совершали звонки сотрудникам в офисе. Звонить во вне большого смысла нет, так как sip тарифы не сильно отличаются от тарифов мобильных операторов.
К тому же хочется подстраховаться на тот случай, если учетка от сервера уйдет куда-то на сторону и кто-то сможет ей воспользоваться для совершения массовых звонков за ваш счет. В данном случае ничего не получится. Понятно, что для ограничения доступа к серверу надо использовать vpn, но ситуации разные бывают и лишний запрет на ненужные звонки все равно не помешает.
Я расскажу на примере расширения функционала, описанного в своей статьи по установке и настройке asterisk.
Создаем отдельный шаблон в /etc/asterisk/sip.conf для новой группы номеров.
[ext-users](!) type=friend context=ext host=dynamic nat=yes qualify=yes canreinvite=no sipreinvite=no dtmfmode=rfc2833 disallow=all allow=ulaw allow=alaw allow=g729
Добавляем туда же несколько номеров.
[500](ext-users) callerid="500" <500> secret=password1 [501](ext-users) callerid="501" <501> secret=password2 [502](ext-users) callerid="502" <502> secret=password3
Создаем новый экстеншен в /etc/asterisk/extensions.conf.
[ext] ;Конференция exten => 999,1,Answer() exten => 999,n,ConfBridge(1,confer) ;Звонок на внутренний номер exten => _XXX,1,Dial(SIP/${EXTEN},30,Tt)
Сохраняем конфиги, перечитываем настройки и проверяем. Пользователи из шаблона ext-users смогут звонить только на трехзначные внутренние номера и в комнату для конференций. При необходимости, им можно открывать и другие направления, добавляя маски в план набора.
Не забудьте настроить доступ к asterisk на шлюзе, выполнив проброс необходимых портов, если доступ к серверу будет не по vpn.
Для отладки и тестирования работы voip я рекомендую сервис Zadarma. Плюс его в том, что после регистрации вы получите настройки пира для внутренней сети оператора. И внутри этой сети вы можете бесплатно звонить. Например, я одного пира регистрирую на sip клиенте смартфона и с него звоню на второй аккаунт, пир от которого настроен в астериске. Таким образом эмулирую внешний звонок. Удобно отлаживать различные конфигурации звонков, не требуя платного подключения.
Другие материалы по asterisk:
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
- Установка и настройка астериск с нуля
- Мониторинг asterisk в zabbix
- Соединение двух серверов астериск
- Анализ SIP трафика
- Замена +7 на 8 и наоборот
- Ограничение на звонки для группы номеров
замечательный персонаж, уже не первый раз читаю.
Человек занимающийся переводом статей, а на все вопросы в комментариях, отвечающий "я не знаю"
Добрый день. Подскажите пожалуйста как в Freepbx для одного пользователя добавить несколько транков в поле Context
Я не использую freepbx, не подскажу.
Добрый день. У нас в компании у секретаря 2 номера (телефон+трубка). При входящих звонках с внешки если в голосовом меню выбрать нужную цифру, то звонок идет сразу на оба номера одновременно, там прописан следующий код:
exten => t,n,Dial(SIP/300&SIP/310)
когда я пытаюсь реализовать одновременный звонок на 2 телефона секретаря внутри компании, то ничего не выходит. Либо получается звонить на 2 номера сразу, но при этом на другие внутренние номера не идут звонки, либо exten на 2 номера не срабатывает. Как это можно реализовать?
в extensions.conf прописано следующее:
;Звонок на внутренний номер
exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => _XXX,n,Dial(SIP/${EXTEN},Tt)
;exten => 300,n,Dial(SIP/300&SIP/310)
Вы что-то путаете, или я не понимаю, что вы пишите. Звонок с внешних номеров к секретарю и с локальных описывается одинаково. Просто они стоят в разных экстеншенах. Если работает с внешними номерами, то такой же код должен работать и с внутренними.
Вот голосовое меню, тут отрабатывает:
[company_tree]
exten => s,1,Answer()
;Отвечаем на входящий звонок
exten => s,2,Background(/etc/IVR/golos)
;Проигрываем запись текста нашего голосового дерева
exten => s,3,WaitExten(3)
;Немного времени на осмысление дерева и выбор интересующего направления, в данном случае 3 секунд
;Звонок на добавочный номер
exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN}) ;Запись разговора
exten => _XXX,n,Dial(SIP/${EXTEN:0})
;Договорной отдел Терентьева Татьяна
exten => 1,1,Macro(recording,${CALLERID(num)},${EXTEN}) ;Запись разговора
exten => 1,n,Dial(SIP/218)
;Бухгалтерия ВСЯ
exten => 2,1,Macro(recording,${CALLERID(num)},${EXTEN}) ;Запись разговора
exten => 2,n,Dial(SIP/303)
;Юредический отдел Гуляева Лена
exten => 3,1,Macro(recording,${CALLERID(num)},${EXTEN}) ;Запись разговора
exten => 3,n,Dial(SIP/307)
;Отдел снабжения Корешкова Ольга
exten => 4,1,Macro(recording,${CALLERID(num)},${EXTEN}) ;Запись разговора
exten => 4,n,Dial(SIP/106)
;Коммерческий отдел Кикало
exten => 5,1,Macro(recording,${CALLERID(num)},${EXTEN}) ;Запись разговора
exten => 5,n,Dial(SIP/202)
;Производственая база Субботин Леха
exten => 6,1,Macro(recording,${CALLERID(num)},${EXTEN}) ;Запись разговора
exten => 6,n,Dial(SIP/103)
;Соеденяем с секретарем по таймауту
exten => t,1,Macro(recording,${CALLERID(num)},${EXTEN}) ;Запись разговора
exten => t,n,Dial(SIP/300&SIP/310)
;Проигрываем запись сначала
exten => 0,1,Goto(company_tree,s,1)
Вот это основной extensions.conf. Тут не хочет:
#include "company.tree"
[general]
static=yes
writeprotect=no
[globals]
DIR_RECORDS=/mnt/calls/
[default]
[macro-recording]
exten => s,1,Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2});
exten => s,n,Set(monopt=nice -n 19 /usr/local/bin/lame -b 32 --silent "${DIR_RECORDS}${fname}.wav" "${DIR_RECORDS}${$
exten => s,n,Set(CDR(filename)=${fname}.mp3);
exten => s,n,Set(CDR(realdst)=${ARG2});
exten => s,n,MixMonitor(${DIR_RECORDS}${fname}.wav,b,${monopt});
exten => s,n(no),Verbose(Exit record);
;Вешаем трубку
[handup-sip]
exten => _X!,1,HangUp()
;Исходящие звонки
;[call-sek]
;Звонок на 2 номера секретаря (Телефон+трубка)
;exten => 300,1,Dial(SIP/300&SIP/310)
[call-out]
;Звонок на внутренний номер
exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => _XXX,n,Dial(SIP/${EXTEN})
;Звонок на внешний номер
exten => _XXX.,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => _XXX.,n,Dial(SIP/${EXTEN}@out1) ;звонки на мобильные и другие города
exten => _XXX.,n,Dial(SIP/${EXTEN}@out2) ;звонки на мобильные и другие города
exten => _XXX.,n,Dial(SIP/${EXTEN}@out3) ;звонки на мобильные и другие города
exten => _XXX.,n,Dial(SIP/${EXTEN}@out4) ;звонки на мобильные и другие города
exten => _XXXXXXX,n,Dial(SIP/7342${EXTEN}@out1) ;звонки на Пермские номера
exten => _XXXXXXX,n,Dial(SIP/7342${EXTEN}@out2) ;звонки на Пермские номера
exten => _XXXXXXX,n,Dial(SIP/7342${EXTEN}@out3) ;звонки на Пермские номера
exten => _XXXXXXX,n,Dial(SIP/7342${EXTEN}@out4) ;звонки на Пермские номера
include => handup-sip
;Входящие звонки
[call-in]
;exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => line1,1,Goto(company_tree,s,1)
exten => line2,n,Goto(company_tree,s,1)
exten => line3,n,Goto(company_tree,s,1)
exten => line4,n,Goto(company_tree,s,1)
В каком плане не хочет? Что происходит, если позвонить 300?
Не хочет в [call-out] (звонок на внутренний номер). При той конфигурации, которую я скинул выше, если звонить на номер 300. То просто идет звонок на стационарный секретарю.
При такой конфе звонит и на трубку и на стационар, но на другие внутренние не звонит:
[call-out]
;Звонок на внутренний номер
exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => 300,n,Dial(SIP/300&SIP/310) ===ТУТ ДОБАВИЛ===
exten => _XXX,n,Dial(SIP/${EXTEN})
Если опустить строчку вниз, то звонок просто идет на стационар:
[call-out]
;Звонок на внутренний номер
exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => _XXX,n,Dial(SIP/${EXTEN})
exten => 300,n,Dial(SIP/300&SIP/310) ===ТУТ ДОБАВИЛ===
У вас ошибки. Должно быть так:
[call-out]
;Звонок на внутренний номер
exten => 300,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => 300,n,Dial(SIP/300&SIP/310)
exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => _XXX,n,Dial(SIP/${EXTEN})
Вы, похоже, просто не понимаете до конца, как диалплан работает.
Заработало!!!! Спасибо Вам большое за помощь. Да, я не до конца разобрался и понял, но благодаря Вам знаю и понимаю теперь чуточку больше.