Шаблоны и правила набора номера в FreePBX Distro (Asterisk, Elastix)

Эта статья описывает принцип работы исходящей маршрутизации, шаблонах и правилах набора номера, расскажет что такое префикс и приставка в FreePBX Distro (дистрибутив Линукса с предустановленным Астериском и FreePBX), но как и прежде по аналогии можно будет настроить и другие дистрибутивы с Астериском которые используют FreePBX, например Elastix или Trixbox.

Итак, для того что бы астериск мог совершить звонок вне нашей IP-АТС он должен знать какой номер (в каком формате) по какому транку передать. Для этого предназначен раздел Исходящая маршрутизация (Outbound Routes), в нём мы можем создать несколько маршрутов в каждом маршруте может быть использовать несколько транков. Маршруты астериск перебирает по порядку сверху вниз, как только находит совпадение в шаблоне номера использует транки в маршруте, перебирает их так же сверху вниз, если первый маршрут по какой-то причине не сработал (например занят, не работает, какой-то иной сбой) используется второй и так далее по списку.

Учитывая то что маршруты перебираются сверху вниз, первыми по списку лучше пускать более детальные маршруты, например с кодом города, после них пускать маршруты с более общей маской например мобильники, затем уже страну, потому что если сделать наоборот то сработает маршрут страны, но не сработают остальные, впрочем остановимся более подробно на шаблонах (Шаблоны номеров, используемые на этом маршруте \ Dial Patterns that will use this Route).

В шаблоне есть поля: приставка(prepend), префикс (prefix) и совпадение шаблона (match pattern), раньше были не поля, в какой-то момент времени использовалась запись как в конфиг файлах астериска

prepend+prefix|match_pattern

т.е. после приставки идёт плюс (+), за префиксом идёт |

freepbx route prepend prefix pattern

Приставка

Приставка это любые цифры которые Астериск подставит перед номером, префикс это цифры которые астериск уберёт из номера, шаблон это шаблон. В шаблоне мы можем использовать следующие обозначения: X – одна цифра от 0 до 9, Z – одна цифра от 1 до 9, N – одна цифра от 2 до 9, ну и конечно мы можем использовать и сами цифры.

Например, если нам нужен шаблон для номеров от 100 до 199 мы можем использовать 1XX.

Если абонент (пользователь) набирает номер 101 то он попадает под шаблон 1ХХ, что ещё можно сделать. Например у вас в городе используется 7-мизначная нумерация, а транк провайдера пропускает номера только вместе с кодом города, пусть код города будет 861, а номер надо набирать в международном формате, т.е. нам надо что бы абонент набрал номер 2999831, а астериск бы позвонил по номеру 78612999831, для этого будем использовать приставку (prepend) в шаблоне. итак приставка будет 7861, а шаблон XXXXXXX. Тут приложу картинку что бы было понятно.

freepbx dial pattern

это же в формате конфиг файла

7861+XXXXXXX

Префикс

Так работает приставка, зачем же тогда нужен префикс? Ну давайте рассмотрим пример с нелюбимой для меня 9кой, раньше на старых аналоговых АТС для того что бы выйти на городскую линию надо было дополнительно набирать 9ку перед номером, в IP-АТС Asterisk такой ерунды делать не надо, но многие по привычке (пользователей) добавляют этот архаизм. Итак, пример такой, абонент набирает 92999831, а нам на выходе надо получить 78612999831. В качестве приставки (prepend) мы используем код города и код страны 7861, в качестве префикса (prefix) используем 9, а шаблон номера будет 7 любых цифр – XXXXXXX, для наглядности снова картинка.

7861+9|XXXXXXX

Теперь представим что у вас выход в город не через IP провайдера, а через голосовой шлюз, а значит нам в город надо выпускать номер в 7мизначном формате и без 9ки, представим на минуту, что некоторые наши абоненты уже привыкли набирать просто 7 цифр без 9ки для звонков в город, а другая часть до сих пор рефлекторно 9ку добавляет, в одном маршруте, как я уже писал, можно использовать несколько шаблонов, для добавления шаблона в маршруте используем кнопку Добавить ещё поля (Add More Dial Pattern Fields). Итак наш абонент набирается номер 2999831 или 92999831, а астериск должен отправить на шлюз 2999831, выглядеть такой маршрут будет примерно так:

9|XXXXXXX
XXXXXXX

Совет

Махинации с префиксами и приставками можно делать не только в исходящей маршрутизации, но так же и в самом транке. Но если в исходящей маршрутизации шаблон используется для определения в какой транк запустить вызов, то в самом транке это уже на шаблон, а маска, т.е. если астериск передаёт номер в транк который не соответствует маске, то вызов совершён не будет, если не задавать маску в транке, то и проверки никакой проводится не будет, астериск пропустит все номера. Если вы только начинаете изучать FreePBX, то лучше не использовать Правила для манипуляции набранными номерами (Dialed Number Manipulation Rules) пока не сумеете совершить хотя бы один звонок без правил.

В дальнейшем поскольку использовать префикс и приставку как я уже писал можно и в транке и в исходящей маршрутизации, лучше делать так, в исходящей маршрутизации все номера приводить в международный формат (код страны – код города – номер телефона, 78612999831 для примера), а уже в самом транке приводить в нужный вам формат.

Пример

Рассмотрим такой пример:

У нас есть 4 транка:

Gateway – голосовой шлюз, который подключён через обычные телефонные линии в городскую сеть (ТФоП), используется 7мизначная нумерация, код выхода на межгород 8. Выгодно использовать для звонков внутри города, но абсолютно не выгодно использовать для всех остальных направлений.

Trunk L – провайдер, использует международный набор номера (т.е. через 7), его выгодно использовать для звонков в Москву и вполне можно использовать для звонков в город, если голосовой шлюз занят или не работает, также будем использовать как резервный для звонков на мобильники.

Trunk M – провайдер, использует международный набор номера (т.е. через 7), его выгодно использовать для звонков на мобильные телефоны и для звонков по России.

Trunk T – провайдер, использует наш местный формат набора номера (т.е. через 8), его можно использовать как резервный для звонков в Москву и по России.

В рассматриваемом примере можно выделить 4 направления, т.е. будем использовать 4 маршрута – это город, мобильники, Москва и Россия. В примере в маршрутах я буду приводить формат набора номера к международному, а в самом транке выворачивать в формат который требует сам транк. Первыми настраиваются транки, затем исходящие маршруты.

Информацию о том как создать транк и настроить его Вы можете прочитать в статье по настройке мультифона для FreePBX Distro. Я же сосредоточу внимание только на шаблонах и правилах.

Транки

Итак транк Gateway:

freepbx dial rule

Тут всё просто. Преобразуем номер из международного в местный, больше ничего не пропускаем, 9 будем убирать в маршруте.

Trunk L:

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

Trunk M:

Опять таки, никаких манипуляций, но разрешаем звонить через этот транк в любую точку России. Поскольку маска в транке определяет не направление звонков, а только разрешение на прохождение определённых номеров то добавлять маску мобильников (79XXXXXXXXX) нет смысла, ибо она входит в маску России.

Trunk T:

Как и в предыдущем случае задаём маску которая разрешает звонить по всем направления в России. Мы не добавляем маску мобильников и Москвы, маска этих направлений уже перекрывается маской России. Исключение составляет только то что мы убираем 7ку и добавляем 8ку, поскольку наш провайдер пропускает номера так как это привычно делать с обычного телефона – через 8ку, 8 код города, номер телефона.

Маршруты

Переходим к маршрутам, маршруты надо составлять по принципу чем уже шаблон тем он выше. Самые узкие шаблоны у нас город и Москвы. Друг друга они не перекрывают поэтому нет разницы в каком порядке их размещать, начнём с города. Чтобы добавить новый маршрут выбираем раздел Подключения (Connectivity) – Исходящая маршрутизация (Outbound Routes) и там жмём кнопку Добавить маршрут (Add Route).

Задаём название маршрута

Задаём шаблон номера, помним что абоненты будут набирать либо просто 7 знаков либо 7знаков с 9кой. Врядли будут набирать номер с кодом города, но мы будем приводить номер в международный формат.

Следующим шагом выбираем транки через которые будет звонить Астер по этому маршруту. В случае с городом буде транк Gateway и Trunk L. И жмём кнопку Сохранить изменения (Submit Changes).

Этот маршрут готов, переходим к Москве. Помним что абоненты скорее всего будут набирать по привычке код Москвы через 8ку, а может быть даже через 9-8.

Задаём транки, выше я писал что для этого направления будем использоваться Trunk L и Trunk T. Не забываем сохраняться.

Остаются ещё два маршрута Россия и мобильники. Россия имеет более широкую маску чем мобильники, поэтому сначала добавляем маршрут на мобильники, иначе маршрут Россия перекроет маршрут для мобильников.

Для этого направления мы договорились использовать Trunk M и Trunk L

Последний маршрут – Россия.

Ну вот и всё. Не забываем применить настройки (большая красная кнопка). Должно получиться примерно как-то так:

Если остались вопросы, а может быть пожелания, замечания итп – высказывайтесь в комментариях, рад буду ответить.

  • http://vk.com/id21879417 Сергей Палади

    а возможно ли в freePbx сделать для пользователя выбор исходящего транка? скажем перед набором номера набрал 81 – это выход на первый транк, 82- второй транк, ну и.т.д

    • Алексей

      да конечно. маршруты добавляйте и в нём префикс 81, 82 итп по маршруту на каждый транк который выбрать хотите.
      Только я бы не стал 8ку использовать вначале, лучше с другими цифрами потренироваться, любые цифры кроме номеров которые внутри компании используются и 2,7,8,9.

      • http://vk.com/id21879417 Сергей Палади

        спасибо. Все получилось.

  • https://plus.google.com/105976054095738155380 Владислав Кравцов

    Добрый вечер.
    Есть вопрос.
    Описываю ситуацию. Например, есть сервер астериск, в free pbx прописаны маршруты. Есть услуга кал аут, номер типа 8495ххххххх. Я в исходящей маршрутизации сделал маршрут, в котором этот номер 8495ххххххх равен 9. Как итог, на телефоне набираешь 9, вызов, после чего вводишь любой сотовый номер и в конце решетку. Вопрос, как прописать в free pbx маршрут, чтобы можно было набирать на телефоне номер типа 989251234567#. Подскажите пожалуйста.

    • http://vk.com/id3942838 Алексей Варич

      Тоновый донабор номера? Через веб интерфейс насколько мне известно никак. Надо ручками extensions.conf править, ну и знать разумеется что править, меня никогда не интересовало как это делается.

      • https://plus.google.com/105976054095738155380 Владислав Кравцов

        Да. Спасибо. Вот меня интересует) Хотелось бы через веб морду сделать, но никак)

  • http://vk.com/id69125685 Ленуськ@ Фадеева

    Доброго времени суток. Выставляю шаблон (пусто)+пусто| [.]/16 и (пусто)+пусто| [.]/18. И в транках trunk_101, ниже trunk_102. Звонок с 16 проходит по 101 транку, а если в это время звонить с 18, говорит что занят. Не пойму в чем проблема.

    • Алексей

      может быть в 101 транке снята галка Continue if Busy, в этом случае при переборе транков если 101 занят дальше перебора транков не будет.
      ну и ещё может быть что 102 просто не работает или в нём маска есть которая не позволяет звонок совершить

      • http://vk.com/id69125685 Ленуськ@ Фадеева

        Большое спасибо, проблема была в галке)как я ее сразу не заметила)

  • https://plus.google.com/103998205477756915542 Ярослав Хмельницкий

    Огромное человеческое спасибо. Наконец то я понял как работают эти шаблоны.

  • http://facebook.com/profile.php?id=100004445045544 Alexey Panov

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

    • http://vk.com/id3942838 Алексей Варич

      скрин транка и маршрута можете показать?

  • http://vk.com/id335576360 Антон Антон

    Для чего нужно поле “CallerID” ?

    • http://vk.com/id3942838 Алексей Варич

      для поиска по CIDу, только в этом случае приставка не учитывается, ни разу не было необходимости это поле использовать.

  • http://vk.com/id15750489 Владимир Лапутин

    Доброго вам времени суток! Есть проблема. Настроил транк, пров выдал мне данные в виде айпишников для подключения, в секции PEER прописал
    type=friend
    qualify=yes
    nat=yes
    host=172.29.254.***
    disallow=all
    allow=ulaw

    где host – IP станции.
    В результате могу звонить на сип телефон (то есть есть входящие с любых) и есть входящие/исходящие внутренние . При попытке позвонить с СИП телефона на любой внешний городской или сотовый номер мне говрят сообщение “all-circuits-busy-now”. В логе астерикса:

    “[2016-06-27 16:51:19] WARNING[3320][C-0000000b]: chan_sip.c:23240 handle_response_invite: Received response: “Forbidden” from ‘;tag=as24cb48f9′
    Scheduling destruction of SIP dialog ’02e7f2bc65a5374f5a3718410f0d3f90@172.29.246.150:5060′ in 6400 ms (Method: INVITE)
    == Everyone is busy/congested at this time (1:0/0/1)
    — Executing [s@macro-dialout-trunk:23] NoOp(“SIP/479413-00000016”, “Dial failed for some reason with DIALSTATUS = CHANUNAVAIL and HANGUPCAUSE = 21”) in new stack
    — Executing [s@macro-dialout-trunk:24] GotoIf(“SIP/479413-00000016”, “0?continue,1:s-CHANUNAVAIL,1”) in new stack
    — Goto (macro-dialout-trunk,s-CHANUNAVAIL,1)
    — Executing [s-CHANUNAVAIL@macro-dialout-trunk:1] Set(“SIP/479413-00000016”, “RC=21”) in new stack
    — Executing [s-CHANUNAVAIL@macro-dialout-trunk:2] Goto(“SIP/479413-00000016”, “21,1”) in new stack

    где 172.29.246.150 – ИП выданный провом (ИП клиента, то есть на моей сетевой карте он указан)
    479413 – номер с которого звоню,
    272009 – номер НА который звоню

    • http://vk.com/id15750489 Владимир Лапутин

      причем пров говорит что нужно копать настройки еластикса

    • http://vk.com/id3942838 Алексей Варич

      а Вы уверены что Ваш провайдер вообще пропускает звонки на 7 значные номера?

      • http://vk.com/id15750489 Владимир Лапутин

        дык номер то 6-ти значный! плюс код города (4212) и 7-ку. кстати в шаблоне я и указал (74212) – препенд и ХХХХХХ в номере

        • http://vk.com/id3942838 Алексей Варич

          я в логе не вижу куда вообще астериск пытается дозвонится.
          должна быть строка номер_телефона/название_транка

          • http://vk.com/id15750489 Владимир Лапутин

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

          • http://vk.com/id3942838 Алексей Варич

            403 ошибка обычно связана или с номером или с другим запретом от провайдера. Микротики я не слышал и сам не сталкивался, что бы как-то влияли на работу sip.

          • http://vk.com/id15750489 Владимир Лапутин

            Все, разобрались! Просто CID надобыло прописать в настройках экстеншена как 4212ХХХХХХ, у меня просто бл номер 6-ти значный. А пров хоть бы слово сказал, когда я в техподдержку звонил! И спасибо Вам за замечательную статью про шаблоны!

          • http://vk.com/id15750489 Владимир Лапутин

            Спасибо Вам, что отвечаете

      • http://vk.com/id15750489 Владимир Лапутин

        а еще. до указания шаблона он просто говорил, что невозможен вызов. может действительно с шаблоном поработать???

  • http://vk.com/id15750489 Владимир Лапутин

    Здравсвуйте еще раз! Тут теперь возник вопрос такого плана:
    У нас провайдер выделил один транк на 5 каналов, мы можем звонить за городские по Хабаровскому краю и на любые сотовые. Чтобы позвонить на межгород, нужно вместо восьмерки набрать 1908, и все бы хорошо, но чтобы позвонить на сотовый за пределами Хабаровского края 1908 не нужна, т.к. буде дорого. Подскажите, как поступить с шаблонами?

    Я сделал в Исходящих маршрутах так – префикс 8, препенд 1908, номер 8[1-8]XXXXXXXXX. но астер говрит мол ошибка в номере….

    • http://vk.com/id15750489 Владимир Лапутин

      И ГЛАВНОЕ, ЕСЛИВ ШАБЛОНЕ ПРОПИСАТЬ ПРЕПЕНД 1908 И НОМЕР [1-8]XXXXXXXXX то все работает! А с 8-кой не хочет

      • http://vk.com/id3942838 Алексей Варич

        ну так правильно, префикс же 8 убирается 1908 добавляется, ещё одна 8ка в шаблоне – лишняя.
        если хотите сделать что бы на мобильники местные без 1908 звонил астер, добавьте шаблон местных мобильников выше правила или расскажите работникам что мол если с 8кой звонок не прошёл набери 1908 ну и ещё один маршрут с 190889XXXXXXXXX добавьте.

        • http://vk.com/id15750489 Владимир Лапутин

          ок, спасибо! теперь выявилась проблема еще одна. в шаблона в маршруте прописываю: номер 4212ХХХХХХ и префикс 4212 (то есть если человек набирает 4212270009 например, то астер должен откинуть 4212 (код Хабаровска – с ним не работает набор) и оставить просто городской номер, но не срабатывает. что тут не так?

          • http://vk.com/id3942838 Алексей Варич

            Вы по каждому номеру такой вопрос задавать будете?
            набирает у вас человек номер 4212270009, а Вы астериску говорите ждать номера 42124212ХХХХХХ

          • http://vk.com/id15750489 Владимир Лапутин

            нет, просто очень хочу разобраться почему не работает! Вы извините что достаю, просто не понимаю, но хочу понять! А почему 42124212ХХХХХХ? Я же в префиксе указал 4212, то есть он должен отсечь код города и оставить просто 6-ти значный номер? о а я же прикреплял к прошлому коменту картинку, чет ее нет…

          • http://vk.com/id3942838 Алексей Варич

            вы у меня в примере с 9кой в match pattern где-то 9ку видите?

          • http://vk.com/id15750489 Владимир Лапутин

            Вот я чайник! Спасибо, что ткнули носом! Совсем чет от жары мозги расплавились

          • http://vk.com/id3942838 Алексей Варич

            я рад что удалось разобраться )

  • Евгений Бусыгин

    Статья супер. Автору спасибо.

  • Виталий

    Вопрос по правилам исходящей маршрутизации с распределением групп абонентов и переадресацией на мобильные.

    Есть группа А (101-109) и Б (201-209) внутренних абонентов , каждая группа должна звонить из своих танков. В правилах исходящей маршрутизации прописан CallerID для каждой группы свои правила, для 10[1-9] транк группы А, и отдельное правило для группы Б с указанием CallerID 20[1-9] и свой танк для исходящих звонков.
    Всё работает,НО!
    Настроена переадресация на мобильные через группы вызовов.
    Вот она и не работает, какой Caller ID нужно задать, что для каждой группы работала пеоеадресация на мобильные?
    Для абонентов А настроена группа вызовов 610,611,612. А для абонентов Б – 710,711,712. Если подставлять их, то всё равно не работает.

    • http://vk.com/id3942838 Алексей Варич

      для такого распределения я customcontext использую, даже не знал что можно по cid что то выбирать.

      • Виталий

        Я только что решил задачу через префиксы, добавил в группе вызовов префикс к номеру менеджера и в исхолящей маршрутизации.Заработало, не знаю на сколько это правильно.
        А как решается по вашему варианту? Можете подробнее описать?

  • Стрим на коленке

    Я добавляю 95 маршрут перед 94, и 94 отваливается…Есть ли у астериска предел в кол-ве исходящих маршрутов?

    • Алексей

      не слышал.
      может просто маска перекрывает маршрут? хотя и не могу представить для чего может понадобится такое количество маршрутов.

      • Стрим на коленке

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

  • http://vk.com/id499042 Сергей Цыбанев

    Всем привет!
    Кто нибудь знает как в Freepbx Disto делать паузу в наборе.
    Пример: 9XXXXXXXwwwXXXX. Когда я пишу правило набора в Freepbx они стираються. Я так понимаю что нужно прописывать в extensions_custom.conf ?

  • http://vk.com/id279229294 Сергей Легков

    Подскажите как Elastix настроить предиктивный набор.
    Нужно чтобы во время 1го исходящего вызова ,он во время разговора набирал следующий номер

    • http://vk.com/id3942838 Алексей Варич

      что бы оператор не простаивал что-ли? сомневаюсь что есть готовое, тем более бесплатное решение.

      • http://vk.com/id279229294 Сергей Легков

        Да,долго всё набирается.Особенно если база не самая хорошая