Phono WebRTC Preview

February 24th, 2012 by cmatthieu

Google recently released nearly $70M worth of opensource code to the world, in order to help improve real-time communications (RTC) over the Internet; they call it WebRTC.

“WebRTC is a free, open project that enables web browsers with Real-Time Communications (RTC) capabilities via simple Javascript APIs. Their mission is to enable rich, high quality, RTC applications to be developed in the browser via simple Javascript APIs and HTML5.”

Interestingly enough, we at Voxeo Labs have a complimentary mission for Phono: to provide a simple Javascript Communications API that empowers developers with the ability to build robust voice and messaging communications apps; these apps can run in any web browser and on any mobile device.

Today we are proud to preview our experimental WebRTC support for the PhonoSDK. Since WebRTC is so new, it only runs in Google’s Chrome Canary experimental browser. The video below demonstrates an encrypted Phono-to-Phono – voice and video – P2P WebRTC experience in a Canary browser and we hope you’re impressed with what you see.

Note: there are a couple of additional videos on the page that demonstrate what else we are doing with Phono and WebRTC!

But wait, there’s more! We made history this week by placing the first public switched telephone network (PSTN) calls to and from real telephones and the Chrome Canary web browser! This video demonstrates a real phone call from an iPhone to our WebRTC-powered Phono Kitchen Sink demo.

But wait, there’s even more! Just in case the previous two videos weren’t geeky enough for you, we wanted to demonstrate a real Phono WebRTC phone call in the web browser without even involving a telco service provider! This test was achieved by using our portable wireless cell tower built on OpenBTS along with a standard Nokia mobile phone. Check this out:

Hopefully we have your attention! We believe that Phono will do for WebRTC what jQuery did for HTML and CSS. Be prepared to see our Phono WebRTC voice and video technology continue to advance, along with our Tropo and PRISM platforms running Rayo, our real-time communications protocol. There are sure to be incompatibilities in early versions of WebRTC. Phono provides a consistent API that works the same on every browser and device

We will be attending Mobile World Congress 2012 in Barcelona, February 27th – March 1st. Please stop by our hospitality suite (Vincci Arena Hotel. Condal Mar Room-1st floor) for live demos of the Voxeo Labs WebRTC technology!

Also stay tuned for a release date of our new PhonoSDK WebRTC!

Phono Mobile How-To Demo

December 19th, 2011 by cmatthieu

Tim Panton, one of the Senior Developers on our Phono project at Voxeo Labs, has prepared a how-to video to demonstrate building a mobile voice conferencing application on iOS. In this video, Tim uses PhonoSDK 0.3, PhonoGap 1.1, and XCode.

If you are not familiar with our Phono Mobile SDK, it is an extension of Phono that lets you run your existing browser-based PhonoSDK applications on iOS and Android devices as native applications using the PhoneGap mobile platform.

In addition to running VoIP, SIP-based Voice communications on iOS (iPhone, iPad, and iPod Touch) and Android devices, Phono also supports XMPP-based Instant Messaing via a simple jQuery-based developer SDK.

Here’s the video. Enjoy!

PhonoSDK Java Applet

December 13th, 2011 by cmatthieu

Phono Version 0.3 now supports Java Applets in addition to Flash!  Our Java Applet has even lower latency on VoIP calls which is perfect for enterprise call centers or controlled environments that want HD audio / Wideband call performance with very low latency measured in milliseconds.

Note: For most consumer-facing sites, we still recommend using Flash due to its more pervasive deployment base.

If you would prefer to use our Java Applet on the desktop, we have provided a new audio property on Phono and a Java Applet availability detector. It sets the desired audio client to engage on the web browser or mobile device. Valid options include: auto, flash, java, and none.  This property is optional and is defaulted to auto which means:

  • if on desktop, flash
  • if on android, android
  • if on ios, ios

We have provided a handy Java detection utility that can used like so.  Note: If Java is not detected, Phono will fallback to Flash.

$(document).ready(function(){
var audioType = 'auto';
if (navigator.javaEnabled()) {
    audioType = 'java';
}

Once you have determined if Java is installed on the your client, you can now set the audio property when initializing Phono in your jQuery script like so:

var phono = $.phono({
  apiKey: "YOUR_KEY_GOES_HERE",
  audio: {type:audioType},
  onReady: function(event) {
   // stuff
 }
});

Note: If you are running MacOS Lion, you may need to follow these instructions for getting Java applets to automatically load in your web browser.

VoxeoLabs Releases PhonoSDK Version 0.3

December 12th, 2011 by cmatthieu

PhonoSDK version 0.1 was released in October 2010 at the jQuery Conference in Boston. In March of 2011, PhonoSDK version 0.2 was released with support for better echo suppression so that headphones were no longer necessary. In July 2011 we released Phono Mobile allowing web developers to build and deploy native iOS and Android apps based on PhonoSDK.

Today Voxeo Labs is releasing PhonoSDK version 0.3! This is a major step forward in our commitment this opensource JavaScript Phone API project. Here is a list of new features supported in version 0.3:

  • Java Applet version of Phono is now included in the SDK! This version has even lower latency than our current Flash-based version of the SDK making this solution perfect for enterprise call centers and companies/individuals who prefer to use Java applets over Flash.
  • HTTPS support for secured signaling on the network.
  • HD Audio (wideband) support for Phono-to-Phono and Phono-to-SIP clients and SIP-to-Phono connections for VoIP calling.
  • Improved latency with updated Flash version of PhonoSDK.
  • Phono Mobile support for PhoneGap 1.1 (with support for 1.2 coming shortly).

Upgrading from PhonoSDK 0.2 to 0.3 is easy.  Simply change 0.2 to 0.3 in your jquery.phono.js URL path like this:

http://s.phono.com/releases/0.3/jquery.phono.js

Stay tuned for more blog posts demonstrating unique features of our latest version of PhonoSDK!

And the Winners Are…

August 31st, 2011 by Mark Headd

A few weeks ago, we announced a contest we were running to give away tickets to the upcoming CapitolJS conference in Washington, DC.

We asked entrants to build awesome apps using Phono for a chance to attend an awesome conference.

And with that event just over the horizon, we wanted to announce the winners who will be joining us on September 18th in our nation’s capitol.

And the winners are…

Jeff Kirkellyourcalling.me

A bi-directional real-time chat application providing a foundation to drop in to an e-commerce platform or anything else to allow a site manager to engage in multiple simultaneous chats with visitors which are completely isolated.

Andy GreenTechnoverse MLB Scores

An app that reads baseball scores gathered from ESPN’s Major League Baseball site. Responds to simple yes, no requests to hear addition scores in groups of 5.

These apps demonstrate the power of Phono to quickly and easily build powerful, standard-based communication apps inside a web browser.

Thanks to everyone who entered. We’re looking forward to hanging with Jeff and Andy in DC.

We Want to Send You To DC!

August 16th, 2011 by Mark Headd

We’ve received lots of great feedback on our developer contest to give away tickets to the upcoming CapitolJS conference in Washington, DC on September 18th.

Washington, DC

This event is currently sold out, but you can join other JavaScripters at this exciting event by building something awesome as part of our Phono Developer Contest.

We’re extending the deadline for submitting entries to this contest by an additional week – the contest will now close on Monday August 29th, and winners will be announced around the beginning of September.

You can submit your entries by clicking on this link.

We’re also pleased to announce the first two judges for our competition that will be helping us select winners – they also happen to be two of the speakers in the all star line up that will present at this awesome event:

We’ll be announcing additional judges for this contest in the days ahead, so keep on eye on this blog for updates and other contest information.

So what are you waiting for?

Don’t miss out on your chance to attend this sold out event.

Get cracking on an awesome Phono-based app or Phono skin today!

Add Group Instant Messaging to Your Website!

August 8th, 2011 by cmatthieu

A while back Dominique Boucher, the CTO of  Nu Echo, contributed to a guest post on our blog demonstrating how simple it was to create an IM (Instant Messaging) chat application using the PhonoSDK and Tropo.  Most people still think of Phono as a web phone, but it’s so much more!

At the core of the Phono SDK, it’s basically a powerful open standards, XMPP-based SDK wrapped in a simple jQuery API that makes sending and messaging IM messages and Jingle/SIP-powered phone calls with other Phono users or with Tropo applications or leveraging Tropo to access other IM networks such as GTalk, MSN, AIM, Yahoo!, Jabber, and other XMPP-based IM social networks.

Imagine for a minute what you can do with this technology!

1. You could create your very own browser-based IM platform that communicated with all of the other social networks like Meebo.

2. You could develop a public or enterprise chat application like Candy Chat or Hip Chat or add IM chat to your existing Web application.

3. You can use IM to pass instant messages bi-directionally between your Phono and Tropo applications to interact with the user on the Web page as well as the Voice application.  This is great for screenpop applications of when you need to update items on the web page based on the flow of the phone call.  You could even use this feature to deliver a true multi-modal browser and phone application to market where the state of the chat and voice applications are in sync!

As users begin to understand the flexibility and power of combining IM and Voice into a single application and as they they experiment with Phono’s easy IM features, we are getting requests for more IM examples to demonstrate the ease-of-use and interaction capabilities between Phono and Tropo.  I wrote this Group IM chat as an example for a Voxeo customer and wanted to share it with you.  It basically leverages most of the HTML, CSS, and Javascript code from Dominique’s blog post but I extended his javascript file to send a joined message as new users come into the chat as well as allowing support for the name of the chatroom and username to be passed into the URL at the start of the chat.  Here is the new IM.JS file to add to the previous project:


var myId = '';
var chatroom = getParameterByName('chatroom');
var username = getParameterByName('username');

var PHONO_OPTIONS = {
    apiKey: "6e442b984dfa26cd102423b7bc5aaebd",
    onReady: function() {
    $("#message")[0].disabled = false;
    $("#message").focus();
	myId = this.sessionId;

	// send hello message to register jid on tropo
	var sendmsg = myId + ':' + username + ':' + chatroom + ':joined';
	phono.messaging.send('jabber_id@tropo.im', sendmsg);
    addInteraction('Me', 'joined', 'client');

    },
    messaging: {
    onMessage: function(event) {
		var themsg = event.message.body;
		// message is colon delimited username:the message
		var thenewmsg = new Array();
		thenewmsg = themsg.split(':');
		if(thenewmsg[0] != username){
        	addInteraction(thenewmsg[0], thenewmsg[1], 'server');
		}
    }
    }
};

var phono = $.phono(PHONO_OPTIONS);

function processKey(event) {
  if (event.keyCode == 13) {
      sendMessage();
      return false;
  } else {
      return true;
  }
}

function sendMessage() {
    var msg = $('#message').val();
    if (msg == '') return;

	var sendmsg = myId + ':' + username + ':' + chatroom + ':' + msg;

    $('#message').val("");
    phono.messaging.send('jabber_id@tropo.im', sendmsg);
    addInteraction('Me', msg, 'client');
}

function addInteraction(who, msg, cls) {
    var dialogDiv = $('#dialog');
    dialogDiv.append($("
<div class="msg_&quot; + cls + &quot;"><strong>"
                       + who + ":</strong> " + msg + "</div>
"));
    dialogDiv[0].scrollTop = dialogDiv[0].scrollHeight;
}

function getParameterByName(name) {

    var match = RegExp('[?&]' + name + '=([^&]*)')
                    .exec(window.location.search);

    return match && decodeURIComponent(match[1].replace(/\+/g, ' '));

}

Here is the Tropo Scripting API Ruby script that I wrote which uses CouchDB hosted by IrisCouch to track all of the Jabber IDs in the chatroom.  The Tropo application simply loops through the Couch document and sends an XMPP IM message to each JID ignoring the one that originally sent the message.

require 'rubygems'
require 'net/http'
require 'json'

module Couch

  class Server
    def initialize(host, port, options = nil)
      @host = host
      @port = port
      @options = options
    end

    def delete(uri)
      request(Net::HTTP::Delete.new(uri))
    end

    def get(uri)
      request(Net::HTTP::Get.new(uri))
    end

    def put(uri, json)
      req = Net::HTTP::Put.new(uri)
      req["content-type"] = "application/json"
      req.body = json
      request(req)
    end

    def post(uri, json)
      req = Net::HTTP::Post.new(uri)
      req["content-type"] = "application/json"
      req.body = json
      request(req)
    end

    def request(req)
      res = Net::HTTP.start(@host, @port) { |http|http.request(req) }
      unless res.kind_of?(Net::HTTPSuccess)
        handle_error(req, res)
      end
      res
    end

    private

    def handle_error(req, res)
      e = RuntimeError.new("#{res.code}:#{res.message}\nMETHOD:#{req.method}\nURI:#{req.path}\n#{res.body}")
      raise e
    end
  end
end

server = Couch::Server.new("couch_db_name.couchone.com", "80")

data = $currentCall.initialText.split(':')
jid = data[0]
username = data[1]
chatroom = data[2]
msg = data[3]

if jid.index("phono.com")
  begin
    res = server.get("/couch_db_name/" + chatroom)
    jsonresp = res.body
    dbdata = JSON.parse(jsonresp)
    jids = dbdata["jids"].to_s
    if msg == "joined"
      jids = jids + "," + jid
      res = server.put("/couch_db_name/" + chatroom, '{ "jids":"' + jids.to_s + '", "_rev":"' + dbdata["_rev"].to_s + '" }')
    end
  rescue # not found
    jids = jid
    res = server.post("/couch_db_name", '{ "_id":"' + chatroom + '", "jids":"' + jids.to_s + '" }')
  end
end

if msg and jids

  jidsarray = jids.split(",");
  jidsarray.each do |client|

    message username + ":" + msg, {
       :to => client,
       :network => "JABBER"}

  end

end

That’s it!  If you are looking for the entire set of files in one place, feel free to grab them from my GitHub account: https://github.com/chrismatthieu/group-im-chat

Win Tickets to CapitolJS

August 4th, 2011 by Mark Headd

Phono is a proud sponsor of the upcoming CapitolJS conference in Washington DC, which will feature an all star line up of speakers to talk about what’s happening in the world of JavaScript.

CapitolJS Logo

Organized by the awesome folks behind JSConf, this is the premiere JavaScript conference on the East Coast of the U.S. this year.

And we’re giving away tickets!

Here’s how you can win a ticket to attend this sold out event.

Phono Developer Contest

Phono is an easy to use jQuery plugin that turns any web browser into a telephone, capable of making & receiving phone calls, and sending & receiving instant messages.

You can even connect to SIP clients and enterprise grade-PBXs – all with a simple, unified API.

You can win a ticket to the upcoming CapitolJS conference in Washington by building an app that uses the PhonoSDK in one of the following categories:

Most Innovative Phono Application

Prize – 1 ticket for admission to CapitolJS.

Build an application that blows people away with the power and flexibility of the PhonoSDK. Let your imagination run wild and develop an innovative Phono app that will make people’s browsers ring (and their jaws drop!). Head on over to the Phono blog to see tons of example apps to get your creative juices flowing.

Entries may be either traditional browser-based apps, or mobile apps built using our plugin for iOS and Android.

Best Phono Skin

Prize – 1 ticket for admission to CapitolJS.

Phono is 100% skinnable and it’s interface can be completely customized using HTML and CSS. The power of Phono’s functionality as a next-generation communication device is rivaled only by it’s ability to look like anything you want it to look like.

Show off your design skills and styling ability by creating a unique, one of a kind skin for a Phono instance.

CSS and front-end ninjas – this one is for you.

The Phono developer contest will kick off on August 8th and run through August 22nd. Winners will be announced the week of August 22nd. Judging will be done by an esteemed panel of JavaScript luminaries.

Keep your eyes peeled to the Phono blog for more details and the announcement of judges.

Video: How To Build an iPhone Voice Conferencing App Using Phono Mobile and PhoneGap

July 22nd, 2011 by Dan York

Want to add voice calls and IM chat to iPhone, iPad or Android apps? In this quick video, Tim Panton shows how you can use the the brand new Phono Mobile toolkit and the PhoneGap mobile platform to create an iPhone app that connects users together in a conference call. Check it out… and then get started building your own iPhone and Android apps using Phono Mobile!

 

Introducing Phono Mobile

July 22nd, 2011 by Jose de Castro

Today I have the great pleasure of announcing our latest addition to the PhonoSDK:

Phono Mobile – Powered by PhoneGap

As most of you know, PhonoSDK was released last year at the jQuery Conference in Boston. Phono is a real-time communications API that allows jQuery developers to add voice, IM and real-time messaging to any web application. Now we’re going mobile!  We’ve joined forces with PhoneGap to bring you the next generation in voice and messaging APIs for mobile devices.
 
For those of you living under a rock: PhoneGap is a mobile development framework that lets you take existing HTML5 applications and supercharge them with access to native device features like the address book, GPS and the accelerometer. PhoneGap also provides tools for packaging HTML5 code as a native mobile app for inclusion in the Apple App Store or Android Marketplace. Phono Mobile integrates seamlessly with PhoneGap to add voice over Internet (VoIP) calling, IM and real-time messaging to any HTML5 application!
  • Games – Mobile game developers can now easily add in-game audio conferencing and chat to their titles.
  • Social Apps – Since Phono makes calls over the Internet, social apps can connect people without exchanging phone numbers or using the caller’s airtime minutes. Call anywhere in the world without long distance charges.
  • Collaboration – Whiteboard and screen sharing apps can instantly add audio and chat with just a few lines of code
  • Click-to-Call – Dial any phone number directly from your application or web page – think Salesforce, LinkedIn, etc.
  • Customer Service – Combine Phono Mobile with Tropo’s Cloud Communications API to create voice-enabled self-service applications which can include: speech recognition and text-to-speech in 24 languages, conferencing, call recording, voice transcription, and call transfers.

By now your brain has exploded with excitement. When you’re done picking up the pieces visit http://phono.com/mobile for more info.

Also, make sure to check out our awesome conference room demo!