A modular USSD application for emergency rescue services in Rwanda, built with Express.js and Africa's Talking API.
- Multi-language Support: English, Kinyarwanda, French, and Kiswahili
- Emergency Reporting: Report various types of emergencies (Fire, Medical, Assault, etc.)
- Distress Alert: Quick SOS button for immediate emergencies
- Community Posts: Access news and events
- Hotlines: Quick access to emergency contact numbers
- Session Management: Maintains user context throughout the USSD session
- Clone the repository:
git clone https://github.com/ndizeyedavid/INKINGI-Rescue-AT-Server
cd INKINGI-Rescue-AT-server- Install dependencies:
npm install- Create a
.env.localfile:
PORT=8080
AT_API_KEY=your_africas_talking_api_key
AT_USERNAME=your_africas_talking_username
GEMINI_API_KEY=your_gemini_api_key- Start the server:
npm start # Production with nodemon
npm run dev # Development mode- Add menu to
src/config/ussdMenus.js:
export const ussdMenus = {
// ... existing menus
newMenu: {
text: `CON Your menu text
1. Option 1
2. Option 2
0. Go back`,
options: {
1: "nextStep1",
2: "nextStep2",
0: "previousMenu",
},
},
};- Add handler in
src/controllers/ussdController.js(if terminal action):
export const terminalHandlers = {
// ... existing handlers
newHandler: (userData) => {
// Your logic here
return `END Response message`;
},
};Create a new file in src/middlewares/ and import it in server.js:
import { yourMiddleware } from "./middlewares/yourMiddleware.js";
app.use(yourMiddleware);Access session data using the sessionManager:
import { sessionManager } from "../utils/sessionManager.js";
// Get session
const session = sessionManager.getSession(sessionId);
// Set session data
sessionManager.setSession(sessionId, { key: "value" });
// Get/Set language
const lang = sessionManager.getLanguage(sessionId);
sessionManager.setLanguage(sessionId, "en");- Use Africa's Talking Simulator: https://simulator.africastalking.com/
- Or use ngrok to expose your local server:
npm run ngrokGET /- Health check endpointPOST /ussd- Main USSD endpoint (receives Africa's Talking callbacks)
Africa's Talking sends POST requests with:
{
"sessionId": "unique_session_id",
"serviceCode": "*123#",
"phoneNumber": "+250788123456",
"text": "1*2*3"
}