Quickstart
This walks you from "nothing configured" to "a call rings my extension" in one sitting.
Prerequisites#
- A ScaiGrid tenant with the
scaidial:trunks:manage,scaidial:extensions:manage, andscaidial:dialplan:managepermissions on your API key. (Tenant admins get all three.) - A SIP trunk from any ITSP — Twilio Elastic SIP, Telnyx, Voxbone, your own Asterisk / FreeSWITCH, etc. The credentials you need: server FQDN, username, password.
- One DID (phone number) the carrier will deliver to that trunk.
If you only have a carrier account but no trunk configured yet, do that first on the carrier side — ScaiDial registers as a SIP client to whatever you create.
1. Add the trunk#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
The response includes a sync_status field. Poll the trunk until it transitions to synced — that means livekit-sip has successfully REGISTERed to your carrier. If it parks in error, read sync_last_error for the carrier's response and either fix the credentials or retry via POST /trunks/{id}/resync.
If your carrier requires source-IP whitelisting, fetch the tuple to whitelist from GET /network-info: egress IPv4, SIP port, and the RTP UDP range.
2. Create a dialplan and an extension#
A minimal "ring my desk when anyone calls the DID" setup needs two objects: an extension to ring, and a dialplan whose only rule fires ring_extension on the always-match condition.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | |
3. Wire the DID to the dialplan#
1 2 3 4 5 6 7 8 9 | |
4. Test the inbound path#
Dial the DID from your phone. The dialplan fires the always → ring_extension rule, ScaiDial places the call into a LiveKit room, and your wave user gets a ring via the in-browser softphone (if they're logged into the admin) or via voicemail fallback after ring_timeout_s.
You can watch this happen live on the admin page at /scaidial/calls — the call appears in ringing, then active once you answer, then disappears when you hang up. The full record stays in /scaidial/history.
Next steps#
- Place outbound. With the same trunk synced, your owned extension can click-to-call any E.164 or SIP URI from
/my/dial. See concepts/architecture for the outbound flow. - Route to a bot. Change the extension type to
botand pointtarget_refat a ScaiBot bot ID. Calls land in a LiveKit room with the bot worker; no extra wiring on the ScaiBot side. - Add time-of-day routing. Use the
time_windowmatch type to ring different extensions during business hours vs. after-hours. The visual builder on/scaidial/dialplanshandles the day-of-week + start/end picker for you. - Forwarding rules. Each tenant user manages their own from
/my/dial: forward on busy, on no-answer, on unavailable, or always.