Перейти к содержимому

Трансляция номеров

Этот перевод выполнен автоматически и ещё не вычитан. Читать английскую версию

Трансляция номеров изменяет номер звонящего (CLI) и набранный номер (CLD) звонка, пока он проходит через коммутатор. Клиенты набирают номера по своим привычкам: с 00, 011, +, в национальном формате или с техническим префиксом. Вендоры тоже хотят получать номера в своём формате. Правила трансляции преобразуют формат клиента в один внутренний формат перед тарификацией и маршрутизацией, а внутренний формат — в формат каждого вендора на выходе. Тогда вашим тарифам и маршрутам терминации нужен только один набор префиксов.

Правила трансляции: пять входящих шагов перед тарификацией и маршрутизацией, два исходящих шага для каждого подключения

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

  1. Правило аутентификации DID. Звонок, поступающий на DID от вашего DID-провайдера, получает CLI Translation Rule (правило трансляции CLI) соответствующего правила в DID Pool (пул DID).
  2. Правило аутентификации. Звонок, аутентифицированный по правилу аккаунта, получает CLD Tr. Rule (правило трансляции CLD) этого правила, а затем его CLI Tr. Rule (правило трансляции CLI).
  3. Правило после аутентификации. Когда у аккаунта есть правило после аутентификации, совпадающее с удалённым IP, CLI или CLD (в уже изменённом виде), применяются его правила для CLI и CLD. Эти правила управляются только через API. См. Правила после аутентификации.
  4. Аккаунт. CLD Translation Rule (правило трансляции CLD) аккаунта, а затем его CLI Translation Rule. Класс аккаунта может задать оба правила заранее при создании аккаунтов. Для звонка на DID CLD затем заменяется номером DID, изменённым по DID Translation Rule (правило трансляции DID) этого DID, поэтому правило CLD аккаунта на такие звонки не влияет; правило CLI — влияет.
  5. Внешний скрипт. Если для среды установлен исполняемый файл external_translator, он получает номера и может изменить их, добавить стоимость или отклонить звонок. См. Переписывание CLI и CLD внешним скриптом.

CLD, получившийся после шага 5, — это номер, по которому коммутатор тарифицирует и маршрутизирует звонок. Затем коммутатор пробует подключения группы маршрутизации одно за другим, и для каждого подключения:

  1. Подключение (шаг 6 на схеме). CLD Translation Rule и CLI Translation Rule подключения изменяют номера, отправляемые этому вендору. Каждое подключение начинает с тех же внутренних номеров, поэтому правило одного подключения никогда не влияет на следующее.
  2. Исходящий скрипт (шаг 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.