The Famous4Money team was Jairo Canales, Francisco, Sergio, Mar, and Natalia. The hack was created to cover a humanitarian goal. We thought that there is a great opportunity to take some of our free time to make a small contribution to society. The idea in this case was to make people that do not collaborate very often with humanitarian causes, do it in the most favourable way. We thought about a triple win situation:
- A “famous” person makes themselves available without receiving any money. They get advertising to promote whatever they want to talk about, for example, their TV show, a new album, or their humanitarian causes.
- A “normal” person pays for talking with the famous person. This may be the dream of his/her life.
- A humanitarian cause, that receives all the money that the “normal” people are willing to pay.
Technical part
In making our idea a reality, we thought of the following usability:
- A user opens a webpage and sees a list of famous people and their availability
- The user selects the famous person that he wants to talk to and he can buy a slot of time of the famous person
- After the slot of time is bought, the user only has to log in at the time of the slot.
- Some time before it’s the turn of the user, a reminder SMS is sent to the user.
- In case the user is present in his turn, a WebRTC conversation between the user and the famous person is connected. When the time-slot is ended the conversation is automatically hung-up.
- In case the user is not present in his turn, the famous automatically calls the telephone number of the absent person, using the click-to-call pattern.
Getting deeper into the use-case, we thought that using WebRTC for the private conversations would be great. It is in fact very easy to get a one to one videocall implemented, specially following the apprtc (https://apprtc.appspot.com/ ) example. In addition, it does not require an improved infrastructure in our case, as all the media is peer-to-peer.
In order to make easier the click-to-call part of the usability (step 6), we could see that there were many APIs that could implement a simple phone abstraction for calling a telephone number from the browser. We have seen Solaiemes Phone SDK, but we thought TADHack was a great chance for us to learn different APIs.
We chose Apidaze API, and founded our code in the simplest example we could find. It was a challenge, as the API did not work as we expected. Solaiemes and Apidaze approaches are a bit different, and Apidaze requires a web-server to authorize the actions of the API clients. Due to this configuration mismatch we could not record an actual phone-call for the presentation, we managed to make the demo work at the end of the second day with great support from Apidaze guys!
Going back to the WebRTC area, one of the main technical points in our app was to implement the signalling of the protocol. For those that are not familiar with WebRTC, WebRTC defines a set of media mechanisms and an API in the browser that is completely agnostic of how the signalling is performed. There are solutions that use Websockets, a REST API, SIP over a Websocket, etc. We decided to use Websockets. The idea of our signalling protocol was that there were two different roles:
- Participant: is connected at his time. Waits until offered to enter in the conversation. When offered an SDP answers with a response SDP.
- Famous: talks to many people. Receives signals to end sessions when the time slots are finished. Receives signals to create SDP offers and send them to the new participant.
To implement Websockets in the server side, we decided to use the new standard that is included in Java EE 7. A simple tutorial is available here (http://docs.oracle.com/javaee/7/tutorial/doc/websocket.htm) . The API is very confusing, especially when compared with previous approaches. In addition to this, it introduced a new requirement: the project had to be deployed in a Java EE 7 container. We decided to use Wildfly 8. Anyhow, the server did not need to do much work on this, it was almost merely a router of messages (X sends a message to the server saying that the destination is Y. The server gets the message, finds the Websocket of Y and sends the message there). The only especial logic was that a timer would send messages to the famous when the time slot was over.
The last feature of our application was the SMS reminders. This was one of the simplest steps of our app. We had the chance to test Nexmo implementation and also Tropo. There is not much to say here, as they have made great resources and the implementation time was minimal.
The TADHack Experience
It was a great! If it wasn’t enough with having the chance to learn a lot about existing APIs from their developers, we had free food and there were great prizes. Everybody that was there had always a great smile in their faces! From Alan to the ice-cream lady!
The Famous4Money team hope our hack is taken up and developed to help use communications to raise money for humanitarian causes, inspire people through being able to talk with their heroes, and for Famous people to make a difference – a triple win.
Francisco Martínez from the Famous4Money team can be reach on Twitter @zarfms.