Architecture Overview

ICTPBX is composed of four layers that work together:

┌─────────────────────────────────────┐
│  Angular 13 Frontend (ngx-admin)    │  Browser → http:///
├─────────────────────────────────────┤
│  ICTCore REST API (PHP 8.3)         │  http:///api
├─────────────────────────────────────┤
│  ICTCore PBX Engine (DB + Config)   │  PostgreSQL (ictcore pbx)
├─────────────────────────────────────┤
│  FreeSWITCH 1.10.12 (PBX Engine)    │  SIP :5060, WSS :7443, ESL :8021
└─────────────────────────────────────┘

Component Roles

Component Role Path
Angular Frontend Web UI served by Apache /usr/ictpbxx
ICTCore REST API, auth, billing, users, PBX config /usr/ictcore
FreeSWITCH SIP server, media handling /etc/freeswitch
MariaDB ICTCore data (users, tenants, CDR) Port 3306
PostgreSQL ICTCore PBX config data Port 5432

Call Flow

Inbound Call (PSTN)
  └── FreeSWITCH (SIP :5060)
        └── Reads dialplan from ICTCore PostgreSQL
              └── Routes to Extension / IVR / Queue
                    └── Media: RTP audio streams

Data Flow (Admin Actions)

Browser (Angular)
  └── POST /api/extensions  →  ICTCore
        └── Writes to ICTCore PostgreSQL (v_extensions)
              └── ICTCore reloads FreeSWITCH XML

Ports Summary

Port Protocol Service
80/443 HTTP/HTTPS Apache (Frontend + API)
5060 UDP/TCP FreeSWITCH SIP
7443 WSS FreeSWITCH WebRTC
8021 TCP FreeSWITCH ESL (localhost only)
3306 TCP MariaDB (localhost only)
5432 TCP PostgreSQL (localhost only)