Buni.aiDocs
USSD
USSD

Menus in several languages

Show each caller your USSD menus in their own language, let them pick one, and keep every screen within its length.

With built-in translations, you write each menu once and add its translations, and Buni.ai shows each caller the screen in their language. The numbers a caller presses never change, so your flow routes the same way in every language.

Set up the languages

Open Project settings and select the Languages tab.

SettingWhat it does
Your flow is written inThe language your menus are written in. A caller Buni.ai has no other language for sees these.
Languages you serveThe languages you translate into. A screen is only shown in a language listed here.
For other languages, useWhich served language a caller gets when theirs isn't served. For example, Wolof speakers can get French instead of the original.
Remember each caller's languageOn by default. Saves the language a caller picks on their contact, so their next session, SMS and chats use it too.
Send SMS in plain lettersOff by default. See Screen length and accents.

Language settings are built into your service when you publish. Save, then republish for them to reach callers.

Which language a caller sees

Each session starts in the first of these that Buni.ai has:

  1. The language the caller picked in a language menu, in this session.
  2. The language saved on their contact, from a language menu in an earlier session, or from conversations with your chatbots.
  3. The original, as you wrote it.

The language is in {{state.lang}}, so a Router can branch on it, for example state.lang === "fr".

Translate a menu

  1. Open a Menu node. Under Translations, pick a language.
  2. Each piece of the screen is listed with its original above an input for the translation.
  3. Save the node, then republish.
Editor modeWhat is translated
StructuredThe Menu Message, each option's label, and each navigation label, such as Back. The numbers in front of them are never translated.
LegacyThe whole Menu Title. A translation must offer the same numbered options in the same order, such as 1. and 2.; publishing waits until it does.

A piece with no translation shows its original, inside a screen that is otherwise translated. A translation uses the original's variables, such as {{state.balance}}, and can't add one of its own.

To translate every menu at once, open the canvas's More menu and select Translations. See The Translations workspace, which works the same way for USSD, including Translate with AI and translator sheets.

Let callers choose a language

  1. Add a Menu node, usually your Main menu, and switch it to the Structured editor.
  2. Under Menu Options, select Language menu. It adds one option per language the project serves, each in its own language, such as 1. English and 2. Français.
  3. Write a short Menu Message, such as Choose a language, and connect the menu's output to the menu that should come next.

When a caller picks an option, every screen from the next one on is in that language, and with Remember each caller's language on, it is saved on their contact. Next time, their session starts in it, so you can offer the language menu once rather than on every visit, for example as an option on your Main menu.

The language names are not translated: each is already written in its own language.

Screen length and accents

A USSD screen safely holds 160 characters. One character outside the basic SMS alphabet, such as ê, ç, ɛ or an emoji, switches the screen to the alphabet for all languages, which holds about 70. A French or Twi translation can therefore be cut where the original fits.

When you publish, Buni.ai checks each language's screens and warns about one that is too long. Shorten it, or turn on Send SMS in plain letters, which shows those characters in plain letters on screens and in SMS: ê as e, ç as c. Letters the basic alphabet has, such as é and à, stay as they are.

What else follows the caller's language

  • SMS from your flow. A Messaging node sends in the caller's language when its message has a translation. See Messages in several languages for its Send in setting.
  • Integrations that send a message, such as a WhatsApp template or an email, in the same way.
  • AI Agent nodes are told the caller's language and answer in it.
  • The error screen. "Something went wrong please try again later" is shown in English, French, Portuguese, Spanish, German, Dutch, Swahili, Kinyarwanda and Twi.

The AI builder

When you ask the AI builder for a USSD service in several languages, it writes each menu once with its translations, and can add a language menu. Add the languages under Languages you serve for them to be shown.

Last reviewed 7 October 2026

On this page