The price for accessing information in Africa is so expensive must households cannot afford it (over their meals). Due to this, they're forced to rely on getting information from neighbors and other local sources, for most of which provide very inaccurate and wrong information.
This had lead to some households neglecting the basic sanitation information put out by the WHO and other organizations, which leads to increase in number of infected cases on the content. Providing a cheaper/free means of getting reliable information has been welcomed by most households in our local country (Cameroon) already. Our initial approach was done manually, but we built open source tools which allows for any developer use in setting up automated versions with capability of scaling number of SMS receivers easily.
What it does
It allows individuals who have permitted us to send them SMS messages to receive daily SMS messages with information directly from WHO and its affiliate organizations. This messages are sent to individuals irrespective of the service provider they're registered on.
How I built it
I began by creating a platform which can interact with easily sourced 2G/3G USB modems (called Deku-Daemon). This platform runs on any Linux based operating system and is extremely easy to setup: link.
It can be customized to run as a system daemon.
Deku-Daemon uses a load distribution algorithm to distribute multiple SMS messages across as many modems as plugged into the computer system running it. It then stores the logs of each of this modems in a MySQL instance running locally on the system (template of structure in source code repo).
Deku-Daemon is ran along side an instance of Nodejs using nodejs web-sockets to communicate with a cloud server link. The cloud server providers API's which allow for transmitting bulk SMS request in JSON formats directly to the local systems. Hosted on the cloud server is a submission platform; it allows uploading of .csv files. The files are structured with headers of:
message, number, service_provider
And an example request of 6 messages looks like
message, number, service_provider
Once uploaded, it defaults sends to the listening local websockets identified by the UUID of the user who uploaded the file. The web-sockets send this messages to the listening Deku-Daemon which immediately begins distributing the request load and sending out the SMS messages to those intended. Images of instances of Deku-Daemon and the websockets attached below
Challenges I ran into
We had the assumptions the local service providers offered unlimited messaging capabilities as advertised when acquiring their services. This turned out to be a false assumption, so issues began when the intended amount of SMS messages couldn't be delivered for certain service provider. We experimented and later realized this. I updated the platform to account for this, and put in some use cases which allow for distributing across multiple modems more efficiently to bypass the daily limits per simcard.
We also have the technical difficulty of request blocking and how to efficiently distribute the request across multiple modems.
Accomplishments that I'm proud of
- This system was adopted by the local health authorities and is currently being used to efficiently remind patients with Tuberculosis when it's time for their treatment. It also is used to inform health workers of when patients TB results have been tested, this has helped reduce the time it takes for health care workers to get their patient results in remote areas. We have successfully used the system in sending out sanitation information to users in remote and rural parts of the country where information was scarce to reach ( we are yet to measure the impact this has had)
We successfully send out more > 3000 SMS messages a day, and have a running cost of < $20/month
- I was able to work on this with very limited resources and keeping it open source
What I learned
I learnt that the small things which are easy for me as a developer, and things I'd mostly neglect can actually be tools which when used in the right way can bring much joy to people. I also learnt to ask people about what are their problems, because sometimes I know how to solve it for them and help them have some relieve, but this will never happen if I don't ask
What's next for Experts-speak
We want to create an API which can allow any developer deploy the platform on their local servers and have free access to our cloud servers (or their own hosted cloud servers). We are also working on creating a portal which allows medical personnel connect directly to their own locally hosted servers to send health related information to their colleagues and possibly patients.
Try It out
bootstrap, c++, express.js, linux, mysql, node-html-parser, node-json-sockets, node.js, usb-modems