I am working on an application in the Mobile/VOIP domain. This is really a gray area for me. Here are some details about the application:
- This is basically like an auto recharge / prepaid mobile service
- Will have logic of medium complexity compared to previous ERP apps I've written.
- The Views sections in the response will be plain text, which will be sent as SMS/USSD pull to user and Voice XML (VXML) that will be sent as an IVR Response to users.
- The routing logic is very simple, as only two to three URLs will be important for each type of reply.
Constraints:
We have the core system built in Perl (it's a legacy system which is serving many other VOIP/Mobile-related services), and an accounting system to keep track of profit and loss, but it has grown very complex. So we decided to make this application separately, and only use SMS/USSD and IVR. However, every user of this application has to be a registered user of the core system for accounting purposes; this we can easily achieve by just an API call.
Now, for sending a reply/response for IVR and USSD, we need to deploy the application at the vendor which provides these facilities. But we don't want to always need to log-in to their servers for daily reports and accounting stuff as, for each of our clients, we will have different flows for the USSD/SMS/IVR System.
So, we decided this new application will be indeed divided into two sub-applications.
- One application will handle the USER Interface with USSD/SMS/IVR domain and will be deployed on vendor's servers, which we will call "clientware".
- The second application will handle all core business logic and reporting systems and will be deployed on our servers, where we will have full access. We will call this "middleware".
The basic flow of the application:
- The user dials the shortcode.
- Call lands on our vendor servers where clientware app will handle the request and register it as a user in its local database.
- Clientware will also make an API call to middleware. To register this user over there as well for core business logic timely auto recharge, etc.
- The middleware will then also make API call to the core system to register this user over there as well for accounting purposes.
Now, there will be many such clientware applications interacting with a single middleware application. We have decided to build these applications in Ruby. I would be following RESTful architecture for this, as lots of API calls are involved.
Of the three frameworks, Rails, Padrino, or Sinatra, are any of them specially suited for this project? I would appreciate a good comparison detailed relevant pros and cons, if possible.