... Для расчета стоимости и поиска абонентов по номеру в биллинге мы стараемся держать все номера в едином формате, по рекомендациям e.164, например: 74951122334 С оборудования номера могут приходить в различном формате, например: 84951122334, 4951122334, 1122334, \+74951122334 и других, необходимо знать в каком формате может прийти номер с вашей АТС и создать соответствующее правило ковертации. Правила конвертации создаются для каждой АТС отдельно (т.е если у вас разные коды на разных атс - будет достаточно просто их проставлять). Для просмотра и редактирования правил нужно зайти в Оборудование \-> VOIP \-> имя вашей АТС \-> VOIP_CONVERSION_RULE Поля записей: 1. Имя - ваш комментарий, для чего вообще делается данное преобразование 2. Порядок выполнения правил - задает порядок выполнения правил (важно учитывать, что если номер был изменен предыдущим правилом - в следующее он придет уже в новом формате, об этом позже) 3. Regexp шаблон для номера - регулярное выражение для номера (применяется как для входящего, так и для исходящего номера по порядку). Советуем ставить якоря ^ в начале и $ в конце, чтобы четко задавать длину номера. Скобками можете указать часть номера, которую нужно сохранить. Если данное поле не будет совпадать с номером - правило не применяется 4. Regexp шаблон для замены номера - трансформация номера. Значение \1 - заменится символами из первых скобок п.3 Следует сразу отметить, что для трансформации используется функция sub модуля re языка python. [https://docs.python.org/2/library/re.html#re.sub] Первым параметром идет п.3, вторым п.4, а третьим - номер. 5. Regexp шаблон для поля ama-flags, Regexp шаблон для номера звонящего, Regexp шаблон для номера назначения - регулярные выражения, проверяющие поля у записи звонка. Если они не совпадут - правило не применяется. Пустое значение - результат будет всегда истинным, для проверки на пустоту нужно использовать \^$ Правила применяются по очереди, отсортированной по приоритету (меньше - раньше). По шагам: берется первое правило, применяется для dst (номером телефона является номер назначения звонка), потом применяется для src (номер звонящего), далее берется следующее правило. Если п.3 или п.5 не подходят к звонку - правило пропускается. Примеры: 1. У нас есть код выхода на линию 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} 2. Приходят номера с 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} 3. аналогично первому примеру, только для кода 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} 4. Все предыдущие правила отработали, но остались номера без кода города, поступаем так: если один номер идет с кодом, другой без, то назначаем аналогичный код. {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}
|