# Нормализация входящего номера телефона

При подключении к MikoPBX более одного провайдера может сложится ситуация, что номер телефона клиентов поступает в различном формате:

* В 7и значном виде - **2293042**
* Через «+», к пример **+79257184444**
* Через «8», к примеру **89257184444**

Появляется необходимость привести все к одному формату.

1. Перейдите в раздел **Маршрутизация** → **Провайдеры телефонии**. Откройте для редактирования учетную запись провайдера для редактирования. Скопируйте в адресной строке **ID провайдера**, через которого абоненты звонят Вам в компанию. Обращаем Ваше внимание, что в нашем примере используется **единственный** провайдер. Если у Вас настроено подключение **нескольких** провайдеров, то ниже описанные действия необходимо выполнить **для каждого провайдера**.

<figure><img src="/files/IkNO9B5YUj2vz1ZkR81P" alt=""><figcaption><p>Где найти ID провайдера</p></figcaption></figure>

В нашем примере ID провайдера принимает вид: **SIP-1687947415**

2. Перейдите в раздел **Система** → **Кастомизация системных файлов**.

<figure><img src="/files/vijEVOA1rNRbdd8BCwSl" alt=""><figcaption><p>Раздел "Кастомизация системных файлов"</p></figcaption></figure>

3. Откройте для редактирования конфигурационный файл **extensions.conf**.

<figure><img src="/files/VUuCfVqNcFcxZzAVl1oF" alt=""><figcaption><p>Редактирование конфигурационного файла "extensions.conf"</p></figcaption></figure>

4. Выберите режим "**Добавлять в конец файла**". В черное окно добавьте следующий фрагмент кода:

{% code fullWidth="true" %}

```php
[SIP-1687947415-incoming-custom]
exten => _.!,1,NoOp(---)
    ; Отсекаем плюс
    same => n,Set(CALLERID(num)=${REPLACE(CALLERID(num),"+")})
    ; Для 11ти значного номера отсекаем первую цифру и добавляем 7
    same => n,ExecIf($[ ${LEN(${CALLERID(num)})} == 11 ]?Set(CALLERID(num)=7${CALLERID(num):1}))
    ; Для 7ми значного номера добавляем код страны 7 и код города 495
    same => n,ExecIf($[ ${LEN(${CALLERID(num)})} == 7 ]?Set(CALLERID(num)=7495${CALLERID(num)}))
    same => n,return
; Если номер звонящего начинается с 886142 (11 значный), то отрезать код города "886142" 
exten => _.X!/_886142XXXXX,1,Set(CALLERID(num)=${CALLERID(num):5})
    same => n,return
```

{% endcode %}

В выше приведенном фрагменте кода Вам необходимо составить правильное наименование контекста.\
Формат создаваемого контекста:

```php
[ID-ПРОВАЙДЕРА-incoming-custom]
```

* **ID-ПРОВАЙДЕРА** - значение, которое вы сохранили на первом шаге данной инструкции. В нашем примере это **SIP-1687947415.**

<figure><img src="/files/iceg8DW7RI316n9BRPZE" alt=""><figcaption><p>Код для exensions.conf</p></figcaption></figure>

{% hint style="danger" %}
Обращаем Ваше внимание, если у Вас в MikoPBX подключено несколько провайдеров, выше описанный фрагмент кода нужно составить для каждого провайдера, учитывая уникальность ID каждого из провайдеров.
{% endhint %}

Если необходимо добавить нормализацию для всех провайдеров сразу, то достаточно описать контекст «**add-trim-prefix-clid-custom**». Пример, все 10ти значным АОН добавить 7ку:

{% code fullWidth="true" %}

```php
[add-trim-prefix-clid-custom]
exten => _.X!,1,ExecIf($[ ${LEN(${CALLERID(num)})} == 10 ]?Set(CALLERID(num)=7${CALLERID(num)}))
	same => n,return
```

{% endcode %}


---

# 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.mikopbx.com/mikopbx/faq/incoming-routing/normalization-of-incoming-phone-number.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.
