Home » Asterisk » Ограничение на звонки для группы номеров в asterisk

Ограничение на звонки для группы номеров в asterisk

Опишу простую задачу и столь же простое решение по ограничению звонков для определенной группы номеров в астериск. Например, вам нужно создать диапазон номеров 500-510, которым нужно разрешить совершать только локальные звонки. Все остальные звонки должны быть закрыты.

Если у вас есть желание научиться работать с роутерами микротик и стать специалистом в этой области, рекомендую по программе, основанной на информации из официального курса MikroTik Certified Network Associate. Курс стоящий, все подробности читайте по ссылке. Есть бесплатные курсы.

Расскажу, зачем это может понадобиться. Например, у вас есть офисная АТС на астериск, которой пользуются сотрудники в офисе. Вам хочется, чтобы удаленные сотрудники так же подключались к этому серверу, например, со своих смартфонов и совершали звонки сотрудникам в офисе. Звонить во вне большого смысла нет, так как 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.

Другие материалы по asterisk:

Онлайн курс "DevOps практики и инструменты"

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, научиться непрерывной поставке ПО, мониторингу и логированию web приложений, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров. Проверьте себя на вступительном тесте и смотрите программу детальнее по .

Помогла статья? Есть возможность отблагодарить автора

Автор Zerox

Zerox
Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству.

10 комментариев

  1. Аватар

    Добрый день. Подскажите пожалуйста как в Freepbx для одного пользователя добавить несколько транков в поле Context

  2. Аватар

    Добрый день. У нас в компании у секретаря 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)

    • Zerox

      Вы что-то путаете, или я не понимаю, что вы пишите. Звонок с внешних номеров к секретарю и с локальных описывается одинаково. Просто они стоят в разных экстеншенах. Если работает с внешними номерами, то такой же код должен работать и с внутренними.

      • Аватар

        Вот голосовое меню, тут отрабатывает:

        [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)

        • Zerox

          В каком плане не хочет? Что происходит, если позвонить 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) ===ТУТ ДОБАВИЛ===

            • Zerox

              У вас ошибки. Должно быть так:
              [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})

              Вы, похоже, просто не понимаете до конца, как диалплан работает.

              • Аватар

                Заработало!!!! Спасибо Вам большое за помощь. Да, я не до конца разобрался и понял, но благодаря Вам знаю и понимаю теперь чуточку больше.

Добавить комментарий

Ваш e-mail не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.