Перейти к основному содержимому

FreePBX

Интеграция получает журнал звонков (CDR) через GraphQL API FreePBX, а записи разговоров забирает с сервера АТС по SFTP. API FreePBX аудио не отдаёт, поэтому SFTP-доступ к каталогу записей обязателен.

Что попадает в Лия Sense — то же, что и у Asterisk: только звонки с записью, метаданные из CDR, аудио по запросу из каталога записей.

Что подготовить на стороне FreePBX

1. Создайте приложение API

В FreePBX откройте модуль API (Connectivity → API), создайте приложение типа Machine-to-Machine и сохраните его Client ID и Client Secret. Приложению нужны права на чтение CDR: интеграция запрашивает scope gql:cdr:read.

Адрес панели FreePBX должен быть доступен с адресов Лия Sense (уточните их у поддержки) по HTTP или HTTPS; рекомендуем HTTPS.

2. Включите запись разговоров

Запись должна вестись штатными средствами FreePBX (MixMonitor), а в CDR должно заполняться поле recordingfile — по нему интеграция находит файл. Звонки без recordingfile пропускаются.

3. Создайте пользователя SFTP только на чтение

Пользователь должен читать каталог записей — по умолчанию /var/spool/asterisk/monitor/ со всеми подкаталогами вида ГГГГ/ММ/ДД/. Shell можно отключить; аутентификация — по паролю или по SSH-ключу. Порт SFTP должен быть доступен с адресов Лия Sense.

4. Уточните часовой пояс АТС

API FreePBX принимает даты с точностью до суток в локальном времени АТС. Чтобы интеграция запрашивала правильные дни, укажите часовой пояс сервера FreePBX в формате IANA, например Europe/Moscow. Это обязательное поле; неверная зона сдвинет окно и потеряет звонки на границе суток.

Поля формы подключения

ПолеОбязательноеОписание
Адрес FreePBXДаАдрес панели целиком, например https://pbx.example.com
Client ID приложения APIДаClient ID приложения из шага 1
Client SecretДаClient Secret того же приложения
Хост SFTP для записейДаDNS-имя или IP сервера с записями (обычно тот же сервер FreePBX)
Порт SFTPНетПо умолчанию 22
Пользователь SFTP (только чтение)ДаУчётная запись из шага 3
Пароль SFTPОдно из двухПароль пользователя — либо приватный ключ
Приватный ключ SFTPОдно из двухПолное содержимое приватного ключа, включая строки BEGIN и END
Отпечаток/ключ хостаНетОтпечаток SHA-256/MD5/SHA-1 или публичный ключ хоста. Пусто — ключ хоста не проверяется, подключение принимается с любым ключом сервера; укажите значение, чтобы включить строгую проверку
Часовой пояс АТСДаIANA-зона, например Europe/Moscow
Максимальная длительность звонка, чНетПо умолчанию 4. Влияет на границы периода при разовых задачах
Каталог записейНетКорень дерева записей на SFTP, по умолчанию /var/spool/asterisk/monitor
Шаблон пути к записиНетКак из recordingfile складывается путь внутри каталога записей. По умолчанию {Y}/{m}/{d}/{basename} — типовая раскладка FreePBX, см. пояснение под таблицей
Контексты входящихНетКонтексты диалплана входящих звонков через запятую. По умолчанию from-pstn,from-trunk,from-did-direct
Контексты исходящихНетПо умолчанию from-internal
Шаблон внутреннего номераНетРегулярное выражение внутреннего номера, например ^\d{3,4}$. Нужен для направления internal
Каналов в записи (1 или 2)НетПо умолчанию 1 (моно). 2 — только если запись ведётся в стерео

Шаблон пути к записи задаёт путь внутри Каталога записей: {Y} — год из четырёх цифр, {m} — месяц, {d} — день (две цифры, по дате начала звонка в часовом поясе АТС), {basename} — значение recordingfile из CDR (только имя файла, без каталогов). Пример: каталог /var/spool/asterisk/monitor, звонок 11 сентября 2026 года, recordingfile = out-871.wav/var/spool/asterisk/monitor/2026/09/11/out-871.wav.

При нажатии Подключить система получает токен API, выполняет пробный запрос CDR и проверяет каталог записей по SFTP. Ошибка авторизации (401/403) означает неверные Client ID/Secret или недостаточные права приложения.

Требования к записям

Те же, что у Asterisk:

  • запись через MixMonitor, форматы .wav, .wav49, .mp3, .ogg;
  • файл остаётся в каталоге записей до обработки — интеграция забирает его по SFTP в момент обработки, а не копирует заранее;
  • размер одной записи — до 64 МиБ (67 108 864 байт);
  • стерео (Каналов в записи = 2): канал 0 — оператор, канал 1 — клиент.

Направление, метаданные и фильтры

Направление звонка, набор метаданных (cdr.*), статус и фильтры задачи сбора («Результат звонка», «Минимальная длительность разговора») совпадают с интеграцией Asterisk — см. соответствующие разделы на странице Asterisk.

Ограничения

  • Один CDR — не всегда один разговор: переводы, очереди и Local-каналы создают несколько плеч с общим linkedid; загружаются только плечи с поддерживаемой записью.
  • Даты в API FreePBX — целые локальные сутки. Интеграция запрашивает нужные дни и затем точно фильтрует звонки по времени сама, но неверный часовой пояс всё равно приведёт к потерям на границах.
  • Оценка объёма («Оценить» в задаче) для FreePBX приблизительная: она считает все строки CDR, включая звонки без записи.
  • .wav49 может быть сохранён как .WAV с кодеком GSM внутри; такой файл может не воспроизводиться. Предпочтительны .wav (PCM) или .mp3.
  • Раскладка каталога записей и адреса API различаются между версиями FreePBX — при первом подключении обязательно проверьте воспроизведение записи.

Проверка после подключения

  1. Создайте разовую задачу за один прошедший день со звонками и запустите её.
  2. Дождитесь завершения и откройте загруженный разговор: проверьте время звонка, номера в метаданных и воспроизведение записи.
  3. Если записи нет — проверьте, что recordingfile в CDR заполнен, а файл по пути из настроенного шаблона (для шаблона по умолчанию — <каталог записей>/ГГГГ/ММ/ДД/<recordingfile>) читается SFTP-пользователем.
  4. Создайте периодическую задачу и привяжите пайплайн.