Buni.aiDocs
Voice (IVR)
Early accessVoice (IVR)

Quick start

Build a working phone menu, test it in the browser simulator, then connect it to a real phone number.

A working phone menu, tested in the browser, then connected to a real number. For the last steps you need a carrier account with a phone number.

Create the project

Create a project and choose Voice (IVR) as the type. Name it, for example "Support line".

A new Voice (IVR) project opens with a starter flow already on the canvas: an Incoming Call node, a Main Menu offering sales or support, a Play Message for each option, and an End Call. Every inbound call begins at Incoming Call.

Greet the caller

Open the Incoming Call node. Its Greeting is what plays the moment the call connects. Set it to something short:

Thanks for calling Kijani Bank.

Keep greetings to one sentence. A caller who rang with a question in mind is waiting through it.

Offer a menu

Open the Main Menu node, a Menu (voice). Set its Menu prompt:

For balances press 1. To pay a bill press 2. To speak to someone press 0.

Then set the Options to match: 1, 2 and 0, each with a label. Every option has its own output handle on the node, so you can wire each one somewhere different.

Do something with each choice

For a first flow, wire the options to a Play Message and an End Call, and the 0 option to a Transfer:

Incoming Call → Menu ─ 1 ─→ Play Message → End Call
                    ├─ 2 ─→ Play Message → End Call
                    └─ 0 ─→ Transfer

Transfer connects the caller to a phone number, a SIP endpoint or an available agent. Set its Before transferring prompt to "Putting you through now" so the caller knows what the silence means.

Handle the caller who does nothing

The Menu node has two extra exits, drawn muted:

  • If they press something else: an unrecognised key.
  • If they press nothing: silence until the timeout.

Wire both. A caller with a handset in a pocket, or one who does not understand the options, is not an edge case; it is a normal call. Left unwired, the call ends once the retries run out, with no explanation.

Try it in the simulator

Select Simulate. The call simulator drives the real call engine, so what you hear is what a caller gets. Press keys, follow branches, and watch each step. Simulated calls write no call records and use none of your voice minutes. See Simulators.

Publish

Select Publish. The canvas lists any problems it has found, and publishing refuses a flow the call engine cannot run. See Publishing.

Publishing creates a new version. It does not yet make your number ring; that is the next step.

Connect a phone number

  1. Add your carrier account as a credential on this project.
  2. Open Routes in the workspace navigation and select Import route.
  3. Set Type to Phone number (voice), enter the Phone number in international format, and choose your Provider, this Project and the Credential.
  4. Choose the Environment: Live points at your published flow, Draft at your working copy. A test number on Draft lets you dial a flow before customers can.
  5. Save, then open Webhook details on that row and paste the details into your carrier's console.

Per-carrier details are in Carrier setup and on the Routes page.

Call it

Ring the number. You should hear your greeting, then your menu.

If you hear nothing, or a carrier error, open the project's Activity tab. If the call is not listed there, the carrier never reached the webhook; check the URL and credentials.

Next steps

Last reviewed 25 September 2026

On this page