Voicevoicemailbeta

Voicemail

Take a message: play the box greeting, beep, and record the caller into a voicemail box. The message is transcribed and delivered to the box members. Ends…

What it does

Takes a message. The node picks a voicemail box — the org's General box, an extension's personal box, a queue's box, a specific box, or whoever the call rang — plays that box's greeting (its after-hours greeting when the box's business hours say closed), beeps, and records the caller into the box. The message is then transcribed, summarised and delivered to the box's members (push, bell and email, per the box's settings).

The box, its greeting and its limits (maximum length, the key that finishes the message, the silence that ends it, the beep) come from Settings › Voicemail; the node can override the greeting, the maximum length and the beep. The Voicemail node is never gated by the call-recording add-on — it is not a call recording.

By default the node is terminal: after the message it says the box's thanks line and hangs up. Wire Then to continue the flow instead. The error handle fires only when no box could be found at all (not even the General box).

When the box has "AI receptionist takes the message" switched on (needs the AI receptionist add-on) and Let the AI receptionist take the message is left on, the AI receptionist asks for the caller's name, the reason for the call and a good callback time instead of the greeting and beep; the call is still recorded and the message lands in the same box with those details attached.

When to use it

  • The end of any "nobody answered" path — after Request agent, Request agent, a queue, or a transfer.
  • An after-hours branch of Check business hours (or skip the flow entirely: a number or an extension can send closed-hours callers straight to a box).
  • A "press 2 to leave a message" menu option.

Use Record caller's voice only for compliance or QA capture; it does not create a voicemail.

Configuration

Take a message: play the box greeting, beep, and record the caller into a voicemail box. The message is transcribed and delivered to the box members. Ends the call unless you wire "Then".

FieldLabelTypeRequiredDefaultNotes
boxSourceVoicemail boxselectOptionalgeneralOptions: general, extension, queue, box, auto.
extensionIdExtensionextensionOptional{{config.extensionId}}Its personal box takes the message. Also accepts a {{config.x}} / {{vars.x}} template.
queueNameQueuequeueOptional""The queue's voicemail box takes the message (the General box when the queue has none).
boxIdBoxvoicemailBoxOptional{{config.boxId}}Blank = the General box. Also accepts a {{config.x}} / {{vars.x}} template.
greetingGreetingselectOptionalboxOptions: box, text, audio, none.
greetingTextGreeting texttextareaOptional""Spoken to the caller before the beep. {{vars.x}} templates work.
greetingAudioGreeting audioaudioOptional—A recording from the Prompts & music library, played before the beep.
afterHoursGreetingUse the after-hours greeting when closedbooleanOptionalfalseWhen the box has an after-hours greeting and its business hours say closed, play that one instead. Only with "The box's greeting".
afterHoursForceThis path runs only when closedbooleanOptionalfalseAlways play the box's after-hours greeting, whatever the box's own hours say — for a branch that already decided the business is closed (an after-hours route). Only with "The box's greeting".
maxLengthSecsMaximum lengthselectOptional""Options: ``, 60, 120, 180, 300, 600.
playBeepBeep before recordingselectOptional""Options: ``, true, false.
allowAiLet the AI receptionist take the message when the box is set tobooleanOptionalfalseOnly when the box has "AI receptionist takes the message" on (needs the AI receptionist add-on). The AI asks for a name, the reason and a callback time; the call is still recorded.

Outgoing events: next, error

Examples

The ringing extension's box

Callers who reach nobody on extension-routed calls leave a message in that extension's personal box, with its own greeting.

{
  "id": "vm",
  "type": "voicemail",
  "config": { "boxSource": "extension", "extensionId": "{{config.extensionId}}" }
}

Whoever was rung, with a hold before the greeting

Request agent does not wait for an answer, so a greeting placed right after it plays while phones are still ringing. Size the hold to the target extension's own ring time (set on the extension) — Request agent has no ring-timeout field of its own.

[
  { "id": "ring", "type": "requestAgent", "config": { "extensionIds": ["{{config.extensionId}}"] }, "on": { "next": "hold" } },
  { "id": "hold", "type": "playMusic", "config": { "music": "{{config.holdMusic}}", "playSecs": "30" }, "on": { "call.playback.ended": "vm" } },
  { "id": "vm", "type": "voicemail", "config": { "boxSource": "auto" } }
]

Your own greeting, then continue

{
  "id": "vm",
  "type": "voicemail",
  "config": {
    "boxSource": "general",
    "greeting": "text",
    "greetingText": "Sorry we missed your call. Leave a message after the tone.",
    "maxLengthSecs": "120"
  },
  "on": { "next": "survey" }
}

Gotchas

  • Messages under 2 seconds are kept but shown as a missed call: no push, no email, not counted as unheard, not transcribed.
  • Callers tagged as spam still leave a message, but it goes to the box's Spam view with no notification.
  • Numeric settings accept templates. maxLengthSecs: "{{config.max}}" is rendered before it is read; the box's own limits (10–600 seconds) still clamp it.
  • boxSource: "auto" uses whoever the call last rang: one extension → its personal box; a queue → the queue's box; otherwise the General box.
  • The node answers the call if nothing upstream has, so a greeting is never played to an unanswered leg.
  • Handled by handle_voicemail in rust/crates/heyquad-walker-core/src/walk.rs; the box comes from POST /walker-data/v1/voicemail/resolve (rust/crates/hq-walker-data/src/voicemail_resolve.rs).

See also