PearlPBX2
Для інженерів

Архітектура під капотом

Як PearlPBX2 перетворює моделі Django на робочу конфігурацію Asterisk, перевіряє її ще до застосування і дозволяє відкотити будь-яку зміну.

Стек

Python3.10+ (CI/Docker — 3.12)
Django5.2.8
PostgreSQL14+ (CI/Docker — 17)
Redis7+
Asterisk22+ з res_pjsip, res_agi, cdr_pgsql

Генерація конфігурації

30+ моделей Django, кожна редагується через admin-інтерфейс, і генератор конфігурації (core/conf.py, ~950 рядків) перетворює їх на файли конфігурації Asterisk. Apply Changes показує прев'ю кожного файлу перед записом, версіонує конфігурацію в базі даних і лише потім м'яко перезавантажує або повністю перезапускає Asterisk через AMI. Перед перезаписом автоматично створюється резервна копія.

Валідатор AEL-dialplan

core/validators.py(1000+ рядків) розбирає структуру блоків if/else/while/for/switch, балансує дужки, лапки й ${...}-вирази, і звіряє кожен виклик застосунку зі списком ~150 команд Asterisk. Шаблони розширень перевіряються на коректність синтаксису й відображаються відсортованими за специфічністю — точні збіги перед масками. Помилковий dialplan відхиляється у веб-формі ще до того, як дістанеться Asterisk.

Ansible та відкат розгортання

Встановлення, оновлення й відкат — окремі скрипти (install.sh,update.sh,rollback.sh) поверх 9 Ansible-ролей. Інсталятор компілює Asterisk 22 з вихідного коду, генерує всі секрети, налаштовує потрібні для роботи cron-завдання (бекап бази, бекап конфігурації Asterisk, ротація логів, конвертація й вивантаження записів розмов, моніторинг системи) і конфігурує nftables — з паузою для підтвердження виявленого SSH-порту перед застосуванням правил, щоб не заблокувати собі доступ. rollback.sh -n <кроків>повертає код, міграції бази й сервіси до попереднього стану за журналом розгортань. Автоматичний інсталятор розрахований лише на Debian або Ubuntu; Docker Compose-стек для оцінки й розробки не прив'язаний до дистрибутива, а окремий інтеграційний compose-файл прогоняє тестовий набір проти справжнього контейнера Asterisk 22 в CI.

systempostgresredisasteriskpearlpbx2servicesnginxtftpfirewall

REST API

Токен-автентифікація (Authorization: Token <key>), жива OpenAPI 3.0-схема зі Swagger UI та ReDoc, згенерована прямо з коду через drf-spectacular.

POST/api/v1/calls/originate/Клік-ту-колл: ініціювати дзвінок через AMI, не розкриваючи AMI-секрет CRM.
POST/api/v1/calls/conference/Ad-hoc конференція: набрати 2+ учасників у автоматично створену ConfBridge-кімнату паралельно.
GET/POST/api/v1/queues/members/Живий статус учасників черги через AMI та керування паузою.
GET/api/v1/recordings/<uniqueid>/Завантаження запису розмови з підтримкою HTTP Range для стрімінгу й перемотування.