Трансляция номеров
Этот перевод выполнен автоматически и ещё не вычитан. Читать английскую версию
Трансляция номеров изменяет номер звонящего (CLI) и набранный номер (CLD) звонка, пока он проходит через коммутатор. Клиенты набирают номера по своим привычкам: с 00, 011, +, в национальном формате или с техническим префиксом. Вендоры тоже хотят получать номера в своём формате. Правила трансляции преобразуют формат клиента в один внутренний формат перед тарификацией и маршрутизацией, а внутренний формат — в формат каждого вендора на выходе. Тогда вашим тарифам и маршрутам терминации нужен только один набор префиксов.
Как это работает
Заголовок раздела «Как это работает»Правило трансляции — это текстовое поле в нескольких объектах. Коммутатор применяет их в фиксированном порядке, и каждый шаг работает с результатом предыдущего.
- Правило аутентификации DID. Звонок, поступающий на DID от вашего DID-провайдера, получает CLI Translation Rule (правило трансляции CLI) соответствующего правила в DID Pool (пул DID).
- Правило аутентификации. Звонок, аутентифицированный по правилу аккаунта, получает CLD Tr. Rule (правило трансляции CLD) этого правила, а затем его CLI Tr. Rule (правило трансляции CLI).
- Правило после аутентификации. Когда у аккаунта есть правило после аутентификации, совпадающее с удалённым IP, CLI или CLD (в уже изменённом виде), применяются его правила для CLI и CLD. Эти правила управляются только через API. См. Правила после аутентификации.
- Аккаунт. CLD Translation Rule (правило трансляции CLD) аккаунта, а затем его CLI Translation Rule. Класс аккаунта может задать оба правила заранее при создании аккаунтов. Для звонка на DID CLD затем заменяется номером DID, изменённым по DID Translation Rule (правило трансляции DID) этого DID, поэтому правило CLD аккаунта на такие звонки не влияет; правило CLI — влияет.
- Внешний скрипт. Если для среды установлен исполняемый файл
external_translator, он получает номера и может изменить их, добавить стоимость или отклонить звонок. См. Переписывание CLI и CLD внешним скриптом.
CLD, получившийся после шага 5, — это номер, по которому коммутатор тарифицирует и маршрутизирует звонок. Затем коммутатор пробует подключения группы маршрутизации одно за другим, и для каждого подключения:
- Подключение (шаг 6 на схеме). CLD Translation Rule и CLI Translation Rule подключения изменяют номера, отправляемые этому вендору. Каждое подключение начинает с тех же внутренних номеров, поэтому правило одного подключения никогда не влияет на следующее.
- Исходящий скрипт (шаг 7). Если установлен исполняемый файл
external_translator_outbound, за ним последнее слово в отношении CLI и CLD, отправляемых вендору.
Ещё несколько правил используют тот же синтаксис для других значений: P-Asserted-Id Translation Rule (правило трансляции P-Asserted-Id) аккаунта и Identity Tr. Rule (правило трансляции идентичности) подключения для заголовков идентичности абонента, Diversion Header Tr. Rule (правило трансляции заголовка Diversion) подключения и LRN Translation Rule (правило трансляции LRN) группы маршрутизации для результата запроса переносимости номеров.
| Объект | Поля | Где их задать |
|---|---|---|
| DID | DID Translation Rule, CLI Translation Rule каждого правила аутентификации | DIDs & IVR Apps → DID Pool. См. Пул DID |
| Правило аутентификации | CLD Tr. Rule, CLI Tr. Rule | Actions → Authentication Rules аккаунта. См. Аккаунты |
| Правило после аутентификации | cli_translation_rule, cld_translation_rule |
XML-RPC API. См. Управление правилами после аутентификации |
| Аккаунт | CLD Translation Rule, CLI Translation Rule | Форма аккаунта. См. Аккаунты |
| Класс аккаунта | CLD Tr. Rule, CLI Tr. Rule | My Customers → Account Classes |
| Подключение | CLD Translation Rule, CLI Translation Rule | Number Translation в форме подключения. См. Подключения |
Синтаксис правил
Заголовок раздела «Синтаксис правил»Правило может быть одним из трёх вариантов:
- Пустое. Номер остаётся без изменений.
- Подстановка, начинающаяся с
s/. Она ищет в номере совпадение с регулярным выражением и заменяет найденное. - Всё остальное — фиксированное значение. Правило
123456заменяет любой номер на123456, каким бы он ни был.
Подстановки
Заголовок раздела «Подстановки»s/<pattern>/<replacement>/s/<pattern>/<replacement>/gБез флага заменяется только первое совпадение; флаг g заменяет все совпадения. Других флагов нет, и правило с другой буквой после последнего / недействительно. Шаблон — это регулярное выражение в синтаксисе Python. Он совпадает в любом месте номера, если вы не привяжете его с помощью ^ (начало) или $ (конец).
| Правило | Номер | Результат |
|---|---|---|
s/^011// |
01138056123456 |
38056123456 |
s/^/+/ |
442079460123 |
+442079460123 |
s/1/x/ |
1213 |
x213 |
s/1/x/g |
1213 |
x2x3 |
Чтобы объединить несколько подстановок в одном правиле, разделите их символом ;. Они выполняются слева направо, каждая с результатом предыдущей. Пробелы вокруг ; и ; в конце игнорируются.
| Правило | Номер | Результат |
|---|---|---|
s/^00//;s/^/+/ |
00442079460123 |
+442079460123 |
s/^44/222/;s/^2222/55/ |
442333222111 |
55333222111 |
Второй пример показывает подвох: 44 становится 222, и новый номер начинается с 2222, поэтому вторая подстановка снова его изменяет. Когда следующая подстановка не должна видеть результат предыдущей, пометьте результат символом, который никогда не встречается в номерах, и уберите пометку в конце. См. Несколько правил последовательно.
Кратко о регулярных выражениях
Заголовок раздела «Кратко о регулярных выражениях»| Элемент | Что совпадает |
|---|---|
^, $ |
Начало и конец номера |
. |
Любой один символ |
\d, \D |
Цифра, не цифра |
[0-5], [+#], [^0] |
Один символ из набора или не из него |
{7}, {8,10}, {,9} |
Ровно 7, от 8 до 10, до 9 предыдущих элементов |
*, +, ? |
Ноль или больше, один или больше, ноль или один |
(…) |
Группа, которую можно повторно использовать в замене |
a|b |
a или b |
(?!…) |
Только если следующий текст не совпадает |
\+, \., \* |
Буквальный +, . или * |
В замене \1–\9 вставляют группы шаблона. Пишите \g<1>, когда за группой следует цифра: \g<1>0000 добавляет четыре нуля, тогда как \10000 означало бы группу 10.
Случайные цифры
Заголовок раздела «Случайные цифры»Замена может содержать ${R:[<characters>]<count>}. Каждый раз, когда правило выполняется, коммутатор вставляет <count> символов, выбранных случайно из списка. Список содержит отдельные символы и диапазоны, разделённые запятыми; значение <count> по умолчанию — 1. Внутри одного макроса несколько списков могут идти друг за другом.
| Правило | Возможный результат |
|---|---|
s/.*/${R:[0-3,6]5}/ |
16020: пять символов из 0, 1, 2, 3, 6 |
s/.*/+17266${R:[0-9]8}/ |
+1726677763170 |
s/$/${R:[1-9]1[0-9]4}/ |
Номер, за которым следует одна цифра от 1 до 9 и четыре от 0 до 9 |
Ограничения
Заголовок раздела «Ограничения»- Символ
/не может появляться в шаблоне или замене, даже экранированный: коммутатор разбивает правило по каждому/. - Правило должно быть действительным для любого номера. Шаблон, который не компилируется, или замена, ссылающаяся на отсутствующую группу, — это ошибка, даже если номер не совпал бы.
Проверка правила
Заголовок раздела «Проверка правила»Панель проверяет синтаксис правила, когда вы сохраняете форму, и не принимает недействительное правило. Чтобы увидеть, что правило делает с определённым номером:
- Вызовите
applyTranslationRuleс правилом и образцом номера. Метод возвращает результат, ничего не изменяя. - Откройте Tools & Debugs → Test Dialplan (проверка плана набора) и смоделируйте звонок. Строка
0в Routing Entries (записи маршрутизации) показывает CLI и CLD после входящих правил аккаунта; каждая строка маршрута показывает их после правил подключения.
Ключевые понятия
Заголовок раздела «Ключевые понятия»- Translation Rule (правило трансляции) — правило на основе регулярного выражения, которое изменяет номер вызываемого или звонящего перед тарификацией или маршрутизацией.
- CLI (номер звонящего) — номер абонента (ANI), передаваемый со звонком.
- Authentication Rule (правило аутентификации) — правило, которое сопоставляет входящие звонки с аккаунтом по удалённому IP, CLI, CLD или домену.
- Connection (подключение) — SIP-шлюз вендора с собственным хостом, аутентификацией и ёмкостью.
Типичные сценарии
Заголовок раздела «Типичные сценарии»Клиенты набирают международные номера по-разному
Заголовок раздела «Клиенты набирают международные номера по-разному»Выберите один внутренний формат, например E.164 без +: 442079460123. Задайте каждому аккаунту или правилу аутентификации правило CLD, которое даёт этот формат: s/^011// для клиента в Северной Америке, s/^00// для клиента в Европе, s/^\+// для АТС, отправляющей +. Тогда ставки и маршруты терминации используют только префиксы вроде 44.
Два вендора хотят один и тот же номер в разных форматах
Заголовок раздела «Два вендора хотят один и тот же номер в разных форматах»Не изменяйте внутренний номер и задайте формат для каждого подключения. Британский оператор, принимающий национальные номера, получает s/^44/0/ (02079460123), международный оператор, которому нужен +, получает s/^/+/ (+442079460123). Звонок, не прошедший на первом подключении, доходит до второго уже во втором формате.
Звонок завершается ошибкой 403 Invalid CLD translation
Заголовок раздела «Звонок завершается ошибкой 403 Invalid CLD translation»Во входящем правиле есть ошибка. Число в скобках подсказывает, где именно: (1) — правило аутентификации, (3) — аккаунт, (6) — правило после аутентификации. То же относится к Invalid CLI translation: (2) — правило аутентификации, (4) — аккаунт, (5) — DID. Недействительное правило подключения не приводит к ошибке звонка; коммутатор пропускает это подключение и пробует следующее. См. Коды ответов SIP.