USSD overview
Build menu-driven services people dial from any phone, such as *789#, with no data connection or app.
A USSD project answers a short code. Someone dials a code such as *789# on any mobile phone,
their handset shows your first menu, they reply with a number, and your flow decides what to show
next. It works on feature phones, needs no data connection, and nothing has to be installed.
You build it on the same canvas as every other project type. The screens are Menu nodes; the logic between them is the usual Router, API, Data Store and Function nodes.


When to use USSD
| Reach them by | When |
|---|---|
| USSD | They may have a feature phone and no data. Balance checks, airtime and bundle purchases, registrations, surveys, simple payments. |
| Chatbot | They are on WhatsApp, web chat, Telegram, Messenger, Instagram or Slack. See Chatbot. |
| Voice (IVR) | They are calling you. See Voice (IVR). |
See Choose a project type for a longer comparison.
How a dial reaches your flow
You do not connect to the mobile network yourself. A USSD aggregator (or the carrier directly) owns the short code and forwards each step of the session to your project over HTTPS.
- The customer dials your short code.
- The network passes the session to your aggregator.
- The aggregator sends a request to your project's Callback URL, with the session ID, the caller's phone number and what they typed.
- Your flow runs until it reaches a screen, and returns that screen's text.
- The aggregator shows the text on the handset, and the next reply starts again at step 3.
You get the Callback URL when you publish, and paste it into your aggregator's dashboard. Going live walks through it, and the Routes page lists which short code points at which project.
Sessions
Each dial is one session. The aggregator gives it an ID, and Buni.ai keeps the session's state (the variables your flow has set) under that ID between replies, so later screens can use what earlier ones collected.
- Every new session starts at the project's Main menu. A flow has exactly one.
- A screen either keeps the session open and waits for a reply, or ends it. A Last menu always ends it, and so does any screen with nothing connected after it.
- The network, not Buni.ai, decides how long an idle session may stay open. Keep journeys short: a caller who takes too long is cut off and has to dial again.
Menus and sessions covers menu types, navigation and how session endings are sent to the aggregator.
Screen length
A USSD screen holds very little text. The Menu node counts the whole screen (the message, every option and every navigation line) against a limit of 160 characters, and shows the count as you type. Going over it is reported as an error on the node.
Plain text only
Emoji and most symbols do not display reliably on handsets. The canvas warns about "Invalid Special Characters" when a menu contains them. Letters, digits and common punctuation are safe.