Автозамена номеров телефонов

Есть много способов записать один и тот же номер телефона. 81234567890, +71234567890, 1234567890, 8 (123) 456-78-90 - только несколько очевидных примеров для российских номеров, а если Вам звонят иностранные клиенты со всего мира, то количество вариантов возрастает многократно. Для человека между этими вариантами нет большой разницы - все сработают если набрать, сравнить два формата и понять что номер один и тот же очень легко. Но для программ это совершенно разные номера. Например, если контакт в CRM сохранён с номером на +7, а в поиске ввести с 8, то контакт может не найтись.

Для решения таких проблем раньше использовалось только форматирование номеров в кастомизациях, поэтому в новых версиях Itgrix bx 3.7.0 и Itgrix amo 2.10.0 мы добавляем функцию автозамены, позволяющую настраивать форматирование номеров регулярными выражениями (regexp) в интерфейсе настройки модуля (в админке).

  1. Автозамена модифицирует номера клиентов и/или пользователей, совпадающие с шаблонами, при помощи подстановки замен. Шаблонов может быть несколько.

  2. Операции автозамены выполняются перед отправкой запросов в CRM для входящих звонков, поэтому автозамена влияет на создание/поиск сущностей и задач и поиск пользователей.

  3. Для каждого номера замена выполняется по всему списку шаблонов последовательно. Это значит что порядок шаблонов важен, потому что выполнение первой замены может обеспечить или предотвратить совпадение номера с последующими шаблонами.

Регулярные выражения

Для описания правил автозамены используется язык регулярных выражений (regexp), так же как и в кастомизациях. Это общепринятый способ поиска и замены текста.

Для того чтобы создавать и тестировать регулярные выражения, мы предлагаем воспользоваться онлайн инструментами, такими как regex101.com (в меню слева нужно выбрать вариант Golang и ниже для проверки замены - Substitution).

Краткий список полезных элементов шаблонов

Символы

  • ^ - начало строки

  • $ - конец строки

  • . - любой символ

  • \d - цифра

  • \D - не цифра

  • \w - цифра или буква

  • \W - не цифра и не буква

  • \s - пробел (включая необычные варианты вроде неразрывных пробелов)

  • \S - не пробел

  • [ab\s0-5] - один из символов: a, b, пробел, цифра от 0 до 5

  • abc 123 - буквально строка "abc 123", может быть частью большей строки

  • abc|123 - строка "abc" или строка "123", может быть частью большей строки

  • ^abc 123$ - строка "abc 123" от начала до конца без других символов до и после

  • \(, \), \[, \], \{, \}, \+, \?, \*, \., \|, \\ - буквальное представление символов, которые без \ имеют особый смысл

Повторения

Сразу после символа (или группы символов) можно указать сколько раз подряд он может присутствовать.

  • ? - 0 или 1 раз

  • + - 1 и более раз

  • * - любое количество раз

  • {5} - 5 раз

  • {5,10} - от 5 до 10 раз

  • {,10} - от 0 до 10 раз

  • {5,} - от 5 и более раз

Например, \d{10} означает "10 цифр", \+? означает "0 или 1 знак +", а 0+ - один и более нулей.

Группы, замена

Символы можно объединять в группы с помощью скобок. Это полезно при описании повторения нескольких символов, например (10){3} означает "101010". Текст групп можно использовать при замене при помощи подстановки вида $N, где N - порядковый номер группы. Например, при замене шаблона 8(\d{6})(\d{4}) подстановка $1 будет означать содержимое группы (\d{6}), то есть первые 6 цифр после "8", а подстановка $2 будет означать содержимое группы (\d{4}), то есть последующие 4 цифры.

Примеры автозамены номеров клиентов

ШаблонЗаменаОписание

^\+?7(\d{10})$

8$1

Заменяет префиксы +7 и 7 в начале номера, состоящего из префикса и 10 цифр, на 8, например +7495123456784951234567 и 7495123456784951234567 Этот шаблон включен по умолчанию

^\+7

8

Заменяет +7 в начале любого номера на 8, например +712345671234567812345671234567

.*(\d{10})$

8$1

Заменяет номер, имеющий в конце 10 цифр, на 8 и эти 10 цифр, например 007123456789081234567890

^(\d{7})$

8495$1

Добавляет к 7-значному номеру префикс 8495, например 123456784951234567

\D

(пустая строка)

Удаляет все символы кроме цифр, например +7 (495) 123-45-6774951234567

[\s()-]

(пустая строка)

Удаляет все символы пробелов, скобок и дефисов, например +7 (495) 123-45-67+74951234567

^(.*)(\d{3})(\d{3})(\d{2})(\d{2})$

$1 ($2) $3-$4-$5

Форматирует номер в виде x (xxx) xxx-xx-xx, например +74951234567+7 (495) 123-45-67

^0\d{2}(\d+)$

8$1

Заменяет номер вида "ноль, две цифры, ещё цифры" на 8 и цифры в конце номера, например 077123456789012381234567890123

1234567$

7654321

Заменяет 1234567 в конце номера на 7654321, например 8495123456784957654321

^84951234567$

84957654321

Заменяет буквально номер 84951234567 на 84957654321

Примеры автозамены номеров пользователей

ШаблонЗаменаОписание

.*(\d{4}$)

$1

Удаляет из номера всё кроме последних 4 цифр, например +712345643214321

^8123456(\d{4})$

$1

Удаляет из номера префикс 8123456, оставляя последние 4 цифры, например 8495765432143214321

.*123456(\d{4})$

$1

Удаляет из номера, заканчивающегося на 123456 и ещё 4 цифры, всё кроме последних 4 цифр, например +712345643214321

^1(\d{3})$

2$1

Заменяет первую цифру 1 в 4-значном номере на 2, например 12342234

^1234$

4321

Заменяет буквально номер 1234 на 4321

Last updated