message.comDevelopers

Smart Hold Planned

The hero feature of message.com phones. When a caller waits past the activation threshold, Smart Hold engages them. AI introduces itself as AI (always honestly), offers to help, or simply keeps them company. The human agent picks up to a full transcript and a structured summary so they are caught up instantly.

Competitors do AI-replaces-human ("you call, AI answers"). We do AI-augments-the-wait. People hate hold music. People like talking to AI while they wait, when a human is on the way.

How a Smart Hold call sounds

The flow is deliberately honest. Smart Hold never pretends to be a human.

  1. Caller dials in, joins the queue.
  2. Wait time passes the threshold (default 5 minutes).
  3. The cloned brand voice plays: "Hi, this is an AI from Acme. A human will be with you in about two minutes. Want help while you wait, or would you rather hold? I can also take a message and have someone call you back."
  4. If the caller engages, AI uses retrieval (KB) and tools (your order DB, Shopify Admin, etc.) to handle whatever it can.
  5. When the human agent becomes available, they see the live transcript and a one-paragraph summary. The handoff is silent: the caller hears the human, not an awkward bridge.
  6. If AI fully resolves the request, the caller can hang up before the agent picks up. Saved time on both sides.

Why this design

Customer-support phones have a structural problem: queue wait kills CSAT more than any other factor. Two common "solutions":

  • Hire more agents. Unit-economics nightmare for SMBs.
  • Replace agents with AI. Customers hate it; brand trust craters.

Smart Hold splits the difference. The human stays in the loop; AI fills the dead time. Done well, it converts queue wait from a brand liability into a brand asset.

Configuration

Smart Hold is opt-in per phone number. Each DID can have its own threshold, voice profile, personality, and on/off schedule.

PATCH /api/v1/phone-numbers/:id
// PATCH /api/v1/phone-numbers/:id
{
  "smartHold": {
    "enabled": true,
    "activationThresholdSeconds": 300,
    "voiceProfileId": "uuid",
    "personality": "warm",
    "scheduleOverrides": [
      { "dayOfWeek": "Mon", "startHour": 9, "endHour": 17, "enabled": true }
    ]
  }
}
  • Activation threshold. Seconds in queue before Smart Hold engages. Default 300 (five minutes). Set lower for premium queues, higher for low-volume hours.
  • Voice profile. A cloned brand voice (see voice cloning) or one of our defaults.
  • Personality. warm, professional, energetic, calm, or custom.
  • Schedule overrides. Disable Smart Hold entirely during specific hours, useful if you prefer dead silence after-hours.

Tools Smart Hold can use

Smart Hold runs the same tool-calling loop as the AI Receptionist. It has access to your custom tools: order lookup, account status, FAQ retrieval, scheduling. If a tool requires a write (refund, cancellation), AI proposes; the human agent approves on handoff.

The handoff

When the human agent becomes available, two things happen in parallel.

  • The caller is bridged to the agent. AI does not announce the handoff (silent transfer).
  • The agent sees a panel with the live transcript and a structured summary: caller intent, what AI tried, what AI confirmed, what is still open.

If the caller hung up after AI fully resolved the request, the conversation is marked solved with a transcript attached. No human time spent.

Billing

A Smart Hold session that actually engages the caller counts as one AI engagement. Sessions that activate but never speak (caller hangs up first) do not count. See AI engagements API.

Common pitfalls

  • Threshold too low. Engaging at 30 seconds feels intrusive. Five minutes is the sweet spot for most queues.
  • No voice profile. The default voice works fine, but a cloned brand voice raises perceived quality dramatically. Record a 15-second sample once.
  • Tools without auth scopes. If your order-lookup tool requires a caller phone number, ensure the caller's caller-ID maps to a customer record; otherwise AI cannot personalise.