Просмотр Исходного

!voip_phone_numbers_parser.png|border=0,width=800!

Для расчета стоимости и поиска абонентов по номеру в биллинге мы стараемся держать все номера в едином формате, по рекомендациям e.164, например: 74951122334

С оборудования номера могут приходить в различном формате, например: 84951122334, 4951122334, 1122334, \+74951122334 и других, необходимо знать в каком формате может прийти номер с вашей АТС и создать соответствующее правило ковертации.

Правила конвертации создаются для каждой АТС отдельно (т.е если у вас разные коды на разных атс - будет достаточно просто их проставлять). Для просмотра и редактирования правил нужно зайти в Оборудование \-> VOIP \-> имя вашей АТС \-> VOIP_CONVERSION_RULE

Поля записей:

* Имя - ваш комментарий, для чего вообще делается данное преобразование
* Порядок выполнения правил - задает порядок выполнения правил (важно учитывать, что если номер был изменен предыдущим правилом - в следующее он придет уже в новом формате, об этом позже)
* Regexp шаблон для номера - регулярное выражение для номера (применяется как для входящего, так и для исходящего номера по порядку). Советуем ставить якоря ^ в начале и $ в конце, чтобы четко задавать длину номера. Скобками можете указать часть номера, которую нужно сохранить. Если данное поле не будет совпадать с номером - правило не применяется
* Regexp шаблон для замены номера - трансформация номера. Значение \1 - заменится символами из первых скобок п.3
Следует сразу отметить, что для трансформации используется функция sub модуля re языка python. [https://docs.python.org/2/library/re.html#re.sub] Первым параметром идет п.3, вторым п.4, а третьим - номер.
* Regexp шаблон для поля ama-flags, Regexp шаблон для номера звонящего, Regexp шаблон для номера назначения - регулярные выражения, проверяющие поля у записи звонка. Если они не совпадут - правило не применяется. Пустое значение - результат будет всегда истинным, для проверки на пустоту нужно использовать \^$

Правила применяются по очереди, отсортированной по приоритету (меньше - раньше). По шагам: берется первое правило, применяется для dst (номером телефона является номер назначения звонка), потом применяется для src (номер звонящего), далее берется следующее правило. Если п.3 или п.5 не подходят к звонку - правило пропускается.

{note}При сохранении просит выбрать NAS - выбираем любой, в результате проставится правильный{note}

h2. Примеры

h3. Используются различные кода выхода на линию для абонентов из разных пулов номеров
Используются два кода выхода на линию - "8" и "9". "8" используют абоненты из пула номеров с префиксом 888, а 9 с 999, номера семизначные:
{code}
правило1:

п.2 = 1

п.3 = ^(\d{7})$

п.4 = 7999\1

п.5(ama-flags) = 9 (на оборудовании avaya в поле ama-flags записывается номер)


правило 2:

п.2 = 2


п.3 = ^(\d{7})$

п.4 = 7888\1

п.5(ama-flags) = 8

{code}

h3. Приходят номера с 8 или вообще без кода страны
{code}
правило 1 (для замены 8 на 7):

п.2 = 1

п.3 = ^8(\d{10})$

п.4 = 7\1

правило 2 (проставляем 7):

п.2 = 2


п.3 = ^(\d{10})$

п.4 = 7\1
{code}

h3. Аналогично первому примеру, но для кода 8 есть несколько определенных пулов
Аналогично первому примеру, но для кода 8 есть несколько определенных пулов, у которых код города не 888, а 887 (это номера 7887300хххх и 7887400хххх, приходят без кода города):
{code}
правило1:

п.2 = 1

п.3 = ^(\d{7})$

п.4 = 7999\1

п.5(ama-flags) = 9 (на оборудовании avaya в поле ama-flags записывается номер)

правило 2:

п.2 = 2

п.3 = ^([34]00\d{4})$

п.4 = 7887\1

п.5(ama-flags) = 8

правило 3:

п.2 = 2

п.3 = ^(\d{7})$

п.4 = 7888\1

п.5(ama-flags) = 8
{code}

h3. Преобразование номеров без кода города
Все предыдущие правила отработали, но остались номера без кода города, поступаем так: если один номер идет с кодом, другой без, то назначаем аналогичный код.
{code}
правило1 (если номер 7мизначный, а в src номер с кодом).

п.2 = 10


п.3 = ^(\d{7})$

п.4 = 7999\1

п.5(src) = ^7999\d{7}

правило2 (если номер 7мизначный, а в dst номер с кодом).

п.2 = 11

п.3 = ^(\d{7})$

п.4 = 7999\1

п.5(dst) = ^7999\d{7}

правило3 (аналогично для восьмерок).

п.2 = 12

п.3 = ^(\d{7})$

п.4 = 7888\1

п.5(src) = ^7888\d{7}

правило4.

п.2 = 13

п.3 = ^(\d{7})$

п.4 = 7888\1

п.5(dst) = ^7888\d{7}
{code}