Posts Tagged ‘IM’

Customer Spotlight: Zapier

Friday, December 16th, 2011

We are excited to feature Zapier on this week’s Tropo Customer Spotlight! Today I sat down with Wade Foster, one of the co-founders of Zapier, to discuss their business and learn more about how they are using Tropo for their Instant Messaging services.

What is Zapier?

Zapier allows you to “zap your apps!” You can build unique integrations between your favorite applications, one mouse click at a time without writing a single line of code!

  • Own Your Data: Zapier makes it easy to import and export data automagically with your favorite web apps. Don’t get locked in.
  • No Data Entry: Quit filling out the same information between different applications, and let Zapier do the heavy lifting for you.
  • Fill-in Missing Features: Never be at the mercy of vendors to build features or integrations. Use Zapier to add missing functionality.

Zapier uses Python, Django, and the Tropo Scripting API to deliver Instant Messaging services to users on AIM, GTalk, MSN, and Yahoo!

To learn more about Zapier, visit their website at http://zapier.com!

Here is a screencast of Zapier using Tropo for their Instant Messaging services:

Tropo + Ushahidi = Awesome

Friday, December 9th, 2011

Ushahidi is a platform for crowdsourcing information. Members of the public submit reports that are geo-located and then put on a map. The platform is used in disaster relief, election monitoring and just about any other situation where people need to learn things from one another quickly and concisely. Out of the box, Ushahidi allows people to submit reports via the web, mobile applications, Twitter, Facebook with support for a few SMS APIs as well.

We have created an easy-to-use application that lets people use Tropo to input data into Ushahidi via SMS. We’ve put the code up on Github and you’re welcome to submit pull requests if you find bugs or add features.

To use the code, you don’t have to install anything on Ushahidi. Here are the steps:

  1. In Ushahidi, create a user with “Admin” privileges.
  2. check out the code from Github
  3. edit the configuration lines at the top with your Ushahidi credentials and URL
  4. create a new Scripting API Application on Tropo.com.
  5. Once your Tropo app is created, you can add an SMS-enabled number (US and Canada currently) and optionally configure it to talk on any IM networks or Twitter.

Now, when you send a message to any of your configured numbers the application will attempt to geo-locate the message based on its contents. The app then submits a report via the Ushahidi API in an unverified state. Admins of the site can then verify the reports and publish them to the web.

In our example here, we simulated a flood in Milwaukee. The instance pulls in feeds from local media and disaster response community, accepts reports via the web and accepts reports from a Tropo app I created. We sent a message to the number configured in the app with the following content:

 

Columbia St. Mary’s Hospital Milwaukee WI is flooded. Power is out.

This was submitted to Ushahidi in an unverified state. The reviewer then added text to flush out the report based on other incoming data and then published the report:

Columbia hospital has been without power for the past 16 hours. Two of the three emergency diesel generators are operating normally. Generator number 2 is scheduled to be functional within the next 6 hours. Fuel supplies are at nominal levels with an estimated 48 hours remaining. Inundation levels are currently low but may begin rising at high tide.

This sort of crowdsourced data, gathered at the source, is valuable for many reasons. It gets the word to responders and the public more quickly so that people can act appropriately (e.g. by not going to that hospital, go to another one.) First responders become aware of the weight of a problem when more people report the same thing or when the first report comes in of a very big event.

Watervoices.ca, developed this past weekend at RHoK, will be going live with this application soon and we hope to see others using it to help the world soon. Over time, we will be adding support for Voice, PhoneGap within Ushahidi and many other features.

Customer Spotlight: FetchNotes

Friday, November 4th, 2011

We finally got a chance to catch up with the guys (@_chaselee and @alexschiff) behind the popular new notes service called FetchNotes!

What makes FetchNotes so cool? For one, it has a super simple web UI. The entire site behaves like an app and leverages Python’s Tornado Webserver and AJAX to add and tag notes without lifting your fingers from the keyboard. Tags are basically hashtagged keywords in the note that allow the app to categorize notes by topic.

Secondly, FetchNotes leverages Tropo to deliver a truly multichannel communications experience. Today FetchNotes extensively leverages Tropo’s SMS services but the team has already started working on adding Tropo’s Voice with transcription service as well as Tropo’s Instant Messaging services on all of the IM networks including: GTalk, Yahoo!, MSN, AOL, and Jabber! We may even see support in the near future for in-browser, voice-powered note taking using Tropo’s Javascript Phone API, Phono.

Thirdly, Chase and Alex are working to add groups and third-party integration into other services such as GitHub or Google Calendar. This would allow developers, testers, and users to take a note about a #feature or #bug and tag it accordingly and watch the note get pushed to other services as GitHub issues or even calendar entries on Google!

The FetchNotes service is still in private beta but the first 50 new subscribers that click on fetchnotes.com/invite/tropo will be allowed to register for the service and check out the new coolness first hand!

Tropo Sponsors the Summer of Smart

Friday, June 24th, 2011

Tropo is thrilled to be sponsoring the Summer of Smart program in the City of San Francisco.

Summer of Smart

“Sumer of Smart” is a three month long series of events and discussions centered around urban innovation – it will bring together people from many different disciplines to work on strategies and applications to benefit those that live in, work in and visit the City of San Francisco.

This series of events began recently with a forum bringing together Mayoral candidates in San Francisco at the Pier 38 offices of Automattic, followed by CityCamp San Francisco. We were delighted to be a part of these events, and are just as excited to help support the Summer of Smart.

Our primary interest is – not surprisingly – hacking and app building! Our platforms and APIs are ideal for building things that can make urban environments easier to navigate, to live in and to visit.

A great example of the awesome apps that you can build with Tropo can be seen by looking at the results of the recently concluded Applications for Good competition – one of the winners (SNAPFresh) was built using the Tropo platform.

This innovative and very useful application lets anyone quickly and easily find the location of retailers that accept Supplemental Nutrition Assistace Program (SNAP) cards in the Bay Area by sending a text message.

It is these kinds of innovative applications we hope to foster by sponsoring the Summer of Smart.

If you are interested in attending one of te Summer of Smart events, you can head on over to their site and find one that matches your interest. You can also submit ideas for Summer of Smart on the website, or by tweeting with the hashtag #SoSIdeas.

We can’t wait to see all of the great ideas and new applications that come out of this summer-log series of events!

Civic Hacking in Philadelphia

Saturday, February 26th, 2011

Yesterday in Philadelphia, Tropo had the pleasure of taking part in the Data Camp event sponsored by Code for America.

This event was focused on identifying useful data sources for Philadelphia and building civic applications to use that data – in one day! It was a great event, and several really cool projects were taken on by attendees.

Philadelphia Library Locator

I worked with a group to build out a CouchDB-based API for geographic data. Essentially, a Philly version of Max Ogden’s PDX API project, which I talk about more fully in this post.

In one day, our team was able to stand up Philly API and build a demo app that lets users find library locations near their homes or places of business using SMS or IM.

I wanted to demonstrate the power of Tropo for building powerful, multi-channel communication apps quickly and easily. A screen shot demonstrating how the app works can be seen in this post.

Just send an SMS or IM message to the app with an address, and get back the library locations closest to that address. This is a highly effective way to help people who might face some challenges in accessing technology get to a location in their neighborhood where they can have access to the Internet and online government services.

The code for the app is available on GitHub.

This civic hacking event was so much fun that we’re planning another event in Philadelphia in the near future. This upcoming event is going to be awesome, and details will be announced in the coming week.

Stay tuned!

Tropo DTMF to XMPP IM Relay

Friday, November 19th, 2010

Are you building real-time gaming applications that use the phone (Voice or DTMF touch-tone) and require immediate response to your application?  Ever wondered how to get input from a caller at the speed of light – rather than traditional AJAX API calls?

Tropo’s Scripting API allows you to do all sorts of interesting hacks to make this possible!  Earlier, Jason Geocke demonstrated how to do this using real-time TCP sockets in the following blog post: Using Persistent Sockets in Tropo Applications.  I recently had a customer asking about a similar request but using XMPP Instant Messaging to relay the DTMF touch-tones to any IM client.

I’m always up for a new challenge but was disappointed to find that this request wasn’t challenging at all.  Tropo is ideal for building multi-modal communications apps like this going from Voice to IM in the same application.

Here is a video that demonstrates how this works.

Here is the Tropo Scripting that I used to make this demo possible.

answer
sleep 2

keeprunning = true
while keeprunning

  ask "press a key or zero to end", {
    :choices => "[1 DIGITS]",
    :onChoice => lambda { |event|
    message event.value, {
      :to => "christoffe@jabber.org",
      :network => "JABBER"}
      if event.value == "0"
        keeprunning = false
      end
    }
  }

end

The only thing left to do is connect your IM bot to your Tropo application by simply creating one dynamically like cmtest@tropo.im.  See below:

That’s all she wrote :)

How to Add Phono and Tropo to CCXML

Thursday, November 4th, 2010

Dan York recently posted a really nice example of how to combine Phono – the new hotness in cloud telephony that turns any web browser into a phone – and good old fashioned enterprise-grade CCXML.

Dan’s piece inspired me to think about new ways to combine cloud telephony tools like Tropo and Phono with the bedrock of enterprise telephony – CCXML. Turns out, there are some very interesting and powerful combinations possible when you merge these different ways of building phone applications.

Connecting Phono to CCXML

Dan’s piece provided a nice summary of how use Phono as a web front-end to a CCXML application. The approach he describes is a great way to extend the reach of a CCXML application to a whole new group of users – those who are viewing your web site in a browser.

There is an equally exciting way of combining CCXML with the Tropo platform – using Tropo to send IM-based “screen pops” to service agents or others within your organization when a call comes in.

In the call center and customer service industries, screen pops are a way of providing notice to a customer service agent that a call is coming in. The actual content of a screen pop can range from simply displaying the caller ID of the incoming call, to actually pulling information out of a Customer Relationship Management (CRM) system about the caller to display it to the agent before they answer.

In this post, I want to show a simple example of how Tropo can be used to compliment CCXML applications to quickly and easily add screen pop capability. After we run through the details, I want to provide some additional insights on how both Phono and Tropo can be used to significantly enhance the power of enterprise CCXML.

A Simple Tropo Screen Pop Application

The first step in our example is to set up a very simple Tropo script that will send a screen pop message to the IM network and user of our choice. To keep things simple, we’ll use PHP for this example (but you could use any of the languages supported in Tropo Scripting to do this).

Here is the code for our example script:

<?php
message($screenPopMessage, 
	array( 'network'=>$network,'to'=>$sendTo));
?>

As you can see, this is a simple Tropo scripting application that does one thing – it sends an IM message to a user on a specified network. All of the variables in this script (everything preceded by a ‘$’) will be populated when we invoke it from CCXML.

For now, go to your Tropo account and set up a new Tropo Scripting application. Give your application a name, and when filling in the field “What URL powers your app?” select “Hosted File” and opt to create a new hosted file. Click “Create Application” when done.

Once this is done, you will notice your app has several different numbers automatically provisioned. Directly beneath that, you will see the Outbound Tokens provisioned for your new application. Make note of the token for messaging, as later you will need to copy it and paste it into your CCXML script.

The last step is to provision an instant messaging network for the application. This is the IM user that will send the screen pop when an incoming call is received in CCXML (i.e., the IM message will come appear to come from this user). To keep things simple, you can just set up a Jabber account using the tropo.im domain. If you do this, you can add the user you assign to your application to your buddy list in any Jabber client, including Google Chat.

Connecting Tropo to CCXML

In order to invoke our simple Tropo screen pop application, we need to make some changes to the CCXML introduced in the Dan’s post. Our revised CCXML looks like this:

<?xml version="1.0" encoding="UTF-8"?> 
<ccxml version="1.0" xmlns:voxeo="http://community.voxeo.com/xmlns/ccxml">

  <var name="inboundID"/> 
  <var name="outboundID"/> 
  <var name="initState" expr="'state1'" />

  <!-- Tropo API information -->
  <var name="tropoAPIToken" expr="'your-tropo-session-token'"/>
  <var name="tropoAPIEndPoint" expr="'http://api-internal.tropo.com/1.0/sessions?action=create&amp;token=' + tropoAPIToken"/>
  <var name="TropoSendURL"/>

  <var name="screenPopMessage" expr="encodeURIComponent('This is a screen pop!')"/>
  <!-- Any valid IM network name such as AIM, GTALK, MSN, JABBER, TWITTER and YAHOO. -->
  <var name="network" expr="'JABBER'"/>
  <var name="sendTo" expr="'your-im-user-name'"/>

  <eventprocessor statevariable="initState">

    <transition state="state1" event="connection.alerting"> 
      <log expr="'*** INBOUND CONNECTION ALERTING ***'"/> 
      <assign name="inboundID" expr="event$.connectionid" /> 
      <assign name="initState" expr="'state2'"/> 
      <assign name="TropoSendURL" expr="tropoAPIEndPoint + '&amp;screenPopMessage=' + screenPopMessage"/>
      <assign name="TropoSendURL" expr="TropoSendURL + '&amp;network=' + network"/>
      <assign name="TropoSendURL" expr="TropoSendURL + '&amp;sendTo=' + sendTo"/>
      <send name="'http.get'" target="TropoSendURL" targettype="'basichttp'"/>
    </transition>

    <transition event="send.successful" state="state2">
      <log expr="'*** Screen pop information sent to Tropo. Accept inbound call. ***'"/>   
      <assign name="initState" expr="'state3'"/>
      <accept connectionid="inboundID" /> 
    </transition>

    <transition event="error.send.failed" state="state2">
      <log expr="'*** ERROR: Could not send screen pop information. ***'"/>
      <assign name="initState" expr="'state3'"/>
      <accept connectionid="inboundID" /> 
    </transition>

    <transition state="state3" event="connection.connected"> 
      <assign name="initState" expr="'state4'"/> 
      <!-- 4079651112 is Voxeo Sales line -->
      <createcall dest="'tel:4079651112'" callerid="'1112223333'" connectionid="outboundID" timeout="'30s'"/> 
    </transition> 

    <transition state="state4" event="connection.progressing"> 
      <log expr="'*** CONNECTION.PROGRESSING ***'"/>  
      <assign name="initState" expr="'state5'"/> 
    </transition> 

    <transition state="state5" event="connection.connected"> 
      <assign name="initState" expr="'state6'"/> 
      <log expr="'*** CONNECTION.CONNECTED: INBOUND ***'"/>  
      <join id1="inboundID" id2="outboundID" duplex="'full'"/> 
    </transition> 

    <transition state="state6" event="conference.joined"> 
      <log expr="'*** CONFERENCE JOINED: INBOUND LEG TO OUTBOUND LEG ***'"/>  
    </transition> 

    <transition event="connection.disconnected"> 
      <log expr="'*** CONNECTION.DISCONNECTED ***'"/>  
      <exit/> 
    </transition> 

    <transition event="error.*">
      <log expr="'*** AN ERROR HAS OCCURED: ' + event$.reason  + ' ***'"/>
      <exit/>
    </transition>

  </eventprocessor> 
</ccxml>

You’ll notice a few differences from the CCXML example used in Dan’s piece. It includes a variable to hold a special URL to the Tropo Session API. There are also variables to hold the IM network and user that you want to send a screen pop to when a call comes into CCXML. Make sure you enter the details of the network on line 15 and the username on line 16 to whom you want to send the screen pop. Also, enter the messaging token from your Tropo application on line 9 in this CCXML script.

Set this script up in your Evolution account (as described in Dan’s post). Now, when a call comes into CCXML from Phono, the user that you have designated gets a screen pop with the value of the screenPopMessage variable in the CCXML script.

You can obviously change this message to anything you want, but it must be URL encoded before sending to the Tropo Session API.

<var name="screenPopMessage" 
       expr="encodeURIComponent('This is a screen pop!')"/>

Icing on the Cake!

Although this example is admittedly simple, coupled with Dan’s previous piece on connecting Phono to CCXML, it demonstrates how easy it is to augment CCXML with both Phono and Tropo. But that’s not all, it gets even better…

Phono allows developers to append information to a phone call, via the Phone API. in other words, before making a Phono call from your web page, you could add information to it via a header collection – this information could be obtained from prompting the user and getting input that way, or by examining what they did on a page (i.e., clicking a link). When the call connects to CCXML, this information is then available in standard SIP headers.

What this would let you do is to add inforamtion to a Phono call via client-side jQuery, and then use that inforamtion to craft the screen pop message in CCXML. This would allow you to customize the screen pop message to a customer service agent for each caller. You could even route calls differently based on the iformation added via Phono headers.

In addition, Tropo allows for the easy creation of IM applications (and other types of communication applications). In our simple example, we are just sending a message one way, from a CCXML script to a customer service agent through an instant message. But Tropo allows developers to build interactive IM applications. So with a little more work, we could create a screen pop application that asks an agent if they want to take an incoming call, send the call to another agent, or even send it to voice mail.

Because it’s possible to inject events into a running CCXML session, a Tropo application could control how a call is routed in CCXML based on an interaction with an agent. In this way it is possible to create more sophisticated, interactive screen pops using Tropo.

Hopefully, this post and the one it was inspired by give you a sense of how Phono and Tropo can compliment standards-based CCXML.

When it comes to getting more out of your CCXML applications, Phono and Tropo are the icing on the cake!

Heroku and Tropo Like Peanut Butter and Chocolate!

Tuesday, September 28th, 2010

Peanut butter and chocolate!

Who doesn’t love peanut butter and chocolate? By themselves, they are equally delicious but together, they are irresistible!

The same can now be said about Heroku and Tropo.  Heroku is the super simple cloud hosting platform for Ruby and Ruby on Rails web applications.  While Tropo is the super simple cloud hosting platform for communications applications including Voice, SMS, IM, and Twitter.

While Tropo works with any web programming language, we have been seeing more and more Ruby applications being developed using Tropo’s WebAPI. Traditionally deploying an application took just about as much time as actually writing the application.  This is no longer true with Heroku’s cloud hosting platform.

Deploying a Ruby application to Heroku is as simple as issuing the following commands from your terminal window:

> heroku create

> git push heroku master

Equally as simple to deploying your application to Heroku is writing your multi-channel communications application using Tropo like this hello world application that can be accessed via the telephone using Voice or SMS or via Instant Message or Twitter:

answer

say “Yes, Tropo is this easy!”

hangup

Now on to the how-to video and Heroku deployment instructions located at http://tropo.heroku.com!

Heroku & TropoTo demonstrate this yummy combination of technologies (Heroku and Tropo), Mark Silverberg (student and talented freelance Tropo developer) built a powerful Voice and IM application using Ruby and the Sinatra Framework and walks us through his 3.5 minute start-to-finish deployment of this application on the Heroku platform!

Mark’s multi-channel application is a volunteer finder service that provides information on volunteer opportunities in your zipcode.  The application can be accessed by calling +99000936 9991456957 via Skype or by IMing volunteer1234@tropo.im.  Mark’s Ruby code can be found on GitHub along with deployment instructions hosted on Heroku at http://warm-spring-38.heroku.com/

Now follow along with this video at http://tropo.heroku.com to learn how to build and deploy your next billion dollar idea using Heroku and Tropo!  Leveraging Heroku and Tropo gives you the best of advancements in cloud technology available today.  Heroku’s cloud technology allows you to scale your web application while Tropo’s cloud technology allows you to scale your communications applications.  These hybrid cloud technologies provide you, the web developer, with peace of mind and assurance that when your new application goes viral, we can easily scale to meet your demand.  Best of all, both cloud platforms offer free entry points to kick our tires and try us out.

So what are you waiting for?  Taste our peanut butter and chocolate now at Heroku and Tropo!

IM usage stats: the decline of AIM

Tuesday, August 31st, 2010

Like many early IM users, I was a heavy user of AIM for a very long time. (I also had a 6 digit ICQ number, but the lack of friends on the network led to me abandoning it). The first IM platform I implemented on what eventually became the IM support in Tropo was AIM. AIM holds a special place in my heart.

Today’s Chart of the Day from Silicon Alley Insider (SAI) is Comscore’s metrics on the use of various IM networks. For the venerable AIM, it isn’t pretty. After years in the #1 spot, a sharp decline starting at the end of 2008 led SAI to title their graphic “The Death Of AOL Instant Messenger.”

Yahoo had a huge spike around the same time, but within 6 months declined back to around where they started. I’m not sure what caused the Yahoo spike, but a few things may have contributed. Yahoo 9.0 was released around that time, as was the Yahoo iPhone IM client.

Facebook and Google Talk aren’t represented on the chart. Comscore is unable to break the IM traffic out from Gmail and regular Facebook usage.

Introducing OpenVoice. Your number, Open Source.

Wednesday, May 19th, 2010

OpenVoiceLong time Tropo developer Zhao Lu launched OpenVoice today. OpenVoice is a virtual number application that can forward calls, handle voicemail (with transcriptions), send and receive SMS, and make outbound calls from your OpenVoice number. And because OpenVoice is built on Tropo, it has built in support for speech recognition and phone numbers are available from around the world.

OpenVoice is built with Ruby on Rails using the Tropo WebAPI to communicate with the phone system, and Tropo has signed on as a contributor to the project. We’ll be using OpenVoice to show off how to build Sophisticated Tropo applications and using the OpenVoice code and use cases to create tutorials for Tropo features. You can bet in the future that when we add a new feature, we’ll describe how to implement it by using OpenVoice as an example.

We’re launching OpenVoice alongside Zhao today at Google I/O and we’ve packed it with all sorts of Google technologies.

  • Android Client
  • Voicemail notifications and transcriptions delivered over Google Talk
  • Call logs displayed on a google map
  • Import contacts from Gmail
  • Some other hidden goodies

In addition to those, we’ve developed a version of OpenVoice that can run on Google App Engine and uses your Google Account as a single signon platform.

Using Tropo as a platform allowed us to create OpenVoice in under 4 man-weeks. We went from idea to implementation in less than a month. Because of the Tropo underpinnings, developers have a full API they can work with to implement features of their own or interact with their phone for them.

Want to see OpenVoice in action? Stop by and visit Voxeo in the Google I/O Sandbox today and tomorrow. Not at I/O? Chris Matthieu, one of the OpenVoice developers put together a 10 minute video overview. Or download a copy of the code from Github and try it out for yourself.