Routing core
Campaigns, numbers, buyers, and targets — the decision engine that directs every incoming call to the right endpoint.
- Rules and targets per campaign
- Buyer endpoints and priorities
- A routing history for every call
Open sourceLicense TBDSelf-hosted
The routing core, scheduler, and dashboard behind Callfinix — running on your own infrastructure, with every call staying on your side of the wall.
The repository is being finalized — the GitHub URL, license, and setup commands on this page are placeholders until it lands.
What’s in the repo
Everything a call operation needs to route, keep time, and show its work — without a vendor in the middle.
Campaigns, numbers, buyers, and targets — the decision engine that directs every incoming call to the right endpoint.
The always-on clock. It drives the recurring work so a self-hosted stack behaves like an operated one.
The picture of the operation you know from Callfinix, served from your own server instead of ours.
Dashboard screenshot · Placeholder
A real screenshot will replace this space once the repository is finalized and imagery is approved.
Zero to running
Command-first, like the repo README. Clone, configure, start — and dial through your own stack.
The repository is being finalized — the GitHub URL, license, and setup commands on this page are placeholders until it lands.
One checkout brings the routing core, the scheduler, and the dashboard.
git clone <repository-url> && cd callfinix-coreCopy the example environment, then set your database and telephony provider keys.
cp .env.example .envCore, scheduler, and dashboard come up together on your host.
docker compose up -dApply the schema so campaigns, numbers, buyers, and routes have a home.
docker compose exec core callfinix migrateRegister a campaign number and a buyer target — the two pieces a route needs.
callfinix numbers:add --campaign firstDial the campaign number and watch the routing core pick the buyer.
callfinix routes:test --campaign firstOpen the dashboard: the call, its route, and its result — on your screen, on your server.
open http://localhost:8080Always on
A self-hosted core still has to behave like an operated one. The scheduler carries the recurring work; these habits carry the rest.
The scheduler publishes a health heartbeat. Point your monitor at it and page a human when it goes quiet.
Run the stack with a restart policy and the core, scheduler, and dashboard come back after a reboot — no hand-holding.
Pull the latest core, rebuild, migrate. Your campaigns, routes, and history move forward with it.
When it misbehaves
The five stops you’re most likely to hit on the way up — and the move that clears each one.
| Symptom | Cause | Fix |
|---|---|---|
| Calls land, but no route fires. | The campaign has no active buyer target. | Open the routing timeline in the dashboard, add or re-enable a target, and dial again. |
| Scheduler stopped after a reboot. | The services run without a restart policy. | Set restart: unless-stopped in the compose file and bring the stack back up. |
| Dashboard loads, but shows no data. | The core can’t reach the database. | Check the database URL in .env, then restart the services. |
| Webhooks aren’t delivering. | Outbound HTTPS is blocked from the host. | Allow egress for the core and watch the pending deliveries retry. |
| A test call never reaches the buyer. | The number isn’t attached to the campaign. | Re-check the number’s campaign assignment in the dashboard and place the call again. |
Questions
Nothing. The self-hosted core is free to run, study, and modify. The paid Callfinix service is a separate, optional layer on top of it.
The core gives you routing, scheduling, and a dashboard on your own server. Callfinix adds AI agents that run the operation — setup, triage, routing, and reporting — plus managed infrastructure and support.
No. Calls reach your core through your telephony provider, and the recordings, transcripts, and reports stay where you run them.
Yes. Route some campaigns through your self-hosted core and others through Callfinix, or move campaigns between them as the work changes.
The final license lands with the public repository — the badge at the top of this page carries it as soon as it’s chosen.
Open core, paid service