> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hiveku.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Set Up an IVR Auto-Attendant

> Build a press-1-for-sales menu with prompts, routing, and after-hours flow

This guide builds a complete IVR — the menu callers hear when they dial in. By the end you'll have a "press 1 for sales, press 2 for support" auto-attendant with time-based routing for after-hours, holiday handling, and a tested call flow.

Plan for 20-30 minutes if recording your own prompts; 10 minutes if using text-to-speech.

## Before you start

You'll need:

* A DID configured. See [Buy and Configure a Phone Number](/how-tos/buy-phone-number)
* The destinations you'll route to: at least one ring group, queue, or extension. See [Ring Groups](/communications/ring-groups) or [Queues](/communications/queues)
* Decisions about: business hours, holiday list, and what each menu key should do

## Step 1: Plan the menu

Sketch the flow before you build. A good first IVR has 3-4 options max.

```
"Thanks for calling Acme."
1 — Sales (Ring Group "Sales")
2 — Support (Queue "Support Hold")
3 — Billing (Extension 200)
0 — Operator (Extension 100)
[after 8 sec of silence] — replay menu, max 2 retries
```

<Tip>
  If you have more than 5 options, use sub-menus (1 for sales, then 1.1 for new customers, 1.2 for existing). Flat menus over 5 options exhaust callers' attention.
</Tip>

## Step 2: Create the IVR

<Steps>
  <Step title="Open the IVRs tab">
    `/dashboard/communications/` > **IVRs** > **New IVR**.
  </Step>

  <Step title="Name it">
    "Main Menu" is fine. If you'll have separate after-hours, holiday, and main flows, name accordingly.
  </Step>

  <Step title="Set the time zone">
    Defaults to your account TZ. This drives time-condition matching.
  </Step>
</Steps>

## Step 3: Add the greeting and menu prompts

<Tabs>
  <Tab title="Text-to-speech (fastest)">
    Type the greeting and menu scripts. Pick a voice (preview each).

    Greeting: "Thanks for calling Acme."
    Menu: "For sales, press 1. For support, press 2. For billing, press 3. For an operator, press 0."

    TTS regenerates instantly when you change the script — you can iterate freely.
  </Tab>

  <Tab title="Upload your own">
    Record on your phone (in a quiet room) or in a studio. Upload `.wav` or `.mp3`. Hiveku transcodes to G.711.

    Trade-off: human voice = more brand-feel, but every script change requires re-recording.
  </Tab>

  <Tab title="Hire a voiceover">
    Hiveku integrates with several voiceover services. Order from inside the IVR builder; the file lands as an upload when complete (hours-days).

    Worth it for high-volume customer-facing IVRs where polish matters.
  </Tab>
</Tabs>

<Tip>
  Start with TTS while you're iterating, then re-record the final version with a human voice once you're sure you like the script.
</Tip>

## Step 4: Map the menu keys

For each digit (0-9, \*, #), pick a destination.

<Steps>
  <Step title="Add key 1">
    Destination: Ring Group "Sales". Failover: Voicemail.
  </Step>

  <Step title="Add key 2">
    Destination: Queue "Support Hold". Failover: handled by the queue's overflow.
  </Step>

  <Step title="Add key 3">
    Destination: Extension 200 (Billing). Failover: Voicemail to billing\@.
  </Step>

  <Step title="Add key 0">
    Destination: Extension 100 (Operator).
  </Step>
</Steps>

## Step 5: Configure timeout and invalid

<Steps>
  <Step title="Timeout">
    Default 8 seconds (no key pressed in 8 sec). On timeout, replay the menu — set max retries to 2. After max retries, route to a fallback (voicemail or operator).
  </Step>

  <Step title="Invalid key">
    Caller pressed an unmapped digit (e.g., 5). Play "That's not a valid option" and replay the menu.
  </Step>
</Steps>

## Step 6: Add time-based routing

For after-hours, you want a different menu (or the same menu pointing at voicemail instead of ring groups).

<Tabs>
  <Tab title="Same IVR, different routes">
    Add a time condition to the IVR: during business hours, key 1 → Sales ring group. After hours, key 1 → Voicemail to sales\@. Caller experience is the same; routing changes silently.

    Pros: simpler, one IVR. Cons: only routes change, not prompts.
  </Tab>

  <Tab title="Two separate IVRs">
    Build "Main Menu (Business Hours)" and "Main Menu (After Hours)". Set the DID's time condition to switch between them.

    Pros: greeting can change ("Our office is closed, please leave a message"). Cons: two IVRs to maintain.
  </Tab>
</Tabs>

For most teams, the second approach (separate after-hours IVR) is clearer because callers hear "we're closed" instead of being routed to voicemail without knowing why.

## Step 7: Add a holiday calendar

Override the routing on specific dates.

<Steps>
  <Step title="Open Holiday Calendar">
    From the IVR's detail page > **Holidays**.
  </Step>

  <Step title="Add holidays">
    Hiveku ships a US federal holiday preset. Add or remove dates as needed.
  </Step>

  <Step title="Pick the holiday IVR">
    Either route holidays to the after-hours IVR, or create a holiday-specific IVR with a "We're closed for the holiday" message.
  </Step>
</Steps>

## Step 8: Point your DID at the IVR

<Steps>
  <Step title="Open the DID's detail page">
    `/dashboard/communications/` > **Numbers** > pick the DID.
  </Step>

  <Step title="Set inbound destination to your IVR">
    Replace whatever was there (extension, ring group) with **IVR > Main Menu**.
  </Step>

  <Step title="Save">
    The new routing is live within \~30 seconds.
  </Step>
</Steps>

## Step 9: Test from your own phone

<Steps>
  <Step title="Call your DID">
    Use your cell phone — different from the destination extensions.
  </Step>

  <Step title="Listen to the greeting and menu">
    Confirm both play and the audio is clean.
  </Step>

  <Step title="Press each digit">
    Test 1, 2, 3, 0. Confirm each routes to the right destination.
  </Step>

  <Step title="Test timeout">
    Stay silent for 8 seconds. Confirm the menu replays.
  </Step>

  <Step title="Test invalid">
    Press 5 (or any unmapped digit). Confirm the "not a valid option" message.
  </Step>

  <Step title="Test after-hours (or wait until after-hours)">
    Either temporarily change your business-hours window to "exclude now", or wait. Confirm the after-hours flow runs.
  </Step>
</Steps>

## Best practices

<CardGroup cols={2}>
  <Card title="Lead with the action" icon="arrow-up-right-from-square">
    "For sales, press 1" beats "Press 1 for sales" — callers listen for the verb.
  </Card>

  <Card title="Keep it under 30 seconds" icon="hourglass">
    Long greetings make callers hang up. Cut every word that doesn't earn its place.
  </Card>

  <Card title="Always offer 0 for operator" icon="phone">
    A live human escape hatch reduces abandon and frustration.
  </Card>

  <Card title="Don't use IVR for one-route lines" icon="filter">
    If everyone's going to the same place, skip the menu. Just route the DID directly.
  </Card>
</CardGroup>

## Troubleshooting

<AccordionGroup>
  <Accordion title="Callers say the greeting cuts off">
    Some carriers buffer the first second of audio. Add 200-500 ms of silence at the start of your greeting recording, or pre-pad the TTS prompt.
  </Accordion>

  <Accordion title="DTMF (key presses) aren't detected">
    Check the DTMF mode in the IVR's advanced settings. Default is RFC2833. If callers from a specific carrier can't reach options, switch to in-band detection.
  </Accordion>

  <Accordion title="After-hours flow runs at the wrong time">
    Check the IVR's time zone setting. It defaults to your account TZ but can be overridden. Daylight savings is handled automatically.
  </Accordion>

  <Accordion title="Holidays don't trigger">
    Confirm the holiday is on the IVR's calendar (not just the DID's). Time conditions are evaluated bottom-up: per-IVR > per-DID > account default.
  </Accordion>
</AccordionGroup>

## Next steps

<CardGroup cols={2}>
  <Card title="Queues" icon="users-line" href="/communications/queues">
    Add hold music and callback for IVR overflow.
  </Card>

  <Card title="AI voice agent" icon="microphone" href="/communications/voice-ai-agent">
    Replace the menu with a conversational AI.
  </Card>
</CardGroup>
