# Публикация записей разговоров

Callbee не хранит записи разговоров у себя — вместо этого CRM **скачивает их напрямую** с вашего сервера FreePBX по прямой HTTP(S)-ссылке. Чтобы это работало, записи нужно опубликовать: настроить веб-сервер, который отдаёт файлы из `/var/spool/asterisk/monitor/`.

> [!CAUTION] Без публикации записи не попадут в CRM
> Сам факт записи разговора (настроен в FreePBX) — не то же самое, что публикация. Если не настроить HTTP(S)-доступ, в карточках звонков будут только длительность и номер — без аудио.

## Выберите вашу CRM

Требования к публикации записей отличаются — выберите свою систему:

+++ Битрикс24

**Требования:**
- Протокол — **HTTP** или **HTTPS**
- Basic Auth — допустим, но не обязателен
- Самоподписанные SSL-сертификаты — принимает

**Рекомендация:** используйте [Вариант 1. HTTP](#вариант-1-http-быстрый-старт) — быстрее в настройке, достаточно для Битрикс24.

> [!NOTE] Доступ с IP сотрудников
> Сотрудники прослушивают записи со своих рабочих IP. Если вы ограничили порт по IP — добавьте офисную подсеть в whitelist, иначе записи откроются только у владельца портала.

+++ amoCRM

**Требования:**
- Протокол — **только HTTPS**
- Валидный SSL-сертификат (Let's Encrypt или коммерческий CA) — **обязательно**
- Авторизация — без Basic Auth, публичный доступ

**Рекомендация:** используйте [Вариант 2. HTTPS](#вариант-2-https-рекомендуется-для-всех-crm).

> [!WARNING] Самоподписанные не работают
> amoCRM не принимает самоподписанные или истёкшие сертификаты. Проверьте оценку через [SSL Labs](https://www.ssllabs.com/ssltest/) — должна быть **A** или выше.

+++ 1С 8.3.27+

**Требования:**
- Протокол — **HTTP** или **HTTPS**
- Basic Auth — рекомендуется
- Самоподписанные SSL — принимает

**Рекомендация:** если 1С и FreePBX в **одной сети** — достаточно [Варианта 1. HTTP](#вариант-1-http-быстрый-старт) с адресом внутри сети. Если 1С в облаке — [Вариант 2. HTTPS](#вариант-2-https-рекомендуется-для-всех-crm) с публичным доменом.

> [!TIP] Если 1С в облаке (1С:Фреш)
> Записи отдаются клиенту напрямую — сервер 1С:Фреш не «проксирует» их. Значит внешний HTTPS с валидным сертификатом обязателен.

+++ ROISTAT

**Требования:**
- Протокол — **только HTTPS**
- Валидный SSL-сертификат — **обязательно**
- Авторизация — без Basic Auth

**Рекомендация:** используйте [Вариант 2. HTTPS](#вариант-2-https-рекомендуется-для-всех-crm).

> [!WARNING] Лимит размера и времени
> ROISTAT даёт ~30 секунд на скачивание одной записи. Для файлов > 50 МБ включите gzip (есть в примере Caddyfile ниже).

+++

> [!TIP] Несколько CRM одновременно
> Если используете две и более CRM — настройте **только HTTPS с валидным сертификатом**. Этот вариант подходит всем четырём системам, и не нужно держать разные точки доступа.

## Что понадобится

|   |   |
|---|---|
| **Доступ по SSH** | `root` или `sudo` |
| **Docker** | для запуска nginx/Caddy (установим на Шаге 1) |
| **Домен** | например, `pbx.company.ru` — для HTTPS |
| **Открытый порт** | 80 (HTTP) или 443 (HTTPS) наружу |
| **DNS A-запись** | домен → внешний IP вашей АТС/роутера |

---

## Вариант 1. HTTP (быстрый старт)

Подходит только для **Битрикс24** и **1С в локальной сети**. Для amoCRM и ROISTAT нужен [HTTPS](#вариант-2-https-рекомендуется-для-всех-crm).

### Шаг 1. Установите Docker

```bash
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
```

Проверьте версию:

```bash
docker --version
```

### Шаг 2. Запустите nginx с записями

```bash
docker run -d \
  --name recs_nginx \
  --restart=unless-stopped \
  -v /var/spool/asterisk/monitor:/usr/share/nginx/html/monitor:ro \
  -v /var/spool/asterisk/voicemail:/usr/share/nginx/html/voicemail:ro \
  -p 50381:80 \
  nginx
```

Флаг `:ro` делает тома **только для чтения** — nginx физически не может изменить или удалить записи.

Проверьте, что контейнер работает:

```bash
docker ps --filter name=recs_nginx
```

Статус должен быть **Up**.

### Шаг 3. Откройте порт на роутере

Порт **50381/TCP** должен быть виден снаружи (кроме сценария «1С в одной сети»). Пробросьте его на роутере:

- **Внешний порт:** `50381`
- **Внутренний IP:** адрес сервера FreePBX
- **Внутренний порт:** `50381`
- **Источник:** ограничьте IP-адресами портала CRM и офисной подсетью

### Шаг 4. Проверьте доступ

Откройте в браузере:
```
http://<ваш-домен-или-IP>:50381/monitor/
```

Должен открыться листинг папок с записями. Если ответ **404** или **Connection refused** — проверьте Шаг 3.

---

## Вариант 2. HTTPS (рекомендуется для всех CRM)

HTTPS — единственный способ, который работает для всех четырёх CRM. Используем **Caddy** — сервер, который автоматически получает и обновляет сертификаты Let's Encrypt.

### Шаг 1. Установите Docker

(см. [Вариант 1, Шаг 1](#шаг-1-установите-docker))

### Шаг 2. Подготовьте DNS

В панели управления доменом создайте A-запись:
```
pbx.company.ru  A  <внешний-IP-вашей-АТС>
```

Подождите 5–10 минут пока DNS обновится. Проверьте:
```bash
dig +short pbx.company.ru
```

Должен вернуться ваш внешний IP.

### Шаг 3. Создайте Caddyfile

```bash
mkdir -p /opt/callbee-recs && cd /opt/callbee-recs
nano Caddyfile
```

Вставьте:

```caddyfile
pbx.company.ru {
    root * /srv
    file_server browse
    encode gzip
    log {
        output file /var/log/caddy/access.log
    }
}
```

Замените `pbx.company.ru` на ваш домен.

### Шаг 4. Запустите Caddy

```bash
docker run -d \
  --name recs_caddy \
  --restart=unless-stopped \
  -p 80:80 -p 443:443 \
  -v /opt/callbee-recs/Caddyfile:/etc/caddy/Caddyfile:ro \
  -v /var/spool/asterisk/monitor:/srv/monitor:ro \
  -v /var/spool/asterisk/voicemail:/srv/voicemail:ro \
  -v caddy_data:/data \
  caddy
```

Caddy сам получит SSL-сертификат от Let's Encrypt при первом запросе к домену.

### Шаг 5. Проверьте HTTPS

```bash
curl -I https://pbx.company.ru/monitor/
```

Ожидаемый ответ: `HTTP/2 200`. Если `SSL handshake failed` — убедитесь что порт **80/TCP** открыт (он нужен Let's Encrypt для выдачи сертификата).

---

## Указание ссылки в Callbee

После публикации запишите итоговый базовый URL — он понадобится при [создании сервиса в личном кабинете](/quickstart/first-call/):

|   |   |
|---|---|
| **HTTP** | `http://pbx.company.ru:50381/monitor` |
| **HTTPS** | `https://pbx.company.ru/monitor` |

Callbee автоматически подставит имя файла записи — например, `https://pbx.company.ru/monitor/2026/04/17/out-79991234567-101-20260417-154230-1745678542.12345.wav`.

---

## Частые проблемы

**amoCRM: «Не удалось загрузить запись»**
amoCRM не принимает самоподписанные сертификаты. Только Let's Encrypt / коммерческий CA.

**Битрикс24: «Файл недоступен» у сотрудников**
Сотрудники открывают записи со **своих IP**. Либо откройте порт публично, либо используйте Basic Auth и раздайте credentials в команде.

**1С не скачивает файлы**
Если 1С в облаке, а FreePBX — в локальной сети, домен должен быть доступен из интернета (нужен HTTPS).

**ROISTAT: «Истёкший таймаут скачивания»**
Записи > 50 МБ не успевают скачаться за 30 секунд. Включите `encode gzip` в Caddyfile и проверьте канал.

**Сертификат Let's Encrypt не выдаётся**
1. Порт **80** закрыт на роутере — Let's Encrypt использует HTTP-01 challenge
2. DNS A-запись не обновилась — проверьте через [whatsmydns.net](https://www.whatsmydns.net/)
3. Rate limit — Let's Encrypt даёт 5 попыток в час на домен

---

> [!SUCCESS] Записи опубликованы!
> Теперь переходите к созданию сервиса в личном кабинете — укажите базовый URL записей в соответствующем поле:
> - [FreePBX + Битрикс24](/setup/freepbx/bitrix24/)
> - [FreePBX + amoCRM](/setup/freepbx/amocrm/)
