Phone Numbers & Telephony Setup
Configure multi-trunk telephony providers, bind inbound/outbound DIDs, set up caller-ID pools, configure live call transfers, and enable Voicemail / AMD detection.
Phone Numbers & Telephony Setup
Talkar supports connecting multiple carrier trunks per organization under Telephony Configurations across 7 production telephony providers plus 1 Mock simulator, letting you route inbound DIDs to specific agents, balance outbound campaigns across caller-ID pools, transfer live calls to human teams, and detect voicemail machines.
1. Multi-Trunk Telephony Configurations & Phone Numbers
Organizations can hold multiple carrier configurations (for example, a Plivo trunk for India, a Twilio trunk for US/global numbers, and an Asterisk ARI trunk for on-prem PBX routing), with one trunk marked as Default Outbound.
Adding Phone Numbers & Ownership Validation
Each phone number lives under a specific Telephony Configuration:
- Accepted Address Formats: E.164 (
+918061234567,+14155551234), 8–15 bare digits when accompanied by an ISO-2country_code(e.g."IN","US"), short extensions, or SIP URIs (sip:/sips:). - Immutability: Once created, a phone number's
addresscannot be edited—to change a number string, delete the entry and add the updated number. - Global Ownership Conflict Guard (
HTTP 409): Talkar checks whether an active DID is already owned by another organization (or already registered on the trunk) and rejects conflicting registrations withHTTP 409 Conflict. - Single-Call Caller-ID Resolution Order: When placing a single outbound call:
- If
from_phone_number_idis explicitly provided, it must belong to the selectedtelephony_configuration_id(mismatch or inactive number rejects cleanly). - Otherwise, Talkar uses the trunk's
is_default_caller_idactive number. - Otherwise, Talkar picks an available active number from that trunk's pool.
- If
- Bulk Campaign Pooling: Bulk campaigns rotate outbound calls across all active numbers in the trunk's pool (or prioritize a per-row
caller_numberwith20swait fallback).
Canonical Inbound Routing & Carrier Webhook Sync
- Canonical Inbound Webhook:
POST /api/v1/telephony/inbound/run(plus/fallbackfor carrier error fallback; legacy/inbound/{workflow_id}routes are deprecated). - Assigning
inbound_workflow_id: Assigning a published workflow to an active DID automatically syncs upstream routing; clearinginbound_workflow_idor deleting the DID detaches upstream hooks first. - Per-Number Sync vs. Shared Carrier App Sync:
- Twilio & Vobiz: Sync per phone number whenever you attach or detach an inbound workflow (
TwilioupdatesVoiceUrlandStatusCallbackdirectly on theIncomingPhoneNumberresource). - Plivo, Telnyx, Cloudonix & Vonage: Share an Application / Call Control webhook URL pointing to
/api/v1/telephony/inbound/run. For Vonage, configuresignature_secretand enablesigned_callbacks=truefor verified callbacks.
- Twilio & Vobiz: Sync per phone number whenever you attach or detach an inbound workflow (
- Common Inbound
TelephonyErrorCauses: Carrier webhook hits an inactive trunk, unassigned or inactive DID, missing/unpublishedinbound_workflow_id, an organization in suspension or pre-live build stages (under_review,pending_approval,info_requested,approved,agent_building), or failed wallet/concurrency admission checks.
2. Supported Telephony Providers (7 Production Providers + Mock)
| Provider | Sample Rate | Auto-Configures Carrier App on Save? | Live Call Transfer | Key Notes for Builders |
|---|---|---|---|---|
Plivo (plivo) | 8000 Hz | Yes (creates Plivo Application if application_id omitted) | Yes | Primary trunk for Indian DIDs (auth_id, auth_token, optional application_id). Shared App webhook model. |
Twilio (twilio) | 8000 Hz | No (updates VoiceUrl + StatusCallback per number on attach/detach) | Yes | Supports carrier-level Answering Machine Detection (amd_enabled). |
Telnyx (telnyx) | 8000 Hz | Yes (creates Call Control App if connection_id omitted) | Yes | Add Mission Control webhook_public_key (Ed25519) to clear security config warnings. |
Vonage (vonage) | 16000 Hz | No (manual application_id + RSA private_key) | — | Enable signed_callbacks=true + signature_secret. Uses 16 kHz wideband telephony audio. |
Cloudonix (cloudonix) | 8000 Hz | Yes (creates cxml Voice App if application_name omitted) | Yes | Automatically normalizes .cloudonix.net domain suffixes. Supports External Agent Stream WS (WS /api/v1/agent-stream/{provider_name}/{workflow_uuid}). |
Vobiz (vobiz) | 8000 Hz | Yes (creates Vobiz Application if application_id omitted) | — | Indian SIP/voice carrier (auth_id, auth_token, optional application_id). Per-number callback updates. |
Asterisk ARI (ari) | 8000 Hz | No (uses existing Stasis app via ws_client_name) | Yes (Stasis bridge) | Supports optional VICIdial / External PBX integration when feature-gated on the organization. |
Mock Simulator (mock) | 8000 Hz | Built-in test simulator | — | Soak-testing simulator with weighted outcomes (completed, busy, no_answer, carrier_error). ₹0 billing. |
Media WebSocket Close Codes
Carrier media streams connect over WebSockets (WS). Unexpected session rejections return explicit close codes:
4401— Unauthorized / invalid authentication signature or credentials.4409— Conflict (duplicate active session or concurrency conflict).4400— Bad request (missing required media parameters or invalid workflow/run state).
Editing saved telephony credentials
Saved secrets are returned masked in the UI and API. Re-submitting masked placeholders on update safely preserves existing secrets without overwriting them, though you cannot switch the provider type of an existing configuration.
3. Live Call Transfers (transfer_call)
To escalate a call to a human agent, queue, or SIP destination, attach a transfer_call tool to an Agent node.
Destination Resolution Modes
Mode (destination_source) | How Destination Is Chosen | Typical Use Case |
|---|---|---|
static | Fixed E.164 number, SIP URI (PJSIP/1234), or template string like `{{initial_context.transfer_destination}}` | Forwarding every qualified caller to one sales ring group or supervisor DID. |
dynamic | Calls an HTTP resolver URL (timeout_ms 500–5000, default 3000) with Vault auth, parameters / preset_parameters, and automatic OAuth2 401 token refresh retry | Checking office hours or CRM account owner in n8n.talkar.in and returning {"transfer_context": {"destination": "+91...", "custom_message": "..."}}. |
context_mapping | Maps a value in gathered conversation context against 1–100 configured routes + a fallback destination | Feature-gated for External PBX / Asterisk ARI workflows (requires the organization's External PBX feature flag). |
Key Transfer Settings
- Pre-transfer announcement (
messageType): Play"none","custom"TTS text, or"audio"(a pre-recorded clip viaaudioRecordingId) before bridging the caller. - Ring Timeout (
timeout):5to120seconds (default30s) waiting for the destination leg to answer.
4. Voicemail & Answering Machine Detection (AMD)
Talkar provides two independent mechanisms to detect answering machines and save minutes on unattended calls:
- Carrier-Level AMD (Twilio trunks only): Enable
amd_enabledon your Twilio telephony config. Twilio evaluates the call answer pattern and reportsanswered_by(machine_start,machine_end_beep,machine_end_silence,machine_end_other, orfax), appendingvoicemail_detectedtocall_tagsand triggering campaign voicemail retries if enabled. - In-Pipeline LLM Voicemail Detection: Enabled per workflow inside workflow settings (
voicemail_detection, using either the workflow LLM or a dedicated fast detection model with along_speech_timeoutdefaulting to8.0s). Automatically disabled on Realtime Speech-to-Speech workflows. When triggered, Talkar terminates immediately withmapped_call_disposition = "voicemail_detected"and skips final variable extraction.
5. Concurrency Limits, Channel Rejections & Slot Recovery
- Organization Concurrency Cap: Organizations enforce a Concurrent Call Limit (default platform cap
10, customizable per org). Sub-organizations under a Master Org can also enforce individual sub-org concurrency caps alongside the master fleet cap. - No Queuing on Real-Time Channels: Single calls, inbound calls, and WebRTC playground sessions reject immediately if slots are full or quota fails:
| Channel | Concurrency Rejection | Quota / Wallet Rejection |
|---|---|---|
| HTTP Outbound API | HTTP 429 (limit reached) or HTTP 503 (concurrency service unavailable) | HTTP 402 Payment Required |
| WebRTC Playground | WS error concurrency_limit_exceeded / concurrency_service_unavailable | Blocked pre-session |
| Inbound Telephony | Carrier XML rejection with CONCURRENT_CALL_LIMIT | Carrier hangup / TelephonyError |
- Crash Recovery: Active call slots send heartbeats every
10s; any crashed or hung session older than stale thresholds (120sheartbeat miss or40 minmax duration) is automatically reclaimed so capacity never leaks permanently.
Talkar Service API Reference
Programmatically launch outbound calls, poll or SSE-stream live transcripts, read wallet/transactions, upload S3 files, integrate public web embeds, and call Talkar Automation APIs.
Running Bulk Campaigns
Prepare campaign CSVs, configure caller-ID pools, calling schedules, retry rules, circuit breakers, and launch, monitor, or redial outbound campaigns safely.