# Объединение двух MikoPBX

{% embed url="<https://rutube.ru/video/47c63ce88f26c27ac7a55a25e3d0e416/>" %}

## Описание примера задачи <a href="#obedinenie_dvux_mikopbx" id="obedinenie_dvux_mikopbx"></a>

В нашем случае-примере компания call-центра имеет два офиса: в **Москве** и в **Санкт-Петербурге**.\
В каждом офисе используется отдельная станция **MikoPBX**:

* **АТС Москва** - *192.168.0.202* - все внутренние номера сотрудников назначены по шаблону **2ХХ (пример - 201, 202, 203, ...)**
* **АТС Петербург** - *192.168.0.201* - все внутренние номера сотрудников назначены по шаблону **3ХХ (пример - 301, 302, 303, ...)**

{% hint style="info" %}
Для примера используются локальные IP-адреса.
{% endhint %}

Необходимо **объединить** эти две АТС, реализовать **единый внутренний план номеров**: сотрудники из офиса в Москве должны иметь возможность по короткому номеру набрать сотрудников из офиса Санкт-Петербурга и наоборот.

Схематично маршрутизация вызовов представлена на рисунке ниже.

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2F8bbQJV1pgSn5DbP5BXo2%2Fimage.png?alt=media&#x26;token=81bb2c0a-7fe5-4de3-9213-77b4d87e5672" alt=""><figcaption><p>Схема маршрутизации</p></figcaption></figure>

## Провайдеры телефонии <a href="#provajdery_telefonii" id="provajdery_telefonii"></a>

1. Для каждой АТС необходимо добавить учетную запись провайдера. Для её создания необходимо перейти в **Маршрутизация** → **Провайдеры телефонии**.

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FEexNUVG4PhO8LSnOUqom%2Fproviders.png?alt=media&#x26;token=399d6f46-f8af-4897-9223-97e7eb23246c" alt=""><figcaption><p>Раздел "Провайдеры телефонии"</p></figcaption></figure>

2. Создайте провайдеров и заполните параметры подключения следующим образом:&#x20;

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FjrW76W1l8DmtLVPoTEgp%2FtwoProviders.png?alt=media&#x26;token=f6a4d93b-d05d-4251-8c7f-50f027c216cf" alt=""><figcaption><p>Настройки провайдеров для объединения</p></figcaption></figure>

{% hint style="info" %}
**Идентификатор провайдера появится в адресной строке только после записи провайдера**. Временно в поле «**Логин**» укажите производное значение. После записи провайдера можно его скорректировать.
{% endhint %}

3. В «**Расширенные настройки**» -> «**Переопределение SIP заголовка «From»**» - установите флаг «**Отключить использование поля fromuser**». Сделать это нужно для двух провайдеров.

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FjDr5yTrjX7sFbDUTAfvB%2Ffromuser.png?alt=media&#x26;token=ce5df22e-5d9c-4e3a-9bc4-7f634516c663" alt=""><figcaption><p>Отлюкчение использования поля fromuser</p></figcaption></figure>

4. В «**Расширенные настройки**» -> «**Дополнительные параметры**» следует прописать:

```php
[endpoint]
set_var=IGNORE_TIME=1 
```

Эта опция отключит функционал «**Нерабочее время**» для всех входящих через этого провайдера.&#x20;

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FR61ln0ibknRoQsJMRIwX%2FignoreTime1.png?alt=media&#x26;token=fbc4c09a-5580-4d8d-b502-a301db6119cd" alt=""><figcaption><p>Дополнительные параметры</p></figcaption></figure>

## Исходящая маршрутизация <a href="#isxodjaschaja_marshrutizacija" id="isxodjaschaja_marshrutizacija"></a>

Необходимо перейти в "**Маршрутизация"** → "**Исходящие маршруты"**. Опишите исходящие маршруты как на скриншоте ниже:&#x20;

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FhS8Gi3RWK1EOd4L6cdE9%2FoutboundSettings.png?alt=media&#x26;token=f978884e-217a-4d51-9b32-0da08cc3011d" alt=""><figcaption><p>Настройки исходящей маршрутизации</p></figcaption></figure>

## Входящая маршрутизация <a href="#vxodjaschaja_marshrutizacija" id="vxodjaschaja_marshrutizacija"></a>

1. Добавим **для каждой АТС одинаковое приложение диалплана**, которое будет переадресовывать звонки на внутренние номера . В разделе "**Модули" -> "Приложения диалпланов"** добавим новое приложение со следующими параметрами:

* "**Название**" - произвольное название
* **"Номер для вызова приложения"** -  произвольный уникальный номер
* **"Тип кода"** - Диалплан Asterisk

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FKzaIhfr4i2t4eCSZf860%2FdialplanParameters.png?alt=media&#x26;token=5601b84c-3b63-4c3e-bf35-86b9ba5a9173" alt=""><figcaption><p>Параметры диалплана</p></figcaption></figure>

2. Перейдите во вкладку "**Программный код",** добавьте код для обработки звонков:

```php
1, GoTo(internal,${FROM_DID},1)
n, Hangup()
```

3. Создайте входящий маршрут для каждой АТС. Для этого перейдите в раздел "**Маршрутизация" -> "Входящие маршруты"**, добавьте новое правила со следующими параметрами:

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FEN0tZF0Icf7rbeuTARvS%2FincomingSettings.png?alt=media&#x26;token=dab3a3fc-f205-4969-9490-ff343871b0eb" alt=""><figcaption><p>Параметры для входящей маршрутизации</p></figcaption></figure>

## Переадресация <a href="#pereadresacija" id="pereadresacija"></a>

{% hint style="danger" %}
В целях безопасности, переадресация на «**Внешние**» номера телефонов запрещена!
{% endhint %}

#### Первая АТС

Для того, чтобы снять данной ограничение, добавьте через раздел "**Система**" -> "**Кастомизация системных файлов"** в конец файла "**extensions.conf"** следующий код:

```php
[internal-transfer](+)
exten => _2XX,1,Set(__ISTRANSFER=transfer_)
     same => n,Goto(outgoing,${EXTEN},1) 
```

Это разрешит переадресацию на 2XX номера.

#### Вторая АТС

На второй АТС, чтобы разрешить переадресацию на 3XX номера добавьте через раздел "**Система**" -> "**Кастомизация системных файлов"** в конец файла "**extensions.conf"** следующий код:

```php
[internal-transfer](+)
exten => _3XX,1,Set(__ISTRANSFER=transfer_)
     same => n,Goto(outgoing,${EXTEN},1) 
```

Это разрешит переадресацию на 3XX номера.

## Статусы абонентов <a href="#statusy_abonentov" id="statusy_abonentov"></a>

В некоторых случаях, абонентам одной АТС потребуется знать статусы абонентов другой станции. К примеру при использовании:

* **BLF на телефонных аппаратах**
* **«Панель телефонии для 1С»**

Для настройки статусов потребуется:

1. Добавьте **на первой АТС** через раздел Кастомизация системных файлов в конец файла **extensions.conf** следующий код:

```php
[internal-hints]
exten => 301,hint,PJSIP/301
exten => 303,hint,PJSIP/303
exten => 302,hint,PJSIP/302
```

2. Для **каждой АТС** добавьте через раздел Кастомизация системных файлов в конец файла **pjsip.conf:**

```php
[<ID-Провайдера-Текщуей-АТС>-devicestate]
type=outbound-publish
server_uri=sip:<ID-Провайдера-Текщуей-АТС>@<ID-Провайдера-Другой-АТС>:<SIP-Порт-Другой-АТС>
event=asterisk-devicestate
 
[<ID-Провайдера-Текщуей-АТС>]
type=asterisk-publication
devicestate_publish=<ID-Провайдера-Текщуей-АТС>-devicestate
device_state=yes

[<ID-Провайдера-Текщуей-АТС>]
type=inbound-publication
event_asterisk-devicestate=<ID-Провайдера-Текщуей-АТС>
```

{% hint style="success" %}
Замените теги **\<ID-Провайдера-Текщуей-АТС>**, **\<ID-Провайдера-Другой-АТС>**, **\<SIP-Порт-Другой-АТС>** на свои значения
{% endhint %}

3. Добавьте **на второй АТС** через раздел Кастомизация системных файлов в конец файла **extensions.conf** следующий код:

```php
[internal-hints]
exten => 201,hint,PJSIP/201
exten => 203,hint,PJSIP/203
exten => 202,hint,PJSIP/202
```

## Решение ситуации с одинаковыми номерами на АТС <a href="#odinakovye_nomera_na_ats" id="odinakovye_nomera_na_ats"></a>

В идеале, на каждой АТС должен быть свой диапазон номеров SIP и они не должны пересекаться, однако на практике, возможно и наложение. В этом случае можно столкнуться с проблемой звонка с одной АТС на другую: вызов может обрываться.

Проблему можно обойти. Для этого **на каждой АТС** следует добавить через раздел "**Система**" -> "**Кастомизация системных файлов**" в конец файла **extensions.conf** следующий код:

```php
[ID_PROVIDER-outgoing-custom]
; При исходящем в caller ID добавляем префикс "_" (нижнее подчеркивание)
exten => _X!,1,Set(CALLERID(num)=_${CALLERID(num)})
	same => n,return

[ID_PROVIDER-incoming-custom]
; При входящем удаляем префикс, для корректного отображения callerid
exten => _[0-9*#+]!,1,Set(CALLERID(num)=${CALLERID(num)=:1})
	same => n,return
```

**ID\_PROVIDER** - это идентификатор провайдера текущей АТС, посмотреть его можно в адресной строке браузера:

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FDgv9i685oLJuSnirLfws%2FproviderIDFor2MikoPBX.png?alt=media&#x26;token=171a1d24-c8f3-445b-abac-0867ac10e055" alt=""><figcaption><p>ProviderID</p></figcaption></figure>

## Транзитные звонки <a href="#itogi" id="itogi"></a>

В некоторых случаях необходимо разрешить подключенной АТС совершать звонки через подключенных провайдеров.&#x20;

**На  АТС, где настроен провайдер для исходящих,** следует добавить через раздел "**Система**" -> "**Кастомизация системных файлов**" в конец файла **extensions.conf** следующий код:

```php
[ID_PROVIDER-incoming-custom]
; Входящие от Питера на номера МСК
exten => _[78]XXXXXXXXXX,1,Dial(Local/${FROM_DID}@outgoing,,${TRANSFER_OPTIONS}Kg)
    same => n,return()
```

**ID\_PROVIDER** - это идентификатор провайдера, через которого подключена удаленная АТС, посмотреть его можно в адресной строке браузера.&#x20;

{% hint style="info" %}
Описанное правило принимает вызовы от удаленной АТС.&#x20;

Если набранный номер соответствует шаблону, то отправляет вызов в исходящие маршруты.&#x20;

Если исходящий маршрут найдет, то вызов будет направлен через исходящего провайдера.&#x20;
{% endhint %}

## Итоги. Результаты. <a href="#itogi" id="itogi"></a>

Таким образом мы соединили две АТС! Подтверждением успешного подключения двух станций служит зеленый индикатор напротив учетной записи провайдера:

Для **АТС Москва**(*192.168.0.202*):

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FUqDpByBHI9CBANhMb2C2%2Fstatus2.png?alt=media&#x26;token=3bec2107-f4b5-455e-ade1-6ff8aee0159f" alt=""><figcaption><p>Статус на станции MikoPBX в офисе Москвы</p></figcaption></figure>

Для **АТС Петербург**(*192.168.0.201)*:

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2F5GMoqnja4U3JH3W1E7vM%2Fstatus1.png?alt=media&#x26;token=03aaa482-0495-4b0e-8772-da0598ce58c8" alt=""><figcaption><p>Статус на станции MikoPBX в офисе Санкт-Петербурга</p></figcaption></figure>

Аналогичным образом можно подключить **три** и даже **четыре** станции! Нужно понимать, что в случае соединения трех АТС каждая АТС должна иметь не один, а уже два провайдера. Схематично это изобразить можно так:

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2Fhv1Mq5WTRgQfh8EpvnLl%2Fscheme.png?alt=media&#x26;token=84032f82-4467-4287-a532-8456d632cadb" alt=""><figcaption><p>Схема объединения 3 станций MikoPBX</p></figcaption></figure>
