SMS Broadcast Script, by NUS Hackers

March 21, 2013

During the 24-hours hackathon organized by the NUS Hackers, a convenient SMS broadcast script was born, in cool developer’s fashion.

The NUS Hackers used the script to send SMS to the hackathon participants, announcing important events such as lunch/dinner/pizzas..

This is how you can use too:

  1. git clone
  2. Create a file (eg. phones.txt) with the phone numbers, separating each by a breakline
  3. Edit config file and enter your Hoiio App ID and Access Token, and also a sender name (if you don’t have SMS Rebranding enabled, enter your mobile number)
  4. Run ./ phones.txt 
  5. Enter your desired SMS message
  6. Press Ctrl-D
  7. Press y

If all’s good, you will see success_ok status!


Posted by:

Numbers for 6 New Countries

January 07, 2013

We have added local phone numbers support for 6 more countries:

  • Denmark
  • Finland
  • Israel
  • Norway
  • Spain
  • Sweden

If you follow our blog closely, you should know the above “commit” can be found on Github.

Tags: ,
Posted by:

Santa Call – A Christmas App For You

December 18, 2012

Santa Call plays your Mp3

Santa Call, Santa Claus, Santa all the way~

This Christmas, be different. Send your Christmas greetings via Santa Call.

Santa Call is a Chrome extension that let users send Christmas MP3 and play the music over a phone call.

With a few clicks on your Chrome, you can choose from the pre-selected Christmas MP3, or your own.

Enter your friend’s phone number, hit the Send button, and Santa Call will personally make the phone call to your friend, and play the MP3 :) Install now!

Happy magical X’mas!

Tags: , , ,
Posted by:

Call Me Back – Chrome Extension

December 13, 2012

Have you ever wanted to talk to a friend about a very important matter, but your mobile phone ran out of money?

Not a problem anymore.

Try out this new Chrome Extension: Call Me Back

Call me back

Image this scenario. You recalled something very important, and you wanted to call your friend/colleague/family immediately. You pick up the phone, dial the number, make the call, but unfortunately, your mobile phone has ran out of money..

What can you do?

No need for panic.

With Call Me Back, you can ask your friend/colleague/family to call you back (assuming it is free for you to receive incoming calls).

How to use?

1. Click here to install Call Me Back for your Chrome browser.

2. Once installed, click on the icon that is added to Chrome, and click on Settings. Enter your Hoiio API credentials in settings.

hoiio app id

3. Click on the icon, enter your friend’s phone number and a message, then Send.

4. (Optional) If it is very urgent, you can enable Voice Message. Instead of sending an SMS, a phone call will be made to your friend!

This could very well save your day?

Add this extension to your chrome , and let us know if you have any comments!

Tags: , , ,
Posted by:

Hoiio Pricing is all on Github

December 03, 2012

Today, we are taking a bold step towards pricing.

Hoiio API Pricing is now pushed onto Github, with version control, and fully transparent! Call it “open source”, if you like!

By going to our Github repos, you can

  • browse the comma delimited CSV files,
  • download all the pricing in all the 6 currencies we support,
  • watch the repos and get notified when we make any changes,
  • check out the changes (such as lowering of costs!)
  • comment on our commits,
  • and even fork, change, and push, if you felt the prices are incorrect!

Cheers to Github! It’s no longer just a tool for social coding.

As an example, let’s take a look at the last commit we did when we added support for UK phone numbers.

There were 12 changed files. The comment in the commit will tell you why we make the changes.

In Numbers-AUD.csv, it clearly shows an added line “GB, United Kingdom, 44, 2.1“.

(The phone number prefix for UK is 44, and the cost is $2.10 AUD)

You can also browse the tags, which we use as the date when that pricing is effective.

Tags: , ,
Posted by:

United Kingdom Numbers Now Available

November 29, 2012

We have added local phone numbers for United Kingdom.

Developers can now purchase UK phone numbers at $2 (USD) per month.

The UK numbers are capable of receiving phone calls via our IVR APIs, so start making use of them if you have a local service in UK!

Photo Credits: Eurovision

Tags: ,
Posted by:

Setup Your Company Directory with the free Google App Engine

November 05, 2012

Following our last PHP sample code, this time we are publishing a sample code using Java on Google App Engine.

Company Directory is a telephony application that let callers connect to company phones by keying an extension. You can find the full source code on github:

A screenshot of how you can configure your company directory after setting up:

Company Directory Webpage

We are using the awesome + free + reliable Google App Engine (Java) as the web server. Also Twitter Bootstrap. And of course Hoiio API.

Go ahead and fork the repository, and perhaps add new features such as Voicemail.

But if all seems too troublesome, how about trying Hoiio Main Line app for $5?

Tags: , ,
Posted by:

Developer Economics 2013 Survey

October 31, 2012

Our friends at VisionMobile are running their Developer Economics 2013 survey.

The survey focuses on the best practices for the tools, services and APIs that developers use to build, market and monetize their apps.

It takes just ten minutes and there are awesome prizes to be won! Fill out the survey and stand a chance to win an iPhone 5, Galaxy S3, Nokia Lumia 920 & BB 10 Dev Alpha.

Take the survey here:

PS: When taking the survey, remember to select Hoiio as a Voice Service, and let us know what you love/hate us for!

Posted by:

An Open Source Example: Auto Attendant

October 29, 2012

We have created an example app with PHP:

With Auto Attendant, you could dictate how your Hoiio number works when it is being called.

For example, with the following configuration,

$directory = array(
    '1'=>array('+6560001111',   "for sales enquiry"),
    '2'=>array('+6560002222',   "for technical support"),
    '3'=>array('+6560003333',   "to speak to our customer care officer"),
    '0'=>array('VOICEMAIL',     "to leave a voicemail message"),

The voice menu will be read over the phone call, and when the caller press “1″, it will transfer the call to the sales enquiry department. Or press “0″, it will record a voicemail message.

This example is fully open source, and we will be very happy if you fork it, and extended to suit your voice app. Let us know if you did something awesome!

Photo Credits: Jim Elyot’s Blog

Tags: ,
Posted by:

Under the hood: How we build Hoiio Apps

October 19, 2012

Over the last 2 months, we have launched 3 apps on our portal:

  • Main Line: a virtual PBX or a main number of any business
  • Conference: a convenient way to setup conference call
  • Fax: online fax system for business

As we launch more apps on Hoiio Platform over the next few weeks, we want to make sure our users will experience the highest quality of apps.

Today, we have completed testing a new version of Conference app that’s much faster, and more reliable than ever before. To understand how we achieved this, let’s take a look at how Hoiio has evolved on web application development.

Google Web Toolkit (GWT)
We have been using GWT in most of our products, from the user portal to our internal admin dashboard. We have built arrays of custom components that can be reused in any GWT project, making GWT the framework that every web project would start with in Hoiio. Our Apps are no exception. We started developing our apps using GWT and reused a number of major components to speed up the development process. However, we started to feel long in the tooth when feature creep sets in. We also felt the sluggishness of GWT. And as GWT is improved, some of our components and plugins were less relevant in new projects. In light of this, our new Conference app marks our first release without GWT.

Spring + jQuery
Our topmost priority is to ensure that regardless of device, platform or region, Hoiio users will have the best experience in accesing and using our Apps. For each app, we aim for simplicity, ease of use, reliability as well as efficiency of the apps. Yet, the very critical problem that we want to solve is speed. We know that it’s certainly not nice to let our users wait for more than 5 seconds to load an app. At that point, we believed native Javascript is the way to go, and we made a bold move, switching from GWT to a different stack: jQuery on client side and Spring framework on server side.

GWT tightly couples the server side and client side, which means any changes on the client side technology results in a complete rewrite of our app; adopting jQuery and Spring makes client and server side loosely coupled. This means if we, for some reasons, want to adopt another technology in server side, we can easily modify the server side’s code, expose the same sets of APIs to client side, and that’s it.

Main Line was the first app to use this architecture. The result was very positive: app loads faster, our users are happier, and our developers feel that’s the right way to craft our apps. Now, as our apps are gaining more users, and we are receiving positive feedbacks, our next focus are speedy maintenance and upgrade. And that is when we faced an issue that many Javascript developers considered a nightmare: managing Javascript.

Managing Javascript: The issues we are facing
The first problem we got with handcoding Javascript is maintaining states of the views. Right now, it’s rather easy to create great web applications with jQuery. However, our apps are constantly growing, making jQuery declarations and callbacks more complex, and are distributed all over the place. The code becomes more cluttered and hard to read.

The second problem is managing events for DOM elements. In fact, we already experienced the frustration on binding events to the spaghetti code mess that we had created at earlier time. For example, the first version of Conference app has around 15 events, 4 different types of data objects that interact with each other, and many DOM elements that depend on each other in certain ways like CSS effects. We feel that without a proper structure, we will soon face a lot of issues while maintaining our app.

Another problem we are experiencing is mixing HTML code inside Javascript. A good example is when retrieving data to fill a table, there are a lot of append() calls inside javascript. We think this is not a good approach.

BackboneJS, HandlebarsJS and RequireJS
We consider ourselves latecomer in adopting BackboneJS’s great technology. At a glance, BackboneJS gives us a tool to structure our client side code, allowing us to modularly organize our Javascript code so that it’s much easier to maintain and upgrade. It also provides an event-driven communication between views and models, in which events can be attached to any attribute of a model that gives us control over what we change in the view. BackboneJS alone solved most of our problems, and with HandlebarsJS templating engine, most, if not all, of our Javascript problems are solved.

RequireJS, on another hand, helps us further split BackboneJS’s module into separate Javascript files for ease in development. Now, for example, a User model will be located at user.js file, a Phonebook model will be located at phonebook.js file. This is very important to us as we can finally structure our client code in a very nice way.

The disadvantage in our approach is multiple Javascript files, which leads to multiple requests needed when serving our apps’ contents. Therefore, we further optimize our app using r.js: an optimizer for RequireJS which combine all our javacript into 1 javascript file and minified it, allowing for even faster response time. Now, whenever we develop, all modules are clearly defined and separated in many javascript files. Once we’re ready for deployment, our users will see only 1 highly optimized and minified javascript.

The fact: Speed comparison
We measure the speed of our app to demonstrate the performance gain we have achieved. Test machine is in Vietnam, server is in US. Same app is used during testing

Using GWT
First request (no cache) takes 13.6 seconds to complete.
Second request (with cache) takes 2 seconds to complete.

Using BackboneJS + RequireJS
First request (no cache) takes 3.6 second to complete.
Second request (with cache) takes 1 seconds to complete.

The results say it all. BackboneJS and RequireJS beat GWT in every ways: 4x faster without cache and 2x with cache.

Coming soon. For all apps.
We are committed to deliver quality apps. That’s why at Hoiio, we never stop to research the latest technologies that helps to create the best user experience. Conference app is now ready to deploy, and we are starting to make all other apps faster. Stay tuned.

Tags: , ,
Posted by: