# Настройка WebRTC в Asterisk (FreePBX)

## Технические требования

* **Сервер телефонии должен быть доступным из Интернет, т.е. иметь белый IP.**
* **Должен быть рабочий SSL/TLS-сертификат.**
* Asterisk версии не меньше 11 [(?)](#podderzhka-webrtc-v-asterisk), но для удобства желательно 15 [(?)](#pjsip-v-asterisk) или хотя бы 13 [(?)](#primery-nastroiki).
* При использовании браузерного софтфона на сервере Asterisk должен быть настроен wss (WebSocket Secure), и порт должен быть открыт наружу (обычно 8089) [(?)](#freepbx).\
  Настраивается в интерфейсе администратора:\
  Advanced Settings > Asterisk Builtin mini-HTTP section > HTTPS Bind Port
* Диапазон портов для RTP (обычно 10000-20000) [(?)](#freepbx).\
  Настраивается в интерфейсе администратора:\
  Settings → Asterisk SIP Settings → General SIP Settings Tab

## Настройка

В данном примере рассматривается настройка WebRTC в уже работающем FreePBX-сервере:

* доступен по адресу .ru и **имеет SSL/TLS-сертификат.**
* FreePBX версии 16, Asterisk версии 15.
* настроен wss через порт 8089.
* открыты все остальные нужные порты.

### Настройка FreePBX

{% hint style="danger" %}
Если кнопка “Change To CHAN\_PjSIP Driver” (см. ниже, в настройке внутреннего номера) доступна, то в данном разделе ничего делать не нужно.
{% endhint %}

**Settings ➝ Advanced Settings**

<table><thead><tr><th width="396">Раздел Dialplan and Operational</th><th></th></tr></thead><tbody><tr><td>SIP Channel Driver</td><td>both</td></tr></tbody></table>

**Settings ➝ Asterisk SIP Settings**

**Вкладка “SIP Legacy Settings \[chan\_sip]”**

**Проверить, что установлены переменные:**

<table><thead><tr><th width="399">Раздел Advanced General Settings</th><th></th></tr></thead><tbody><tr><td>Other SIP Settings</td><td><p>icesupport = yes</p><p>media_encryption = dtls</p><p>tlscipher = AES256-SHA</p><p><br></p></td></tr></tbody></table>

Создание и настройка внутреннего номера (extension)

Зайти в интерфейс настройки FreePBX и залогиниться: https\://\<example>.ru/

Перейти в раздел **Applications ➝ Extensions**

Кнопка **“+ Add Extension” ➝ “+ Add New SIP (Legacy) \[chan\_sip] Extension”** (в других версиях FreePBX может быть “Add New Chan\_SIP extension”)

**Во вкладке General:**

| Раздел Add Extension |      |
| -------------------- | ---- |
| User Extension       | 1001 |
| Display Name         | 1001 |

**Нажать кнопку Submit**

После этого в списке расширений открыть редактирование только что созданного расширения (в строке с 5001 в колонке Actions нажать кнопку редактирования с иконкой с карандашом).

Перейти во вкладку Advanced

**Сначала поменять SIP Driver на PjSIP:**

<table><thead><tr><th width="391">Вкладка Advanced → Раздел Edit Extension</th><th></th></tr></thead><tbody><tr><td>Change SIP Driver</td><td><p>Change To CHAN_PjSIP Driver</p><p>Эта кнопка может быть недоступна, это значит, что PjSIP отключен, нужно его включить в настройках (см.выше).</p><p><br></p></td></tr></tbody></table>

**Теперь должна появиться возможность сделать следующие настройки:**

| Вкладка Advanced → Раздел Edit Extension |                             |
| ---------------------------------------- | --------------------------- |
| Enable WebRTC defaults                   | Yes                         |
| Media Encryption                         | DTLS-SRTP (not recommended) |

**Нажать кнопку Submit**

**Потом поменять SIP Driver обратно:**

<table><thead><tr><th width="398">Вкладка Advanced → Раздел Edit Extension</th><th></th></tr></thead><tbody><tr><td>Change SIP Driver</td><td>Change To CHAN_SIP Driver</td></tr></tbody></table>

**Теперь сделать оставшиеся настройки:**

| Вкладка Advanced → Раздел Edit Extension |                       |
| ---------------------------------------- | --------------------- |
| Transport                                | All - WSS Primary     |
| Enable AVPF                              | Yes                   |
| Force AVP                                | Yes                   |
| Enable ICE Support                       | Yes                   |
| Enable rtcp Mux                          | Yes                   |
| Enable Encryption                        | Yes (SRTP only)       |
| Раздел DTLS                              |                       |
| Enable DTLS                              | Yes (уже должно быть) |
| Use Certificate                          | \<example>.ru         |

**Нажать кнопку Submit**

**Нажать кнопку Apply Config**

## Тестирование, что wss работает

Для примера воспользуемся сервисом **sipML5 live demo** от Doubango:

{% embed url="<https://www.doubango.org/sipml5/call.htm>" %}
<https://www.doubango.org/sipml5/call.htm>
{% endembed %}

### Настройка

**Сначала кнопка “Expert mode?”**

В соседней вкладке должна открыться страница с продвинутыми настройками.

| Disable Video        | v (галочка)                 |
| -------------------- | --------------------------- |
| WebSocket Server URL | wss\://.ru:8089/asterisk/ws |

**Нажать кнопку Save**

**Вернуться на основную вкладку**

| Display Name     | 1001                                                                                                                |
| ---------------- | ------------------------------------------------------------------------------------------------------------------- |
| Private Identity | 1001                                                                                                                |
| Public Identity  | sip:1001@\<example>.ru                                                                                              |
| Password         | <p>Скопировать из настроек FreePBX</p><p>Extension: 1001 ➝ вкладка General ➝ Edit Extension ➝ Secret</p><p><br></p> |
| Realm            | \<example>.ru                                                                                                       |

**Кнопка Login**

Вверху над заголовком **Registration** должно появиться слово **Connected**.

#### Звонок

Теперь можно звонить.

Под заголовком **Call control** набрать нужный номер (\*43 для звонка на эхо или номер мобильника с 8 вначале).

Нажать кнопку **Call ➝ Audio**

**Должен пойти звонок.**

**Profit!**

### **Ссылки**

#### Поддержка WebRTC в Asterisk

#### Начальная поддержка WebRTC в Asterisk начиная с версии 11:

* [New in 11 - Asterisk Project - Asterisk Project Wiki](https://wiki.asterisk.org/wiki/display/AST/New+in+11)
* [Asterisk WebRTC Support - Asterisk Project - Asterisk Project Wiki](https://wiki.asterisk.org/wiki/display/AST/Asterisk+WebRTC+Support)

#### PjSIP в Asterisk

* Новый драйвер chan\_pjsip в Asterisk 12: [New in 12 - Asterisk Project - Asterisk Project Wiki](https://wiki.asterisk.org/wiki/display/AST/New+in+12)
* PjSIP доступен по умолчанию в Asterisk 15: [PJSIP-pjproject - Asterisk Project - Asterisk Project Wiki](https://wiki.asterisk.org/wiki/display/AST/PJSIP-pjproject)

#### FreePBX

* [Port used on your PBX - PBX Platforms - Documentation](https://wiki.freepbx.org/display/PPS/Ports+used+on+your+PBX)

#### Примеры настройки

* [Настройка WebRTC в Asterisk 13. Vox Link.](https://voxlink.ru/kb/asterisk-configuration/nastrojka-webrtc-v-asterisk-13/)
* [WebRTC(создаем клиент и настраиваем Asterisk) за 15 минут | AsterConf-2019](https://www.youtube.com/watch?v=nw5RX0YST3Q)
* [Установка и настройка Asterisk для работы с WebRTC](https://habr.com/ru/post/236291/)
* [Configuring Asterisk for WebRTC Clients](https://wiki.asterisk.org/wiki/display/AST/Configuring+Asterisk+for+WebRTC+Clients)
* [Установка WebRTC клиента на систему Asterisk с FreePBX](http://vinogradov.iptel.od.ua/ustanovka-webrtc-klienta-na-sistemu-asterisk-s-freepbx/)


---

# 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/blog/nastroika-webrtc-v-asterisk-freepbx.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.
