Show HN: Comcent CE – An open-source self-hosted Voice Infrastructure platform
Comcent CE is an open-source, self-hosted voice infrastructure platform that provides voice calls with browser-based dialers, phone numbers, queues, call recording, transcription, AI summaries, sentiment analysis, semantic search, and a real-time AI voice bot. It runs on a single Linux box with Docker, supports multi-tenant orgs, API keys, and webhooks. The project is licensed under AGPL-3.0.
Uh oh!
There was an error while loading. Please reload this page.
Notifications You must be signed in to change notification settings
Fork 0
Star 2
BranchesTags
Open more actions menu
Folders and files
NameName
Last commit message
Last commit date
Latest commit
History
38 Commits
38 Commits
.github/workflows
.github/workflows
.husky
.husky
.vscode
.vscode
docker
docker
e2e
e2e
go
go
migrations
migrations
packages
packages
sbc
sbc
server
server
tools
tools
.dockerignore
.dockerignore
.editorconfig
.editorconfig
.env.e2e.ci
.env.e2e.ci
.env.e2e.example
.env.e2e.example
.env.example
.env.example
.gitignore
.gitignore
.npmrc
.npmrc
.prettierrc.json
.prettierrc.json
CONTRIBUTING.md
CONTRIBUTING.md
LICENSE
LICENSE
README.md
README.md
docker-compose-e2e-kamailio.yaml
docker-compose-e2e-kamailio.yaml
docker-compose-e2e-telephony.yaml
docker-compose-e2e-telephony.yaml
docker-compose-e2e.yaml
docker-compose-e2e.yaml
docker-compose-mix.yaml
docker-compose-mix.yaml
docker-compose.deploy.yaml
docker-compose.deploy.yaml
docker-compose.yaml
docker-compose.yaml
eslint.config.mjs
eslint.config.mjs
install.sh
install.sh
package-lock.json
package-lock.json
package.json
package.json
run_docker_compose.sh
run_docker_compose.sh
run_test_server.sh
run_test_server.sh
sample.json
sample.json
turbo.json
turbo.json
Repository files navigation
Run your own voice infrastructure on a single Linux box. Bring your own SIP trunk (Twilio, Telnyx, …), run one install script, and you get:
Voice calls with browser-based dialers for agents
Phone numbers, queues, call recording
Call transcription, AI summaries, sentiment, semantic search
A real-time AI voice bot
Multi-tenant orgs, API keys, webhooks
🎬 Watch the installation walkthrough — from blank server to first call:
Minimum requirements
A Linux host with a public IPv4 — Ubuntu 22.04+ / Debian 12+ (a $12/mo DigitalOcean droplet with 2 vCPU / 4 GB RAM is plenty)
A domain name you can point at it
A SIP trunk (Twilio, Telnyx, Bandwidth, …) if you want to make/receive real phone calls
Install
- Open the firewall
Port Protocol What
80, 443 TCP HTTP / HTTPS — app + Let's Encrypt cert issuance
5060 UDP + TCP SIP signaling
5063 TCP SIP-over-WSS (browser dialer)
19000–19100 UDP RTP media
- Point a domain at the host
Create a DNS A record (e.g. voice.yourdomain.com) pointing at the host's public IPv4. Verify with dig +short voice.yourdomain.com before continuing — the HTTPS certificate can't be issued until DNS resolves.
- Run the installer
SSH into the host and run:
curl -fsSL https://raw.githubusercontent.com/comcent-io/comcent-ce/main/install.sh | bash
Takes ~30 seconds: installs Docker if missing, generates secrets, and writes docker-compose.yaml + .env into ~/comcent-ce/. It does not start anything yet.
- Fill in .env
nano ~/comcent-ce/.env
Search for replaceMe and fill every one in:
Variable What
COMCENT_DOMAIN Your hostname from step 2
LETSENCRYPT_EMAIL Email for cert-renewal alerts
SOURCE_EMAIL Sender for invites / password resets
SMTP_URL smtp://user:pass@host:port — any provider works. Leave blank to disable email.
STORAGE_BUCKET_NAME, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY S3 (or S3-compatible) bucket for recordings & uploads
Optional (leave blank to disable): DEEPGRAM_API_KEY (transcription, voice bot), OPENAI_API_KEY (AI summaries, voice bot), Sentry DSNs.
- Start it and claim your instance
cd ~/comcent-ce docker compose up -d
First run pulls ≈800 MB of images and takes 5–10 minutes — that's normal. The HTTPS certificate is issued about a minute after start.
Once up, the server prints a one-time setup token for creating the first admin account. Grab it from the logs:
docker compose logs server | grep -A 10 "FIRST-RUN SETUP"
Then open https://voice.yourdomain.com/setup, enter the token along with your name, email, password, and organization details. Done — you're the super-admin.
(Lost the token? It's re-printed on every server start until claimed — docker compose restart server, then grep again.)
- Connect your SIP trunk
To make and receive real phone calls, open Sip Trunk in the sidebar, hit Create, and fill in:
Name — anything, e.g. twilio.
Provide Outbound Credentials — tick only if your trunk uses username/password auth instead of IP-based auth.
SIP Proxy Address — your provider's termination URI (e.g. mytrunk.pstn.twilio.com).
Inbound IPs to whitelist — comma-separated IPs/domains your provider sends calls from.
On the trunk provider's side:
Whitelist your host's public IP (/32) — e.g. Twilio's IP Access Control Lists on an Elastic SIP Trunk.
Point inbound calls (Origination) at sip:?transport=udp.
Route your phone number to the trunk, so calls to it reach this server. Every provider names this differently — on Twilio you assign the number to the Elastic SIP Trunk.
- Add the number and build its inbound flow
Routing the number to the trunk on the provider's side isn't enough — Comcent also needs to know the number and what to do with calls to it. Open Numbers in the sidebar, hit Add, and fill in:
Name — a friendly label.
Number (E.164) — the number you bought, e.g. +15551234567.
SIP Trunk — pick the trunk from step 6.
Allow Outbound if destination matches regex — optional; restrict which destinations can be dialed from this number (e.g. ^\+1[0-9]{10}$ for US only).
Then build the inbound flow in the graph editor below — it decides what happens when someone calls the number:
Add step and pick a node: Queue (route to agents in a queue — create one under Queues first), Dial / DialGroup (ring specific agents), Menu (IVR keypad menu), Play (play audio), WeekTime (business-hours branching), or VoiceBot (AI voice bot — needs the Deepgram/OpenAI keys from step 4).
Drag it into place.
Connect Start to the first node, and node outlets onward.
The simplest working flow is Start → Dial with To set to your own username (the SIP username you chose during setup). Hit Add to save, then call your number — it rings in your browser dialer.
Upgrade
cd ~/comcent-ce docker compose pull docker compose up -d
Migrations run automatically on every server start.
Troubleshooting
Sign-up email never arrives. SMTP_URL is unset or wrong. For one-off testing you can run a Mailhog container and set SMTP_URL=smtp://mailhog:1025.
https://... shows a Traefik default cert. Let's Encrypt couldn't issue. Check docker compose logs traefik — usually DNS not yet pointing at the host, or port 80 blocked.
SIP trunk returns 403 on outbound. Your host's public IP is not on the trunk's IP allow list. Add /32.
Browser dialer can't register. The dialer connects to wss://:5063/sip-ws. Confirm port 5063/TCP is open and serving a valid Let's Encrypt cert:
echo | openssl s_client -connect voice.yourdomain.com:5063 -servername voice.yourdomain.com 2>/dev/null \ | openssl x509 -noout -subject -issuer -dates
Enterprise Edition
Billing & metered usage, GDPR workflows, audit logs, SLA tracking, outbound campaigns, executive summaries → https://comcent.io/enterprise
License
AGPL-3.0. See LICENSE. Commercial licenses available — contact the maintainer.
Contributing
Want to hack on Comcent CE itself? See CONTRIBUTING.md.
About
Comcent Community Edition — open-source contact center
Resources
Readme
License
AGPL-3.0 license
Contributing
Contributing
Uh oh!
There was an error while loading. Please reload this page.
Activity
Custom properties
Stars
2 stars
Watchers
0 watching
Forks
0 forks
Report repository
Releases
No releases published
Packages 0
Uh oh!
There was an error while loading. Please reload this page.
Contributors
Uh oh!
There was an error while loading. Please reload this page.
Languages
Elixir 38.4%
Svelte 29.3%
TypeScript 24.1%
Go 5.7%
Shell 1.0%
JavaScript 0.7%
Other 0.8%