Манипуляция номерами нужна в практически любой телефонной станции имеющей подключение к внешнему миру.
В данной статье мы рассмотрим возможности по манипулированию номерами у маршрутизаторов Cisco с CUCME или у маршрутизаторов выполняющих функцию голосового шлюза.
Самый простой пример необходимости использования шаблона - это сделать выход в город через 9-ку, т.е. все номера, начинающиеся с 9-ки нужно отправлять на городской шлюз.
Рассмотрим какие шаблоны можно использовать:
Шаблон (Wildcard) | Описание |
Period (.) | Точка соответствует любому набранному символу 0 - 9, например 30.. соответствует любым номерам начиная от 3000 до 3099 |
Plus (+) | Соответствует одному и более повторению предыдущего символа, например: 6+345 соответствует 66345, 666345, 6666345 и т.д. до общейдниы не более 32 символов. |
Brackets ([]) | Квадратными скобками можно задать диапазон, например [1-3]47 соответствует 147, 247, 347. |
T | Соответствует любому последующему символу и любому их количеству (от 0 до 32 символов) |
Comma (,) | Добавление запятой добавляет паузу в 1 секунду между набираемыми цифрами. |
Примеры использования квадратных скобок
333[1-3]... | Соответствует набираемым номерам, начинающимся с 333, имеющим 1 или 2 или 3 как четвертую цифру и и заканчивается любыми тремя цифрами |
[14-6]444 | Соответствует набираемым номерам, где первая цифра 1, 4, 5, 6 и последние три цифры 444 |
11[56]12 | Соответствует набираемым номерам, где первые две цифры 11, третья цифра 5 или 6 и последние две цифры 12 |
[^1-7]..[135] | Соответствует набираемым номерам, первая цифра не является 1-7, вторая и третья цифры - любые, последняя цифра 1 или 3 или 5 |
Выход в город обеспечивается несколькими шаблонами, их еще называют PSTN Dial Plan.
С первого взгляда выход в город можно сделать простым шаблоном 9T. Проблема тут в том, что шаблон T соответствует номеру длиной до 32 символов. Поэтому после набора к примеру 7-ми значного московского номера, система будет ждать дальнейших цифр в течение 10 секунд (T302 timer) и только после этого отдаст номер на PSTN.
Поэтому на практике стараются явно обозначить длину ожидаемого номера.
Пример PSTN Dial Plan для выхода в город в Москве
9....... | Выход в город |
98.......... | Выход в межгород и на мобильные |
9810T | Выход на международную связь |
В виде диалпиров это будет выглядеть следующим образом:dial-peer voice 910 pots
description Local Calls
preference 4
destination-pattern 9.......
port 1/0/8
dial-peer voice 808 pots
description National Calls
preference 2
destination-pattern 98..........
port 1/0/8
forward-digits 11
dial-peer voice 809 pots
description International Calls
preference 2
destination-pattern 98011T
port 1/0/8
prefix 8011
Вообще, следует отметить, что бывают диалпиры двух типов:
У pots есть свойство автоматически "откусывать" явно заданные цифры из шаблона. Поэтому в 910-м диалпире 9-ка будет откусана автоматом.
С остальными двумя диалпирами есть проблема, т.к. в 808-м нам нужно сохранить 8-ку, а в 809-м нужно сохранить 8011.
Здесь нам помогут следующие две команды:
forward-digits
Таким образом, в 808-м диалпире, если считать справа, попадет 8.......... и от общего номера откусится только 9-ка.
prefix
Это очень полезно для 809-ого диалпира. Там используется международные номера и в конце указана T, т.е. номер допускается переменной длины, в результате чего команда forward-digits в данном случае бесполезна.
Что происходит при использовании prefix 8011: от номера система откусывает явно указанные цифры 98011, но затем мы слева добавляем 8011 и отдаем получившийся номер в город.
Для более тонких преобразований можно использовать Translation Profiles. Более того, с помощью них можно сделть все что делается через forward-digits или prefix.
Создание Translation Profiles включает три этапа:
Синтаксис Translation Rule:
Router(config)# voice translation-rule rule number
Router(cfg-translation-rule)# rule 1 /match/ /set/
Router(cfg-translation-rule)# rule 2 /match/ /set/
Router(cfg-translation-rule)# rule 3 /match/ /set/ ...и т.д.
Мы можем предварительно тестировать Translation Rule командой:
test voice translation-rule
Задача:
- У всех номеров called убрать девятку.
- Все номера calling должны быть заменены на 3467361869
Определяем Translation Rulevoice translation-rule 9
rule 1 /^9/ //
voice translation-rule 361869
rule 1 /.*/ /3467361869/
Ассоциируем Translation Rule с translation profilevoice translation-profile kmg-pbx
translate calling 361869
translate called 9
Добавляем translation profile к dial-peerdial-peer voice 361869 voip
corlist outgoing call-pbx
description kmg -- UgrTel PBX-style calls
translation-profile outgoing kmg-pbx
preference 3
destination-pattern 9T
session protocol sipv2
session target sip-server
voice-class codec 1
voice-class sip dtmf-relay force rtp-nte
dtmf-relay rtp-nte
no vad
Задача:
- Замена called вида [1-5].. на 70[1-5]..
Задачу можно легко сделать используя prefix, посмотрим как добиться того же через Translation Rulevoice translation-rule 333
rule 1 /\([1-5]..\)/ /70\1/
!
voice translation-profile short_calls
translate called 333
!
dial-peer voice 3001 voip
description Short calls
translation-profile outgoing short_calls
destination-pattern [1-5]..
session target ipv4:172.16.2.11
dtmf-relay h245-alphanumeric
codec g711ulaw
no vad
Задача:
- Заменить все номера вида 9839162..... на номера 9.....
Пожалуй подобную задачу можно выполнить только через Translation Rulevoice translation-rule 9839162
rule 1 /^9839162\(.....\)/ /9\1/
!
voice translation-profile national_code_strip
translate called 9839162
!
dial-peer voice 4108 pots
description Local calls from Filials
translation-profile outgoing national_code_strip
preference 3
destination-pattern 9839162.....
port 1/0/12
Примеров можно много найти на:
http://www.cisco.com/en/US/tech/tk652/tk90/technologies_tech_note09186a0...
Как итог - по возможности не следует усложнять конфигурацию, Translation Rule очень мощный инструмент, но даже собственные шаблоны через некоторое время воспринимаются с трудом.
Комментарии
"333[1-3]... Соответствует
"333[1-3]... Соответствует набираемым номерам, начинающимся с 555" - у Вас опечатка.
Исправил, спасибо!
Исправил, спасибо!
в dial-peer voice 809 pots
в dial-peer voice 809 pots исправь destination-pattern 98011T и prefix 8011 тут должно быть 9810Т и 810
Если я звоню по на номер
Если я звоню по на номер 9801112345 или на номер 981234567 (кол-во цифр не важно в данном примере), то я буду по падать всегда в dial-peer 808. Потому что destination-pattern 98.......... будет рассматриваться выше чем 98011Т. Все что с "Т" всегда имеет наименьший приоритет!
Подскажите, пожалуйста,
Подскажите, пожалуйста, обязательно ли ставить знак $ в конце 98.......... если хотим, чтобы правило сработало только когда количество точек полностью соответствует указанному (и не меньше). Нужно ли ставить в начале перед девяткой знак ^, чтобы указать что набор номера точно начинается с 9?
В принципе необязательно.
В принципе необязательно. Цифры и точки задают и так задают начало и конец однозначно
Лучше применять символы ^ и $
Лучше применять символы ^ и $ для начала и конца номера. Правила трансляции ищут совпадение заданной последовательности и неважно где она находится - в начале, в конце или в середине номера. Так что лучше жестко задавать длину транслируемого номера.
Добавить комментарий