Skip to content

About

Open-source FreeSWITCH outbound autodialer + FreePBX-style telephony platform (FastAPI, Celery, Docker). Campaigns, call-flow builder, diagnostics, TTS.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Web Autodialer

Outbound autodialer that imports a CSV contact list and automatically places calls via FreeSWITCH, respecting a configurable simultaneous-call (concurrency) limit, with a real-time web dashboard — now grown into a full telephony platform with a FreePBX-style admin panel, a visual call-flow builder, live diagnostics and reports.

⚠️ Security — read before deploying

This app ships with NO authentication and includes remote-admin tools (an in-app Terminal, Database console, and File editor) under the Diagnostics section. On a public IP with no login, that is effectively an open root shell. Do not expose it to the internet as-is. Bind it to 127.0.0.1 and reach it over an SSH tunnel, or put it behind a VPN / authenticating reverse proxy, and add real login before any public deployment. You are responsible for securing your deployment, your SIP-trunk credentials, and for legal compliance (consent, DNC/opt-out, calling-hour and robocall regulations) in your jurisdiction. Provided "as is", without warranty — see LICENSE.

Scope note: started as an MVP dialer; the delivered product now goes well beyond that original brief (see Features below). Still no login/auth by design — add it before exposing the panel on a public server.

Features

Dialer (original MVP)

  • CSV contact import, campaign management, concurrency cap (1–100, strictly enforced)
  • 3 post-answer scenarios: audio playback / transfer to agent / custom FreeSWITCH context
  • Real-time dashboard (live per-campaign stats, progress, CPS) over WebSocket
  • Start / pause / resume / stop campaign controls
  • Campaign scheduling (once / daily / weekly, via Celery Beat)
  • DNC / opt-out suppression list (import-time + dial-time enforcement)

PBX admin panel (FreePBX-style, 12 modules)

  • SIP trunks, extensions, ring groups, IVR menus, visual call-flow builder, queues (mod_callcenter), conferences, inbound routes, time conditions, voicemail, music-on-hold, and a raw dialplan editor — each generates FreeSWITCH XML + reloads over ESL

Diagnostics — live calls (active channels), extension registration status, config-file viewer, and a debug console (read-only allowlisted commands, SIP-trace & log-level toggles)

Reports — call logs (filter + CSV export), campaign summary, daily volume, dispositions

Docs in-app — technical-stack reference and a searchable knowledge base

Stack

Layer Tech
API Python 3.11 + FastAPI
Task queue Celery
Broker RabbitMQ
Telephony FreeSWITCH + Event Socket (ESL)
Database PostgreSQL
Real-time Redis (live counters) + WebSocket/poll
Frontend Single-page HTML + vanilla JS (light)
Infra Docker Compose

Architecture (high level)

            ┌─────────────┐      enqueue       ┌──────────────┐
 Browser ──▶│  FastAPI    │ ─────────────────▶ │   RabbitMQ   │
   ▲        │  (API + UI) │                    └──────┬───────┘
   │ poll/ws└──────┬──────┘                           │ tasks
   │               │ read/write                       ▼
   │        ┌──────▼──────┐                    ┌──────────────┐
   └────────│  Postgres   │◀───────────────────│ Celery       │
            │  + Redis    │   update status    │ workers      │
            └──────▲──────┘                    └──────┬───────┘
                   │ events                           │ originate (ESL)
            ┌──────┴───────────┐                      ▼
            │ ESL event        │◀──────────────┌──────────────┐
            │ listener service │   CHANNEL_*    │  FreeSWITCH  │──▶ SIP trunk ──▶ PSTN
            └──────────────────┘                └──────────────┘
  • FastAPI — campaigns, CSV import, audio upload, dashboard API.
  • Celery + RabbitMQ — orchestration: split campaign → originate calls → retries.
  • ESL listener — one long-lived process subscribed to FreeSWITCH CHANNEL events; it updates call state and triggers the next call when a slot frees up (concurrency).
  • Redis — live per-campaign counters (active calls, CPS) for the dashboard.

See references/architecture.md for the full design.

Quick start (local, no telephony)

cd app
cp .env.example .env
docker compose up -d postgres rabbitmq redis
docker compose up -d api worker
# open http://localhost:8000

To place real calls you also need FreeSWITCH running and a SIP trunk configured — see references/deployment.md.

Documentation

Prerequisites the client provides

  • A Linux VPS (sized for the target concurrency — see deployment docs)
  • A SIP trunk that allows the required concurrent channels + outbound CPS
  • DID / caller-ID numbers
  • WAV audio recordings
  • Legal/compliance sign-off (consent, DNC/opt-out, calling hours) — see deployment docs

Status

✅ Code-complete and validated locally, including end-to-end telephony against a real FreeSWITCH (loopback, no trunk): originate → real CHANNEL events → call logs → concurrency held. The one remaining step is a live SIP-trunk test on a VPS (needs client-provided VPS + trunk). See the build checklist in references/implementation.md.

Author

Built by Chandra Prakash — cpchander.com.

License

Released under the MIT License — free to download, use, modify, and distribute, for any purpose. Provided "as is", without warranty.

About

Open-source FreeSWITCH outbound autodialer + FreePBX-style telephony platform (FastAPI, Celery, Docker). Campaigns, call-flow builder, diagnostics, TTS.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages