Start here
KatoCall is a switchboard with a billing engine built in. Your customers place calls through it; it checks their balance, picks the cheapest route out, times the call and bills it — automatically.
You buy minutes from a carrier at one price and sell them to customers at a higher one. KatoCall stores both and keeps the difference on every call.
Good to know: KatoCall does not convert currencies. Pick one currency in Settings (US Dollars is the default) and use it for buying and selling, so every margin is a simple subtraction.
Part 1
You do this once, on a brand-new server. If someone technical sets the server up for you, hand them this part.
| A server | Debian 12 (Bookworm), 64-bit — a fresh one. Any decent VPS works (OVH, Hetzner, DigitalOcean, Vultr). |
|---|---|
| Size | 2 CPU cores, 4 GB RAM, 20 GB disk. 2 GB RAM is the floor. |
| A public IP address | The server needs its own address on the internet — your provider gives you this. |
| Server login | The root password, or a user with sudo. |
| From your carrier | A SIP trunk (their host, and either an allowed IP or a username/password), plus any phone numbers (DIDs). |
| A domain name (optional) | Only if you want the https padlock. You can start without one and add it later. |
Copy katocall-1.0.0.tar.gz onto the server and run these one at a time. Each prints what it does and stops with a clear message if something is missing.
The first command changes nothing — it confirms the server is ready and tells you if anything is missing.
# unpack the package tar -xzf katocall-1.0.0.tar.gz cd katocall-1.0.0 # check the server (safe — changes nothing) sudo bash install/00-preflight.sh
Run these one by one. Number 01 builds the phone engine and takes 10–20 minutes; the rest are quick.
sudo bash install/01-install-asterisk.sh # the phone engine (10–20 min) sudo bash install/02-install-base-stack.sh sudo bash install/03-setup-admin-panel.sh sudo bash install/04-configure-ami.sh sudo bash install/05-production-hardening.sh sudo bash install/06-configure-did-forwarding.sh sudo bash install/07-configure-fail2ban.sh sudo bash install/08-configure-nat.sh sudo bash install/09-configure-outbound.sh sudo bash install/11-configure-backups.sh sudo bash install/12-configure-dialer.sh # only if you want the dialer
01 through 09 are required. Step 12 is only for the dialer — skip it and everything else still works.
This runs about 65 checks — every service, the firewall, backups, security — and names what to fix for anything that fails.
sudo bash install/verify.sh PASS 66 WARN 1 FAIL 0
Open the server’s address in a browser and sign in. It forces a new password immediately — nothing works until you set one.
http://your-server-address/adminKatocallBefore real calls: turn on HTTPS. Until you do, the panel runs on plain http and your login travels the internet unlocked. Once a domain points at the server, run:
sudo bash install/10-configure-tls.sh panel.yourcompany.com you@yourcompany.com
Part 2
Now you’re in the panel. Build these six things in this order — each uses the one before it. Everything is in the left-hand menu.
A supplier is a carrier you buy minutes from. Start here because everything points back to it. Open Suppliers → New Supplier and give it a name.
A rate card is a price list, one line per destination (a prefix like 1 for the USA, 44 for the UK). Make two kinds:
Don’t type hundreds of prefixes: open the card and click Import CSV to load your carrier’s price file at once.
Good to know: Rates are stored to 4 decimal places; a 5-decimal deck is rounded on import.
A trunk is the live connection to a supplier. Open Trunks → New Trunk. Two things matter:
After saving, use Test Call to prove it dials before pointing customers at it.
A trunk name can’t contain spaces — use IDT-GOLD, not IDT GOLD.
A routing group says: for this kind of number, try these trunks, in this order. Two dials:
If the first trunk is busy or fails, KatoCall falls to the next. Use Preview to type a number and see which trunk it would use.
An account is one customer. Open Accounts → New Account. The important choices:
Good to know: Every account that makes outbound calls needs a customer rate card covering the prefixes you sell — otherwise those calls are refused (never billed at zero).
A DID is a phone number people call to reach one of your customers. Open the account, go to DIDs → Add DID, type the number and where it forwards. (Save the account first.)
Every field in the panel has a small ? beside it explaining what it does, in all ten languages. Settings → Network pushes your setup to the phone engine after big changes.
Part 3
The dialer calls a list of numbers, plays a recorded message, and lets people press a key to be connected, call back, or opt out. Install step 12 must be done first.
Know what it is: this is a power dialer, not a predictive one. No answering-machine detection (a voicemail counts as answered) and no automatic pacing — you set a fixed number of simultaneous calls. It runs on one server at a time.
Open Dialer Campaigns → New Campaign. Pick the account it bills to, name it, set the pacing: Max Concurrent Calls, Max Attempts, and the Retry gap.
Upload the Prerecorded Message that plays on answer. Then build the IVR Menu — what each key does:
In the campaign’s Contacts section, click Upload CSV — a simple file of phone numbers.
Hit Start and it begins dialling within seconds; Pause stops it just as fast. When done, Download Results gives a file showing what happened to every number.
Part 4
Four commands cover almost everything you’ll do on the server.
sudo bash install/verify.sh # is everything healthy? sudo /usr/local/sbin/katocall-backup # take a backup now sudo bash install/upgrade.sh # apply a newer version sudo bash install/uninstall.sh # remove it (keeps your data)
Your backups sit on the same disk they protect. Copy them somewhere else on a schedule, or a disk failure takes the data and its only backup together.
Before you trust a revenue report, you can prove the books balance to the penny:
sudo -u softswitch admin/backend/venv/bin/python admin/backend/manage.py verify_ledger
Part 5
Whatever the problem, sudo bash install/verify.sh is the first thing to run. It checks ~65 things and names the script to re-run.