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

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

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

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

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FAu633R1xJ0J8qqkyP3ny%2Fextensions.png?alt=media&#x26;token=362e9e62-e910-4bee-b4f8-58d491c8b0cd" alt=""><figcaption><p>Раздел "Сотрудники"</p></figcaption></figure>

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

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FeffSQvKnWCGD8cf8DMmm%2Fproviders.png?alt=media&#x26;token=ba35e470-111b-400d-94c0-474b683f525a" alt=""><figcaption><p>Настроенные провайдеры</p></figcaption></figure>

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

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

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

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FcHkZnJsnmqQl7nIqWBnE%2Fimage.png?alt=media&#x26;token=10a07247-66d9-4306-a7cc-9353ebf7489d" alt=""><figcaption><p>Схема поставленной задачи</p></figcaption></figure>

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

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

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

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

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2F3c4ZIUCXCxGlZGeCRqRT%2Fimage.png?alt=media&#x26;token=443b18e7-7c13-4636-91be-a553267403cf" 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="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FDRMAvolYuOQbcvdDpt1O%2FnewRule1.png?alt=media&#x26;token=333a5c3b-6233-4152-91ef-6359bd067d81" alt=""><figcaption><p>Создание нового правила в разделе "Исходящие маршруты"</p></figcaption></figure>

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

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FtV7SeJUsZabTBdKvVdgN%2FParametrsRT.png?alt=media&#x26;token=fb2e10b9-75d7-46b1-aa46-415479cee6d1" alt=""><figcaption><p>Параметры маршрутизации для первого провайдера </p></figcaption></figure>

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

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FMAlcihLQfskEYzh9BR8V%2FParametrsZadarma.png?alt=media&#x26;token=d02d5c38-9488-4de6-bbf1-d3a1f76b9cf8" alt=""><figcaption><p>Параметры маршрутизации для второго провайдера</p></figcaption></figure>

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

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

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2Fs6lyomNXs6Hz692eqLMk%2FnewProvider.png?alt=media&#x26;token=6cb20c2f-526d-4c4b-83a3-164cc28d15c1" alt=""><figcaption><p>Создание новой учетной записи провайдера</p></figcaption></figure>

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

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2Flj1u8e0yCjNVlRlEY8Dd%2FparametrsRouter1.png?alt=media&#x26;token=4f197702-f69b-42e7-902d-e5792ef3aed5" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FbUCift94nWV5dVrnuDxb%2FparametrsRouter2.png?alt=media&#x26;token=36854dc3-e16b-4e40-aa82-f6e26225b22f" alt=""><figcaption><p>Параметры Router</p></figcaption></figure>

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

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2F4TsT4S3T9XjTiTqEXWtj%2FRouterID.png?alt=media&#x26;token=f1e530d7-031a-49ca-9a38-3b3e4d151bc3" alt=""><figcaption><p>ID провайдера в адресной строке</p></figcaption></figure>

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

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FXyWlOi6uIHd2sQMywyRl%2FParametrsRouter3.png?alt=media&#x26;token=b12d3090-b531-4a16-88d1-9bdc60a174cc" alt=""><figcaption><p>Параметры маршрутизации для Router</p></figcaption></figure>

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

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FAOq7GAVGP6sZjt6a0OTl%2FPriority.png?alt=media&#x26;token=e780e3f6-53ad-44fe-ab76-5700135de9be" alt=""><figcaption><p>Приоритеты исходящей маршрутизации</p></figcaption></figure>

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

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FEG9k3Agj9WGHTNytSOg1%2FCustomizationSystemFiles.png?alt=media&#x26;token=9dc5b9c3-6fea-4ce7-aa4d-b2c6b488b5c1" alt=""><figcaption><p>Раздел "<a href="../../manual/system/custom-files">Кастомизация системных файлов</a>"</p></figcaption></figure>

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

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2Ftm0NcxgTyBPj0QvLRCOx%2FextensionsConf.png?alt=media&#x26;token=33d2305d-696a-4551-aea1-f5ba0e9bc2ff" alt=""><figcaption><p>Файл Extensions.conf</p></figcaption></figure>

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

```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="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FM89hmBeZ27ivbKCv1MDv%2FCodeInExtensions.png?alt=media&#x26;token=afc1eefc-8d8c-455d-b479-d6c60ec8b0b6" 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() 
```

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