Skip to main content
Voice is telephony in your system: call from a workspace number, speak text (TTS), play audio, collect digits (DTMF), and hang up or transfer, without building carrier and SIP trunk infrastructure from scratch.

What is Voice on Notifique?

It’s the channel to originate and control phone calls using numbers contracted in the workspace. Great for order confirmation, simple IVR (press 1, 2…), dialers, and inbound handling with events on your URL. You can:
  • Originate outbound calls with TTS, audio, or DTMF collection
  • Control the active session in real time (speak, gather, transfer, hangup, etc.)
  • Record call segments and download the file later
  • Receive inbound calls with forwarding, TTS, or webhook control
  • Track each step via API or webhooks
Think of a lean phone system: dials, speaks, listens for keys, and notifies your backend at every step.
Unlike WhatsApp, voice does not use a channel instance. You need an ACTIVE workspace number, balance or credits (per-minute billing), and an API Key with the right scopes.

When to use it?

Works great for call confirmation, DTMF IVR menus, and call recording for audit. If you only need text on mobile, prefer SMS or WhatsApp. Without a contracted ACTIVE number, the channel cannot dial.

How it works in practice

  1. Contract and activate a number, see Phone Numbers
  2. Originate with from (your number), to (E.164 destination with +), and the initial prompt (speak, playAudioUrl, gather, etc.)
  3. The platform dials, connects, and updates status; webhooks notify each step
  4. Control the active session with API actions, scope voice:control
  5. Inbound: configure inboundVoiceAction on the number (FORWARD, TTS_HANGUP, WEBHOOK_CONTROL)
Each API Key belongs to one workspace. On v1 do not send x-workspace-id. Use clientState to correlate with your CRM or queue.

Call lifecycle

After originate, the call moves through QUEUED, INITIATED, RINGING, ANSWERED, COMPLETED, or FAILED. Webhooks like voice.call.answered and voice.call.completed keep your backend in sync without polling.

What you can do

  • Originate to 1 to 100 destinations per call (to as array)
  • List and query history (voice:read)
  • Run actions on active calls (voice:control)
  • Download recordings when voice.call.recording.ready arrives
  • Detect voicemail with machineDetection
  • React to number lifecycle (phone_number.activated, phone_number.suspended, etc.)
Field and error details: API reference on the Voice tab. Billing: Billing.

After your first call

  • Track via webhooks (voice.call.* and phone_number.*)
  • Build IVR with gather + voice.call.dtmf / voice.call.gather.ended
  • Test inbound with WEBHOOK_CONTROL on the number

Next steps