Dialler providers
CXGear Dialler is provider-agnostic. Configuration, IVR, softphone, and call control use the same product model; each backend implements an adapter.
Shared model
Section titled “Shared model”Provider (Asterisk | Twilio | Exotel | …) └── Trunk + DIDs └── Call routes (pattern / DID → agent | queue | IVR flow)| Concept | Where it lives |
|---|---|
| IVR menus, prompts, DTMF | Dialler → IVR (generic) |
| Softphone Online / dial | Adapter decides SDK (none, twilio_voice, …) |
| Voice / status / IVR webhooks | /api/v1/telephony/webhook/* (one URL for all providers) |
| Call control (hangup, transfer, …) | Adapter applyCallControl |
Webhook URL (all providers)
Section titled “Webhook URL (all providers)”Set PUBLIC_API_URL to your public API base, then point the provider’s voice webhook to:
{PUBLIC_API_URL}/api/v1/telephony/webhook/voice
Also available: /telephony/webhook/status, /telephony/webhook/ivr.
Softphone
Section titled “Softphone”GET /dialler/softphone/capabilities returns the active provider’s SDK. The browser loads that driver only when needed (desk phones use sdk: none).
Adding a provider type
Section titled “Adding a provider type”- Catalog entry in
packages/shared/src/dialler.ts(credential fields) - Adapter in
apps/api/src/lib/dialler-adapters/ - Register in
dialler-adapters/index.ts
IVR and wallboard do not change — they speak abstract instructions (play, gather, dial_client, …).