# Звонок через определенного провайдера

{% hint style="info" %}
Для простой реализации рекомендуется использовать модуль "[Управление телефонными группами](/mikopbx/modules/miko/module-users-groups.md)". Способ из данной статьи предназначен для более тонкой настройки.
{% endhint %}

## Постановка задачи <a href="#postanovka_zadachi" id="postanovka_zadachi"></a>

В MikoPBX (***Телефония → Сотрудники***) настроены следующие учетные записи сотрудников:

<figure><img src="/files/UNQjnwyeiOD3C3FHTP8M" alt=""><figcaption><p>Раздел "Сотрудники"</p></figcaption></figure>

В MikoPBX настроены **два провайдера** (***Маршрутизация → Провайдеры телефонии***):

<figure><img src="/files/5Uz0GmJlLNNq0hAV0LYH" alt=""><figcaption><p>Настроенные провайдеры</p></figcaption></figure>

Необходимо, чтобы:

1. телефон, подключенный к учетной записи **201** звонил только через **первого провайдера** **РТ**
2. телефон, подключенный к учетной записи **202** звонил только через **второго провайдера** **Задарма(Novofon)**.

Звонки во внешний мир (в город) через обоих провайдеров реализуются по **одинаковому исходящему правилу**: это десятизначный номер, начинающийся с 7. Схематично задачу можно изобразить следующим образом:

<figure><img src="/files/L2g8MrYIepLhGhWI0zzM" alt=""><figcaption><p>Схема поставленной задачи</p></figcaption></figure>

## Решение <a href="#reshenie" id="reshenie"></a>

Направить звонки по определенному провайдеру можно, используя **префиксы исходящих шаблонов**.

* Звонки всегда будут идти через **первого провайдера**, если перед исходящим номером всегда добавлять **1**. Следовательно, если **201** абонент будет набирать исходящие номера с **префиксом 1**, то вызовы пойдут через первого провайдера.
* Звонки всегда будут идти через **второго провайдера**, если перед исходящим номером всегда добавлять **2**. Следовательно, если **202** абонент будет набирать исходящие номера с **префиксом 2**, то вызовы пойдут через второго провайдера.

Схематично это можно изобразить следующим образом:<br>

<figure><img src="/files/7vrxBe3vF34baASsyH0M" alt=""><figcaption><p>Схема решения задачи</p></figcaption></figure>

Реализовать эту задачу можно двумя способами в MikoPBX:

1. Абоненты 201 и 202 всегда на телефоне будут добавлять определенные префиксы перед набираемым номером, т.е. если они хотят позвонить на номер 74952293042, они перед этим номером добавляют префикс 1 или 2, например 174952293042
2. Абоненты 201 и 202 **не набирают** специальные префиксы, за них это действие выполняет сама АТС.

### Первый способ <a href="#pervyj_sposob" id="pervyj_sposob"></a>

Первый способ реализации поставленной нами задачи предполагает, что абоненты 201 и 202 самостоятельно будут на телефоне набирать соответствующие префиксы перед набираемым номером. 201 абонент всегда перед номером будет добавлять 1, а 202 абонент - 2.

1. Для **первого** провайдера создаем исходящее правило. Переходим в раздел **Маршрутизация** → **Исходящие маршруты**. Добавляем новое правило

<figure><img src="/files/JkM8T3wQnasyDQYKQikH" alt=""><figcaption><p>Создание нового правила в разделе "Исходящие маршруты"</p></figcaption></figure>

2. Заполняем параметры как на скриншоте ниже:

<figure><img src="/files/XunuKUkVqKfXLlDh2W3k" alt=""><figcaption><p>Параметры маршрутизации для первого провайдера</p></figcaption></figure>

3. Для **второго** провайдера Zadarma создаем исходящее правило. Переходим в раздел **Маршрутизация** → **Исходящие маршруты**. Добавляем новое правило как на скриншоте ниже:

<figure><img src="/files/BDphdNY3euSvgqsnk7i2" alt=""><figcaption><p>Параметры маршрутизации для второго провайдера</p></figcaption></figure>

### Второй способ

Второй способ реализации поставленной нами задачи предполагает, что абоненты 201 и 202 **НЕ будут** на телефоне набирать соответствующие префиксы перед набираемым номером. За них это будет делать сама АТС!\
\
1\. Добавляем **исходящие правила** для первого и второго провайдера Zadarma, как описано в [первом способе](#pervyj_sposob). Настройки все идентичны.\
\
2\. В разделе **Маршрутизация** → **Провайдеры телефонии** добавьте третью учетную запись провайдера

<figure><img src="/files/6Fx1mdaNAbFTJequFUMP" alt=""><figcaption><p>Создание новой учетной записи провайдера</p></figcaption></figure>

3. Заполняем параметры как на скриншоте ниже:

<figure><img src="/files/p4xgDcGzmb8hDHy4QVZq" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/1YpZk9JO1zbF33GaAu8H" alt=""><figcaption><p>Параметры Router</p></figcaption></figure>

4. Сохраните учетную запись и в адресной строке скопируйте ID данного провайдера.

<figure><img src="/files/IEOG66kwQL0OkAlltCRv" alt=""><figcaption><p>ID провайдера в адресной строке</p></figcaption></figure>

5. Добавьте **исходящее правило** для созданного провайдера. Все звонки по умолчанию мы будем направлять через данного провайдера, поэтому будьте внимательны при создании исходящего шаблона. Звонки через наших провайдеров можно осуществлять на номера, начинающиеся с 7, поэтому наш шаблон принимает вид:

<figure><img src="/files/5R8yyD8BaivjQRBXdbhQ" alt=""><figcaption><p>Параметры маршрутизации для Router</p></figcaption></figure>

6. Обратите внимание, **приоритет** исходящего правила для провайдера **Router** должен быть ниже всех!

<figure><img src="/files/QDuAxH9r0uTPhbwv293H" alt=""><figcaption><p>Приоритеты исходящей маршрутизации</p></figcaption></figure>

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

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

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

<figure><img src="/files/pixGHngqiaLmVR379dHU" alt=""><figcaption><p>Файл Extensions.conf</p></figcaption></figure>

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

```php
[globals](+)
MIKO_PREFIX_NUMBER_201=1; Префикс для внутреннего номера 201
MIKO_PREFIX_NUMBER_202=2; Префикс для внутреннего номера 202

[SIP-1690973516-outgoing-custom]
exten => _.!,1,ExecIf($[ "${PREFIX_NUMBER}x" != "x" ]?return)
    same => n,ExecIf($[ "${MIKO_PREFIX_NUMBER}x" == "x" ]?Set(MIKO_PREFIX_NUMBER=${MIKO_PREFIX_NUMBER_${CHANNEL(peername)}}))
    same => n,Set(PREFIX_NUMBER=${MIKO_PREFIX_NUMBER})
    same => n,ExecIf($[ "${MIKO_PREFIX_NUMBER}x" != "x" ]?Goto(outgoing,${MIKO_PREFIX_NUMBER}${EXTEN},4))
    same => n,return
    
[all_peers-custom]
include => internal-custom

[internal-custom]
exten => _.!,1,NoOp(Start custom context)
    same => n,ExecIf($[ "${MIKO_PREFIX_NUMBER}x" == "x" ]?Set(MIKO_PREFIX_NUMBER=${MIKO_PREFIX_NUMBER_${FROM_PEER}}))
    same => n,Return()
```

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

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

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

<figure><img src="/files/7ZdBpWXqjBYrc5cWRb2O" alt=""><figcaption><p>Код для Extensions.conf</p></figcaption></figure>

**Сохраняем** изменения и возвращаемся обратно к списку конфигурационных файлов.

Таким образом для 201 и 202 учетных записей мы задали префиксы. Все исходящие звонки теперь будут проходить через требуемого провайдера.

### Маршрут "По умолчанию" <a href="#marshrut_po_umolchaniju" id="marshrut_po_umolchaniju"></a>

В ряде случаев, при описании входящих маршрутов необходимо направить вызов не на внутренний номер, а на мобильный номер сотрудника. В этом случае необходимо описать «Префикс по умолчанию», иначе могу возникнуть проблемы с обработкой таких вызовов.

При маршрутизации по DID номеру:

```php
[public-direct-dial-custom]
exten => _.!,1,NoOp(Start custom context)
    same => n,Set(__MIKO_PREFIX_NUMBER=2)
    same => n,Return()
```

Для **каждого** провайдера следует также описать контекст:

```php
[ID-ПРОВАЙДЕРА-incoming]
exten => _.!,1,NoOp(Start custom context)
    same => n,Set(__MIKO_PREFIX_NUMBER=2)
    same => n,Return() 
```

На этом настройка завершена!


---

# 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/outbound-routing/a-call-through-a-specific-provider.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.
