name: africa-ussd-development description: Build USSD applications for African markets — menu design, session management, multi-operator integration, and user experience patterns for feature phones. version: "1.0.0" last-updated: "2026-04-22" model_tested: "claude-sonnet-4-6" category: africa platforms: [claude-code, codex, gemini-cli, cursor, copilot, windsurf, cline] language: en geo_relevance: [africa] priority: medium dependencies: mcp: [] skills: [africa-mobile-money] apis: [] data: [] update_sources:
- url: "https://africastalking.com/ussd" check_frequency: "yearly" last_checked: "2026-04-22" license: MIT
Africa USSD Development
DISCLAIMER: USSD regulations vary by country and operator. Verify with local telecom authorities.
When to Use
- Building apps for feature phone users (no internet required)
- Creating mobile money menus or services
- Designing interactive text-based interfaces
- Integrating with African telecom operators
USSD Fundamentals
USSD (Unstructured Supplementary Service Data) = real-time text session between phone and server. No internet needed. Works on ANY phone (feature phone or smartphone).
Key Constraints
| Constraint | Limit |
|---|---|
| Message length | 182 characters max per screen |
| Session timeout | 120-180 seconds (operator-dependent) |
| Input | Numeric only (0-9, *, #) |
| Navigation | No back button (must design "0 for back") |
| Connectivity | Real-time (not store-and-forward like SMS) |
Menu Design Patterns
Basic Menu
Welcome to MyService
1. Check balance
2. Send money
3. Buy airtime
4. My account
0. Exit
Pagination (Long Lists)
Select product (1/3):
1. Rice 5kg - 2500 CFA
2. Sugar 1kg - 800 CFA
3. Oil 1L - 1200 CFA
98. Next page
0. Back
Confirmation Pattern
Send 5000 CFA to Amadou (77X XX XX)?
1. Confirm
2. Cancel
Input Collection
Enter amount (CFA):
Then validate: numeric, min/max, divisible by denomination.
Session Architecture
Phone → *123# → Operator → Your Server (HTTP POST)
↓
Process + respond
↓
Response text (182 chars max)
↓
Phone displays
Server Response Format
Most operators expect:
CONprefix = continue session (expect more input)ENDprefix = close session
CON Welcome\n1. Balance\n2. Transfer
END Your balance is 15,000 CFA. Thank you.
Multi-Operator Integration
| Provider | Coverage | API |
|---|---|---|
| Africa's Talking | 20+ countries | REST, webhooks |
| Twilio | Limited Africa | REST |
| Infobip | 15+ countries | REST |
| Direct operator | Per country | SMPP/HTTP varies |
Africa's Talking (Recommended for Multi-Country)
POST callback URL receives:
- sessionId: unique per session
- phoneNumber: caller MSISDN
- text: accumulated input (separated by *)
- serviceCode: your USSD shortcode
UX Best Practices
- Max 3 levels deep — users lose context after 3 menus
- Always offer exit — "0. Exit" on every screen
- Confirm destructive actions — money transfers, cancellations
- Short messages — 182 chars including options
- Numeric shortcuts — power users dial full path:
*123*1*2# - Language selection first — if multilingual market
- Error messages clear — "Invalid choice. Try again:" not "Error 422"
- Session state on server — phone has no state
Testing
- Test with actual phones (emulators miss operator quirks)
- Test session timeout handling
- Test on slow networks (USSD can lag 3-5s per round trip)
- Test with different operators in target market
What This Skill Does NOT Do
- Does not provide USSD shortcodes (apply through operator)
- Does not handle SMS (different protocol)
- Does not manage telecom operator relationships
- Does not cover IVR (voice-based menus)