Архітектура під капотом
Як PearlPBX2 перетворює моделі Django на робочу конфігурацію Asterisk, перевіряє її ще до застосування і дозволяє відкотити будь-яку зміну.
Стек
Генерація конфігурації
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.
REST API
Токен-автентифікація (Authorization: Token <key>), жива OpenAPI 3.0-схема зі Swagger UI та ReDoc, згенерована прямо з коду через drf-spectacular.
/api/v1/calls/originate/Клік-ту-колл: ініціювати дзвінок через AMI, не розкриваючи AMI-секрет CRM./api/v1/calls/conference/Ad-hoc конференція: набрати 2+ учасників у автоматично створену ConfBridge-кімнату паралельно./api/v1/queues/members/Живий статус учасників черги через AMI та керування паузою./api/v1/recordings/<uniqueid>/Завантаження запису розмови з підтримкою HTTP Range для стрімінгу й перемотування.