Voicemail
Voicemail in SIP.IO is a route target like any other: a voicemail box you can send calls to from a flow, a number, or a queue/ring-group overflow.
The voicemail box
Section titled “The voicemail box”A voicemail row configures a mailbox:
{ "id": "vm_01jg8asp59ps9rtt7azhrhvcre", "account_id": "acc_01jf18ah3jeb5w6dfp27sgjsbt", "name": "Support after-hours", "greeting_media_id": "media_01j22nfknpx47prkr1dpm4yxtk", "skip_instructions": 0, "quota_mb": 200, "notify_email": "support@acme.example", "pin_secret_ref": "kv:vm:7:pin"}| Field | Purpose |
|---|---|
greeting_media_id | A media_file greeting. Omit to use the system vm-greeting prompt in the account language. |
skip_instructions | Skip the “record after the beep” instructions. |
quota_mb | Storage quota for the box. |
notify_email | Where to send new-message notifications. |
pin_secret_ref | PIN to retrieve messages: a key-value secret reference, never stored plaintext. |
A sip_user can have a default mailbox via voicemail_id.
Recording storage
Section titled “Recording storage”When a caller leaves a message, the media engine edge records it and uploads it to the private object storage bucket via the edge runtime’s /media endpoint, keyed as <account>/vm/<callId>.wav. A voicemail_message row is written so the box can list and play messages (caller, duration, timestamp). Because the bucket is private and served only through the IP-gated media proxy, recordings are never world-readable.
Routing to voicemail
Section titled “Routing to voicemail”There are three common ways a call reaches a mailbox:
-
From a flow: a
voicemailnode, typically on a menutimeout/invalidedge or atimeCondition’sout_of_hoursedge.{ "id": "vm", "type": "voicemail", "data": { "kind": "voicemail", "mailboxId": "vm_01jg8asp59ps9rtt7azhrhvcre" } } -
Directly from a number: set a DID/extension
dest_kind: "voicemail", or use the closed/holiday override to send after-hours calls to voicemail:{ "e164": "12025550123", "dest_kind": "flow", "dest_id": "flow_01jzqwjn803wtnhc445bvjenzc","schedule_id": "sch_01j0jvpe0wzc6g05bktfew0xyx", "closed_dest_kind": "voicemail", "closed_dest_id": "vm_01jg8asp59ps9rtt7azhrhvcre" } -
As queue/ring-group overflow: set a queue’s
timeout_dest/abandon_dest/no_agents_dest(or a ring group’sexit_dest) to a voicemail. See Overflow & Exit Destinations.
For a step-by-step, see Route after-hours calls to voicemail.