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

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

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

Теоретический курс по основам сетевых технологий. Позволит системным администраторам упорядочить и восполнить пробелы в знаниях. Цена очень доступная, есть бесплатный доступ. Все подробности по . Можно пройти тест на знание сетей, бесплатно и без регистрации.

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

Онлайн курс Основы сетевых технологий

Теоретический курс с самыми базовыми знаниями по сетям. Курс подходит и начинающим, и людям с опытом. Практикующим системным администраторам курс поможет упорядочить знания и восполнить пробелы. А те, кто только входит в профессию, получат на курсе базовые знания и навыки, без воды и избыточной теории. После обучения вы сможете ответить на вопросы:
  • На каком уровне модели OSI могут работать коммутаторы;
  • Как лучше организовать работу сети организации с множеством отделов;
  • Для чего и как использовать технологию VLAN;
  • Для чего сервера стоит выносить в DMZ;
  • Как организовать объединение филиалов и удаленный доступ сотрудников по vpn;
  • и многое другое.
Уже знаете ответы на вопросы выше? Или сомневаетесь? Попробуйте пройти тест по основам сетевых технологий. Всего 53 вопроса, в один цикл теста входит 10 вопросов в случайном порядке. Поэтому тест можно проходить несколько раз без потери интереса. Бесплатно и без регистрации. Все подробности на странице .

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

Автор 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 не будет опубликован.

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