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

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

Для решения таких проблем раньше использовалось только [форматирование номеров в кастомизациях](/custom_common/client-phone-number.md), поэтому в новых версиях Itgrix bx [3.7.0](https://docs.itgrix.ru/for-admins/pages/-M0SZwZn5pERjpAzqeP-#3.7.0) и Itgrix amo [2.10.0](https://docs.itgrix.ru/for-admins/pages/-MFFgLMt-w7Eq-gUqvP2#2.10.0) мы добавляем функцию автозамены, позволяющую настраивать форматирование номеров регулярными выражениями (regexp) в интерфейсе настройки модуля (в админке).

![](/files/493NMFGpEscKNrPmIr44)

{% hint style="info" %}

1. Автозамена модифицирует номера клиентов и/или пользователей, совпадающие с **шаблонами**, при помощи подстановки **замен**. Шаблонов может быть несколько.
2. Операции автозамены выполняются перед отправкой запросов в CRM для входящих звонков, поэтому автозамена влияет на создание/поиск сущностей и задач и поиск пользователей.
3. Для каждого номера замена выполняется **по всему списку шаблонов последовательно**. Это значит что **порядок шаблонов важен**, потому что выполнение первой замены может обеспечить или предотвратить совпадение номера с последующими шаблонами.
   {% endhint %}

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

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

Для того чтобы создавать и тестировать регулярные выражения, мы предлагаем воспользоваться онлайн инструментами, такими как [regex101.com](https://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`              | <p>Заменяет префиксы <code>+7</code> и <code>7</code> в начале номера, состоящего из префикса и 10 цифр, на <code>8</code>, например <code>+74951234567</code> → <code>84951234567</code> и <code>74951234567</code> → <code>84951234567</code><br><strong>Этот шаблон включен по умолчанию</strong></p> |
| `^\+7`                               | `8`                | Заменяет `+7` в начале любого номера на `8`, например `+712345671234567` → `812345671234567`                                                                                                                                                                                                             |
| `.*(\d{10})$`                        | `8$1`              | Заменяет номер, имеющий в конце 10 цифр, на `8` и эти 10 цифр, например `0071234567890` → `81234567890`                                                                                                                                                                                                  |
| `^(\d{7})$`                          | `8495$1`           | Добавляет к 7-значному номеру префикс `8495`, например `1234567` → `84951234567`                                                                                                                                                                                                                         |
| `\D`                                 | (пустая строка)    | Удаляет все символы кроме цифр, например `+7 (495) 123-45-67` → `74951234567`                                                                                                                                                                                                                            |
| `[\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` и цифры в конце номера, например `0771234567890123` → `81234567890123`                                                                                                                                                                           |
| `1234567$`                           | `7654321`          | Заменяет `1234567` в конце номера на `7654321`, например `84951234567` → `84957654321`                                                                                                                                                                                                                   |
| `^84951234567$`                      | `84957654321`      | Заменяет буквально номер `84951234567` на `84957654321`                                                                                                                                                                                                                                                  |

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

| Шаблон             | Замена | Описание                                                                                                                    |
| ------------------ | ------ | --------------------------------------------------------------------------------------------------------------------------- |
| `.*(\d{4}$)`       | `$1`   | Удаляет из номера всё кроме последних 4 цифр, например `+71234564321` → `4321`                                              |
| `^8123456(\d{4})$` | `$1`   | Удаляет из номера префикс `8123456`, оставляя последние 4 цифры, например `849576543214321` → `4321`                        |
| `.*123456(\d{4})$` | `$1`   | Удаляет из номера, заканчивающегося на `123456` и ещё 4 цифры, всё кроме последних 4 цифр, например `+71234564321` → `4321` |
| `^1(\d{3})$`       | `2$1`  | Заменяет первую цифру `1` в 4-значном номере на `2`, например `1234` → `2234`                                               |
| `^1234$`           | `4321` | Заменяет буквально номер `1234` на `4321`                                                                                   |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.itgrix.ru/for-admins/autoreplacement.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
