Skip to content

ndizeyedavid/INKINGI-Rescue-AT-Server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

INKINGI Rescue - USSD & SMS Backend Server

A modular USSD application for emergency rescue services in Rwanda, built with Express.js and Africa's Talking API.

Features

  • 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

Installation

  1. Clone the repository:
git clone https://github.com/ndizeyedavid/INKINGI-Rescue-AT-Server
cd INKINGI-Rescue-AT-server
  1. Install dependencies:
npm install
  1. Create a .env.local file:
PORT=8080
AT_API_KEY=your_africas_talking_api_key
AT_USERNAME=your_africas_talking_username
GEMINI_API_KEY=your_gemini_api_key
  1. Start the server:
npm start       # Production with nodemon
npm run dev     # Development mode

Development

Adding New Menu Items

  1. 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",
    },
  },
};
  1. Add handler in src/controllers/ussdController.js (if terminal action):
export const terminalHandlers = {
  // ... existing handlers
  newHandler: (userData) => {
    // Your logic here
    return `END Response message`;
  },
};

Adding Middleware

Create a new file in src/middlewares/ and import it in server.js:

import { yourMiddleware } from "./middlewares/yourMiddleware.js";
app.use(yourMiddleware);

Session Management

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");

Testing USSD Locally

  1. Use Africa's Talking Simulator: https://simulator.africastalking.com/
  2. Or use ngrok to expose your local server:
npm run ngrok

API Endpoints

  • GET / - Health check endpoint
  • POST /ussd - Main USSD endpoint (receives Africa's Talking callbacks)

USSD Request Format

Africa's Talking sends POST requests with:

{
  "sessionId": "unique_session_id",
  "serviceCode": "*123#",
  "phoneNumber": "+250788123456",
  "text": "1*2*3"
}

Implementation Plan

IMG_0382

About

INKINGI RESCUE Africa's Talking server for USSD and SMS gateways | Model used: Gemini Flash Lite

Topics

Resources

Contributing

Stars

Watchers

Forks

Contributors