The project is in a healthy, maintained state
This gem simplifies the integration of Emergent Technology's USSD Gateway into Ruby on Rails applications. It provides request parsers, response builders, and a base controller for clean USSD session handling.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

>= 0

Runtime

>= 6.0
 Project Readme

EmergentUssdGateway

EmergentUssdGateway is a Ruby gem that simplifies handling USSD requests from the Emergent Technology USSD Gateway. Built for Rails developers, it provides a structured way to parse USSD push requests, manage sessions, and send back valid JSON responses.


Features

  • Parse and normalize USSD initiation, response, release, and timeout events
  • Provide structured response builders for Response and Release
  • Easily integrate with any Rails app by subclassing a base controller
  • Mask input routes when expecting confidential entries like PINs
  • Optional local session tracking (in-memory, Redis, etc. - future versions)

Installation

Add this line to your Gemfile:

gem 'emergent_ussd_gateway'

Then run:

bundle install

Or install it directly:

gem install emergent_ussd_gateway

Usage in Rails

Create a controller that inherits from the gem’s base controller and implement your USSD logic by overriding handle_ussd.

# app/controllers/emergent_ussd_controller.rb
class EmergentUssdController < EmergentUssdGateway::BaseController
  private

  def handle_ussd(request)
    case request.type.downcase
    when "initiation"
      EmergentUssdGateway::ResponseBuilder.new(
        type: "Response",
        message: "Welcome.\n1. Check Balance 2. Change PIN 3. Request Support."
      )
    when "response"
      case request.message.strip
      when "1"
        EmergentUssdGateway::ResponseBuilder.new(
          type: "Release",
          message: "Your account balance is GHS 53,743"
        )
      when "2"
        EmergentUssdGateway::ResponseBuilder.new(
          type: "Response",
          message: "Enter your new PIN",
          mask_next_route: true
        )
      when "3"
        EmergentUssdGateway::ResponseBuilder.new(
          type: "Response",
          message: "Support: Call 1234 or email support@example.com"
        )
      else
        EmergentUssdGateway::ResponseBuilder.new(
          type: "Response",
          message: "Invalid option. 1. Check Balance 2. Change PIN 3. Request Support."
        )
      end
    else
      EmergentUssdGateway::ResponseBuilder.new(
        type: "Release",
        message: "Session ended."
      )
    end
  end
end

Add a route to your config/routes.rb:

post "/ussd-app", to: "emergent_ussd#ussd"

Example Payloads

Incoming POST from Emergent Gateway

{
  "Mobile": "233262183777",
  "SessionId": "abc123",
  "ServiceCode": "711",
  "Type": "initiation",
  "Message": "*711#",
  "Operator": "Vodafone"
}

Response JSON

{
  "Type": "Response",
  "Message": "Enter your PIN",
  "MaskNextRoute": true
}

Development

git clone https://github.com/smorttey/emergent_ussd_gateway.git
cd emergent_ussd_gateway
bin/setup       # Install dependencies
rake spec       # Run tests
bin/console     # Interactive dev console

To install locally:

bundle exec rake install

To release a new version:

  1. Update lib/emergent_ussd_gateway/version.rb

  2. Run:

    bundle exec rake release

Contributing

Bug reports and pull requests are welcome at: https://github.com/smorttey/emergent_ussd_gateway


License

This gem is available as open source under the terms of the MIT License.