Автозамена номеров телефонов
Есть много способов записать один и тот же номер телефона. 81234567890, +71234567890, 1234567890, 8 (123) 456-78-90 - только несколько очевидных примеров для российских номеров, а если Вам звонят иностранные клиенты со всего мира, то количество вариантов возрастает многократно. Для человека между этими вариантами нет большой разницы - все сработают если набрать, сравнить два формата и понять что номер один и тот же очень легко. Но для программ это совершенно разные номера. Например, если контакт в CRM сохранён с номером на +7, а в поиске ввести с 8, то контакт может не найтись.
Для решения таких проблем раньше использовалось только форматирование номеров в кастомизациях, поэтому в новых версиях Itgrix bx 3.7.0 и Itgrix amo 2.10.0 мы добавляем функцию автозамены, позволяющую настраивать форматирование номеров регулярными выражениями (regexp) в интерфейсе настройки модуля (в админке).
  1. 1.
    Автозамена модифицирует номера клиентов и/или пользователей, совпадающие с шаблонами, при помощи подстановки замен. Шаблонов может быть несколько.
  2. 2.
    Операции автозамены выполняются перед отправкой запросов в CRM для входящих звонков, поэтому автозамена влияет на создание/поиск сущностей и задач и поиск пользователей.
  3. 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