Buni.aiDocs
USSD
USSD

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.

The New project dialog with Channel set to USSD and the USSD provider field showing
USSD is the only channel that asks for a provider when you create the project.

When to use USSD

Reach them byWhen
USSDThey may have a feature phone and no data. Balance checks, airtime and bundle purchases, registrations, surveys, simple payments.
ChatbotThey 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.

  1. The customer dials your short code.
  2. The network passes the session to your aggregator.
  3. The aggregator sends a request to your project's Callback URL, with the session ID, the caller's phone number and what they typed.
  4. Your flow runs until it reaches a screen, and returns that screen's text.
  5. 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.

Nodes you can use

Conversation

AI

Logic

Data

Integrations

Next steps

Last reviewed 24 September 2026

On this page