Archive for the ‘Applications’ Category

Did you miss our multi-channel webinar last week? The archive is now available..

Tuesday, October 13th, 2009

jam_session_275.jpgDid you miss our free webinar last week about how you can build a “multi-channel” application that interacts with customers across voice, SMS, IM, mobile web and Twitter?

If you missed it, don’t worry… the archive of both the recorded webinar and the slides are available now on the Monthly Jam Sessions page of our VoiceObjects Developer Portal. In the session, Tobias Göbel and Dave Hoff gave a great overview of how you can easily create a single application that interacts across multiple channels using our IMified service and VoiceObjects products. They also provided links to documentation, code samples and more. Please do check it out and get started building your own multi-channel applications today.


Want to learn how Voxeo can help unlock your communications and deliver a better customer experience? Please contact us!

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook, or following us on Twitter.


IMified Example – An IM bot using Google App Engine

Wednesday, June 3rd, 2009

imifiedlogo.jpgAs you may have noticed last week, we announced the acquisition of a company called IMified and with that we brought in more opportunities and options for developers. Now you can create instant messaging “bots” (or “agents” or whatever you want to call them) that allow you to create applications that interact with users via IM. (More about what you can do with IMified in the acquisition announcement.)

Developer accounts are free over on www.imified.com. Please do sign up and check it out. We’d love to hear what you think of the service. (And you can safely assume that we’ll be evolving the service and adding more to it over the months ahead.)

One aspect of IMified that is a bit different from either Voxeo’s Evolution XML developer portal or our Tropo.com site is that with IMified you do need to host your application on a web server somewhere. With both Evolution and Tropo, you can host your application on your own server and simply point Evolution or Tropo to the URL of your app, but there is also the option with both services of hosting your apps directly within our hosted infrastructure. With IMified you do need to host your application somewhere and then provide the URL inside IMified when configuring your bot.

The beautiful thing about this, of course, is that it means you can write the bot application in whatever language you want on whatever operating system you want and using whatever tools you want. All your application has to do is use the IMified API to communicate with the IMified platform.

One place developers can host a web services app these days is certainly Google App Engine, and the IMified team just posted a knowledge base article showing an example bot in python hosted on Google App Engine. Courtesy of an IMified user named Barry, the source code is available in the IMified knowledge base. The IMified team notes that it’s also a good example of performing HTTP Authentication in python.

(And rather than include the source code here, I’ll just point you over to the IMified site.)

We’re excited about adding IMified to the Voxeo family of services and we’re definitely looking forward to seeing what people develop on the platform.


If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook or following us on Twitter.


Technorati Tags: , , , , , ,


Want to learn how Voxeo can help unlock your communications and deliver a better customer experience? Please contact us!

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook, or following us on Twitter.


Developer Jam Session – May 27 – VoiceObjects and the Prime Telecom demo app

Friday, May 15th, 2009

jam_session_275.jpgWhen exploring a new development environment such as VoiceObjects Desktop for Eclipse, most developers prefer learning from sample code instead of scanning through 1000+ pages of documentation. Hence, VoiceObjects professional services have built an all-purpose demo application, Prime Telecom, that represents a multi-channel (IVR, mobile web, text) customer self-service portal for a mobile carrier. The features that you can explore in this demo app are, however, cross-industry: GUI and VUI best practices (such as different confirmation strategies or adapt-to-caller techniques) as well as reference solutions for implementing multi-channel, multi-language, personalized, and testable applications.

This webinar will be interesting for

  • anyone who is new to VoiceObjects and is looking for guidance on evaluation,

  • experienced VoiceObjects developers who are interested in recently added product features, and
  • anyone who wants to present VoiceObjects to others.

This Jam Session is scheduled for Wednesday, May 27th. We will start at 5:00 PM CEST, 11:00 AM EDT, 8:00 AM PDT

sign-up-now.gif


If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook or following us on Twitter.


Technorati Tags: , , , , ,


Want to learn how Voxeo can help unlock your communications and deliver a better customer experience? Please contact us!

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook, or following us on Twitter.


How-To: Outbound Notification Applications

Monday, March 16th, 2009

Outbound notification:

Not only how to do it, but how to do it without blowing things up!

Over here in Voxeo’s Extreme Support, we see a fair amount of tickets asking us how a user might implement their applications on a larger scale, or in what ways our platform could be leveraged to further business needs. ”Hello World” applications might impress your mom, but something has to pay to keep the lights on. One very common use of Voxeo’s technology is outbound notification, where a company sends hundreds, thousands, or even hundreds of thousands of notifications to their customers in an automated fashion. If you have always wanted your very own automated message delivery service, you have come to the right blog. Let’s build a small, but scaleable, one from scratch. The main focus of this posting is to give an overview of how an application like this might be developed. We will show you how several markups and scripting languages can be combined to perform this type of outbound campaign.

Our application will combine PHP and MySQL to launch CCXML/VoiceXML calls using a simple HTTP control mechanism through Voxeo’s hosted network. The control mechanism provides throttling intelligence to our application, ensuring a defined ceiling of concurrent calls will not be surpassed, but still allowing for maximum efficiency and duration. When running call campaigns through a telephony network shared with other customers, everyone wins by adhering to port boundaries.

In the example I am presenting we are using a hypothetical application developed for the ‘XYZ Corporation‘, their needs for their application are as follows:

  • Call users and notify them of appointments
  • Verify that intended callers got the notification
  • If caller chooses to, allow them to change appointments
  • Log results to a database so we can view call history’s and track any problematic sessions reported by users

The requirements are not to overwhelming, however in addition to the above we also want to give them a nice interface to ensure a pleasant user experience. We also want to ensure that this interface will allow for someone without a intimate knowledge of VoiceXML, or even any markup at all to operate our application. After all, our fictitious company ‘XYZ Corp’, is in the business of notifying people about appointments, not debugging application code.

So let me do a quick video run through of the final product before I go into detail on the relevant components below. Below you will see an embedded YouTube video that shows the interface and it’s functions, this might be helpful if you gave this a quick review prior to proceeding, as the rest of the posting is based off this example application and assumes that you have reviewed it:

So first off let me say that all this code is going to be attached for download at the end of this posting. So fear not you will have unfettered access to download, edit, and test any of this to your hearts content. If you wish to deploy this you will need to do so on your own Web Server since the majority is done in PHP. The reason for this is that Voxeo’s shared production network does not allow for server side scripting.

So lets get down and dirty into the components of this application: First off we have our interface which was done in HTML & PHP. The interface is driven by a MySQL database, from which we query for our list of callers and log session results. Now PHP generally falls outside of the scope of our support, so we will not dive to deep into this portion of the application code. It is for the reason we attached the code of the entire application to this posting. The portion I want to focus on here is the throttling mechanism for call launches, the methods we pass data into and out of our CCXML & VoiceXML application for our dialogs. Then finally I will show you how we get the data back from our VoiceXML dialog and log these results back into our database for post call review. At the very end I will have a link to the source code of this entire thing for you to download should you wish to do so. So with out further delay lets take a look at CPS.

Next page…


Want to learn how Voxeo can help unlock your communications and deliver a better customer experience? Please contact us!

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook, or following us on Twitter.


Building Better Phone Applications with Eclipse

Wednesday, January 28th, 2009

This post originally appeared on the VoiceObjects Developer Blog.


Only on the dark side of the moon could you have missed the impact of the iPhone. Its sweeping success has brought mobile services to the mainstream. As the first device to convincingly integrate traditional phone capabilities with Web access, it highlights the multi-channel shape of things to come.

Mobile Web currently has its time in the limelight. But in truth, “mobile applications” have been with us for quite some time. Think phone banking, or sending a text message to check on your remaining pre-paid minutes.

Doesn’t sound right? That’s because in terms of convenience and usability, phone applications have historically played in the minor league. When visiting eBay, have you ever been asked to “look carefully, because the order of our menu options may have changed”? When returning to Amazon, did you ever need to navigate through five levels of menus just to see whether your order has shipped? It’s with the focus on the user that Web applications have set a new standard: dynamic adjustments based on identity, preferences, and past interactions, as well as on-the-fly personalization create a custom experience that makes you want to come back.

In this article, we explore how to build innovative applications that bring the success of the Web to all phone channels. And it’s easier than you may think, by utilizing the latest tools and techniques available to developers.

Phone Channels

As different as the phone channels mobile Web, voice, and text may be, they actually have quite a lot in common. Users on the go are users with a goal. Instead of just browsing to pass the time, they want to get a specific job done. They want to track an order, pay a bill, or check a movie show time. Some may want to do it by sending a text message, some by going to a Web site, and some by calling an 800 number. Yet all of them want to do it as efficiently as possible, with a focus on their goal.

Applications ought to be mindful of this need for efficiency, as it relates to both the caller interaction and presentation design. Limited bandwidth across all the different phone channels needs to be taken into account from the start to achieve an optimal caller experience. The W3C has assembled a valuable set of guidelines that can serve as a check list:

  • Keep content consistent and structurally simple
  • Provide easy means of navigation
  • Avoid free text input whenever possible
  • Use small individual markup documents
  • Avoid embedded objects or scripts

Developers face the flip side of the callers’ requirements: They need to efficiently build and maintain applications that serve multiple phone channels and act consistently across all of them.

The backbone of application development is the core path of interaction between caller and system, the “dialog flow”. As pointed out above, mobile applications are focused on achieving a caller’s goal. They typically go through a number of steps to gather information (such as an amount of money and a recipient) to then perform a transaction (such as transferring money). This basic flow remains the same across different phone channels, though what is presented as a yes/no question in the voice channel may be a radio button in the mobile Web channel. The development environment needs to be able to isolate the channel differences and allow developers to first focus on the commonalities when building the dialog flow. Once this is in place, there must be an efficient way of selectively applying channel- and caller-specific modifications to achieve the adaptive and personalized experience callers have rightly come to expect.

Likewise, the communication with backend systems needs to be integrated across all phone channels. Since this is the place where most of the custom coding is required, seamless interaction with proven SOA frameworks must be ensured. Finally, interoperability with complementary tools to serve the needs of individual channels, such as audio file or speech recognition grammar management, is required.

Architecture

Through the success of standards like VoiceXML, the previously disparate worlds of Interactive Voice Response (IVR) and Web have merged. So not only do callers get to benefit from better applications, but developers’ lives have been made easier by a unified architecture that provides more flexibility, scalability, and interoperability while allowing for faster turnaround than ever before.

The standard architecture for multi-channel phone applications today consists of the following:

  • a unified service creation environment based on the Eclipse framework,
  • a unified service execution environment based on a phone application server, and
  • a unified backend infrastructure based on a service-oriented architecture (SOA).

In the remainder of this article we focus on the service creation environment to see how it helps developers create a better experience for callers.

Eclipse Framework

Eclipse provides an open framework to combine best-of-breed tools into a powerful integrated workbench. Instead of having to make compromises when selecting a monolithic IDE, developers can pick and choose what suits them best from a wide variety of open-source and commercial components. Acting as plug-ins within the Eclipse architecture, these components blend into the overall workbench and smoothly interact with each other.

The benefits of this approach are particularly strong when building multi-channel phone applications, since dedicated tools can be used for the specific technical needs of the different channels. Even better, many of these tools are available as free downloads such as the ones we take a closer look at here.

VoiceObjects Developer Edition is a comprehensive multi-channel framework, which provides integrated support for the voice, video, text, and Web channels. Included are a graphical IDE as well as an embedded phone application server for one-click testing and deployment. Applications are built using an object-oriented approach on the basis of a set of core components modeling caller interactions as well as backend integration and application logic. Rapid prototyping and object re-use are facilitated by a drag-and-drop GUI.

Adaptive personalization is achieved through the concept of “layers”, which also covers topics such as multi-lingual or multi-persona applications. Integrated testing and debugging is available for all phone channels, including a Phone Simulator that shows text and Web applications as they would look on a variety of mobile handsets. To test voice applications end-to-end Voxeo’s Prophecy is the ideal choice.

Grammars are an important aspect of voice application development. Things a caller might say, such as “There’s a problem with my bill” or “Transfer five hundred dollars”, must be modeled so that the speech recognition engine can successfully understand them. Nu Echo’s NuGram IDE offers a suite of tools to efficiently manage these grammars. Productivity features such as auto-completion and on-the-fly validation assist in building grammar rules. For testing and tuning, sample caller utterances can be parsed to analyze grammar coverage and ensure correct semantic interpretation.

Access to backend systems is a crucial part of development regardless of the channels served by an application. Within the Eclipse eco-system, several frameworks are available to help with this task. Two important ones are the Web Tools Platform (WTP) and the SOA Tools Platform (STP).

For simple or one-off tasks, JavaServer Pages (JSPs) are often the solution of choice because of their low overhead and straightforward integration of static and dynamic content. The WTP offers a rich set of features to support their development, testing, and deployment.

For more complex and reusable tasks, Web services are the preferred way to go. The STP provides a broad scope of capabilities covering SOA aspects from business process modeling and service orchestration to code generation, deployment, testing, and documentation.

The Eclipse plug-ins highlighted here, apart from being excellent tools in their own right, offer the added benefit of smooth interoperability within the Eclipse workbench: You can check and tweak a speech recognition grammar while looking at the dialog flow that reacts to the corresponding caller input. You can adjust the application logic with simple drag-and-drops while building the Web service code that connects to the backend. For the first time, developers have simultaneous control of all application aspects without the need to switch between IDEs, or to compromise on features when selecting a single environment.

Summary

Mobile applications are here to stay.

Users have come to depend on retrieving information and performing transactions on-the-go. And they expect the same level of convenience and efficiency they know from home – regardless of whether they call an 800 number, send a text message, or visit a mobile Web site. The challenge lies with the developers to efficiently deliver multi-channel phone applications that adapt dynamically to each caller’s needs and expectations.

The merging of IVR and internet technologies has made it possible to apply the lessons learned on the Web to all phone channels: Benefit from a scalable multi-tier architecture centered on an application server. Unify backend access through the use of Web services and SOA.

On the IDE side, the Eclipse framework has provided the fertile ground on which a multitude of interoperable plug-ins has sprung up that presents developers with a comprehensive suite of capabilities. Every aspect of multi-channel application development can be addressed – and not in isolation, but in correspondence and coordination with each other.

Just as importantly, most of these Eclipse plug-ins can be downloaded for free, giving developers a choice and allowing them to evaluate each tool’s respective benefits.

Never before has it been easier to get from idea to implementation. The flexible and scalable infrastructure is in place, and the tools to realize innovation are in the developers’ hands.

The time for better phone applications has finally come.


If you found this post interesting or helpful, please consider either subscribing via RSS or following on Twitter.


Technorati Tags: , , , , , , ,


Want to learn how Voxeo can help unlock your communications and deliver a better customer experience? Please contact us!

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook, or following us on Twitter.


Code Walk: Listening to Identi.ca (OSCON 2008 Demo #2: VoiceXML)

Tuesday, January 27th, 2009

Back in the summer of 2008, I gave a presentation at O’Reilly’s Open Source Convention (OSCON) about “Mashing Up Voice and the Web Using Open Source and XML” where I talked primarily about integrating voice with the Identi.ca microblogging service. While I made the slides from that talk available previously, I only made one of my mashup demos available here in this Voxeo Developer’s Corner blog (Demo #1: Is Twitter Down?) So I want to change that and start making some more of the demos available.

In my Demo #2, Listening to Identi.ca, I created a VoiceXML application that does the following:

  • Asks the caller if they want to hear:
    • the latest Identi.ca message from the people they follow
    • the latest reply to them
    • the latest public Identi.ca message
  • Uses speech recognition to interpret the result
  • Retrieves the requested information from Identi.ca
  • Relays the information to the caller

Now there is the caveat that this demo is hardcoded to a single identi.ca user (namely me – identi.ca/danyork). You can try it out yourself by calling any of these numbers:

If you would like to try out this code below yourself with your own Identi.ca account, all you need to do is create a free developer account on our Evolution developer portal, create the VoiceXML file and assign it a phone number. (Step-by-step instructions are available.) You also can download a free copy of our Prophecy software, install it on a local system and set up this code there.


With that, let’s jump into the code. The full VoiceXML source code is available down below as something you can copy and paste, but right now I’m going to walk through the pieces of the code.

First we have the standard start of a VoiceXML file and the definition of a variable that is going to be used to store the results of the request to Identi.ca:

<?xml version="1.0" encoding="UTF-8"?>
<vxml version = "2.1">
  <var name="MyData"/>

Next we start the <form> element and begin with defining a JavaScript function that is going to retrieve the text we want from the XML data sent back to us from Identi.ca:

  <form id="F1">
    <script>
      <![CDATA[
          function GetData(d,t,n)  {       
            return (d.getElementsByTagName(t).item(n).firstChild.data);
          } 
      ]]>
    </script>

I can’t claim credit for the JavaScript – it was something I found in one of the VoiceXML tutorials we have available. Basically it is searching the received XML for tags of type “t” and then going to the “n”th tag and retrieving the data from there.

Now we start with a field in the VXML form. Note that I use an audio file that I had previously recorded:

    <field name="Choice">
        <prompt bargein="false">
           <audio src="../audio/identicachoice.wav"/>
        </prompt>

I could have just as easily used Text-To-Speech (TTS) to do the same thing:

    <field name="Choice">
        <prompt bargein="false">
           Welcome to the listen to identi.ca demo. To hear your 
           latest message please say "friends". To hear the latest
           reply please say "replies". To hear the latest public 
           message please say "public".
        </prompt>

Now I define the “grammar” which is the list of the words that I will accept and that the speech recognition engine will listen for:

        <grammar xmlns="http://www.w3.org/2001/06/grammar" xml:lang="en-US" root="MYRULE">
         <rule id="MYRULE">
          <one-of>
            <item>friends</item>
            <item>replies</item>
            <item>public</item>
          </one-of>
         </rule>
        </grammar>

To finish off the field, I’m going to catch two error cases where either the caller said nothing or did not say one of the three words in the grammar:

        <noinput>
        I did not hear anything.  Please try again.
        <reprompt/>
      </noinput>
      <nomatch>
        I did not recognize that word.  Please try again.
        <reprompt/>
      </nomatch>
    </field>

With the <field> defined, I move on to define what happens once acceptable input has been received by using the <filled> element. Note that I am using the Choice name that was defined in the field above.

First I am going to check if the caller said “friends” and if so I am going to use the <data> element to make a web call out to the Identi.ca site. The results of the web call are stored in the MyData variable which is then referenced in the <prompt> element:

    <filled namelist="Choice">
     <if cond="Choice == 'friends'">
      <data name="MyData" src="http://identi.ca/danyork/all/rss?limit=1"/>
      <prompt>
        Your last notice is from <value expr="GetData(MyData,'dc:creator',0)"/>.
        The notice is: <value expr="GetData(MyData,'title',2)"/>.
      </prompt>

Note that I am using the previously defined GetData JavaScript function to walk the XML tree twice: first to get the person sending the Identi.ca notice and second to get the contents of the notice. Now to make this work, I did have to look at the XML sent back by Identi.ca and figure out which were the appropriate tags and position numbers to use.

I next do the same thing for ‘replies’ and ‘public’:

     <elseif cond="Choice == 'replies'"/>
      <data name="MyData" src="http://identi.ca/danyork/replies/rss?limit=1"/>
      <prompt>
        Your last reply is from <value expr="GetData(MyData,'dc:creator',0)"/>.
        The reply is: <value expr="GetData(MyData,'title',2)"/>.
      </prompt>
     <elseif cond="Choice == 'public'"/>
      <data name="MyData" src="http://identi.ca/rss?limit=1"/>
      <prompt>
        The last public notice is from <value expr="GetData(MyData,'dc:creator',0)"/>.
        The notice is: <value expr="GetData(MyData,'title',1)"/>.
      </prompt>
     </if>

You will note that I explicitly tested for ‘public’ although I really didn’t need to do so. The grammar only allowed three options, so if it was not one of the first two it would naturally be ‘public’. I could have just used an <else/> here.

Finally I just thank the caller with a final prompt and end the various elements to close off the file:

      <prompt>
        That is all. Thank you for calling in.
      </prompt>
    </filled>
  </form>
</vxml> 

FULL SOURCE CODE

For those who want to see the entire source code or copy/paste the code, here it is. You’ll note that I have here the TTS version since you won’t have access to the audio file I made. If you’d like to use a recorded prompt, you can use the code I had above.

Obviously wherever you see “danyork“, you can substitute your Identi.ca user name or that of whomever you want to hear the messages from.

<?xml version="1.0" encoding="UTF-8"?>
<vxml version = "2.1">
  <var name="MyData"/>
  <form id="F1">
    <script>
      <![CDATA[
          function GetData(d,t,n)  {       
            return (d.getElementsByTagName(t).item(n).firstChild.data);
} 
      ]]>
    </script>
    <field name="Choice">
        <prompt bargein="false">
           Welcome to the listen to identi.ca demo. To hear your 
           latest message please say "friends". To hear the latest
           reply please say "replies". To hear the latest public 
           message please say "public".
        </prompt>
        <grammar xmlns="http://www.w3.org/2001/06/grammar" xml:lang="en-US" root="MYRULE">
         <rule id="MYRULE">
          <one-of>
            <item>friends</item>
            <item>replies</item>
            <item>public</item>
          </one-of>
         </rule>
        </grammar>
        <noinput>
        I did not hear anything.  Please try again.
        <reprompt/>
      </noinput>
      <nomatch>
        I did not recognize that word.  Please try again.
        <reprompt/>
      </nomatch>
    </field>
    <filled namelist="Choice">
     <if cond="Choice == 'friends'">
      <data name="MyData" src="http://identi.ca/danyork/all/rss?limit=1"/>
      <prompt>
        Your last notice is from <value expr="GetData(MyData,'dc:creator',0)"/>.
        The notice is: <value expr="GetData(MyData,'title',2)"/>.
      </prompt>
     <elseif cond="Choice == 'replies'"/>
      <data name="MyData" src="http://identi.ca/danyork/replies/rss?limit=1"/>
      <prompt>
        Your last reply is from <value expr="GetData(MyData,'dc:creator',0)"/>.
        The reply is: <value expr="GetData(MyData,'title',2)"/>.
      </prompt>
     <elseif cond="Choice == 'public'"/>
      <data name="MyData" src="http://identi.ca/rss?limit=1"/>
      <prompt>
        The last public notice is from <value expr="GetData(MyData,'dc:creator',0)"/>.
        The notice is: <value expr="GetData(MyData,'title',1)"/>.
      </prompt>
     </if>
      <prompt>
        That is all. Thank you for calling in.
      </prompt>
    </filled>
  </form>
</vxml> 

I hope you found this tutorial useful and please feel free to leave your comments, suggestions or questions here. (Including if you think of a better way for me to write my VXML code.)

Meanwhile, as I said before, if you would like to try out this code below yourself with your own Identi.ca account, all you need to do is create a free developer account on our Evolution developer portal, create the VoiceXML file and assign it a phone number. (Step-by-step instructions are available.)

Also, if you extend this app and do something interesting with it (for instance, allowing the caller to choose between different Identi.ca accounts) and would be open to sharing what you’ve done, please feel free to email me. I’d love to post some follow-up posts that show what else you can do with VoiceXML and services like Identi.ca.

P.S. Because Identi.ca uses the same style of RESTful API as Twitter, this script can be modified to work with Twitter by simply changing the web call in the <data> element to be for the Twitter API. If I recall correctly, I also had to figure out what tag name and item number were necessary for the GetData function as the XML data returned was different between Identi.ca and Twitter.


If you found this post interesting or helpful, please consider either subscribing via RSS, following us on Twitter or following us on Identi.ca.


Technorati Tags: , , , , ,


Want to learn how Voxeo can help unlock your communications and deliver a better customer experience? Please contact us!

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook, or following us on Twitter.


Step-by-step: The process of creating a new CallXML, VoiceXML, or CCXML application in Voxeo’s Evolution developer portal and assigning a phone number

Friday, January 23rd, 2009

Recently I had someone ask me about how simple the process was to create a new application on Voxeo’s voice application platform and assign it a phone number in our hosted Evolution developer environment. It’s really only a few steps and I probably will do an Emerging Tech Talk screencast at some point, but I thought I’d also just outline the steps in a blog post. Here is the quick summary of what you are going to do:

  1. Create a CallXML, VoiceXML or CCXML file and put that file either on your own web server or in our free web hosting space.

  2. In the Evolution Application Manager, create a “new application”.
  3. Name the app, map it to the XML file you created in step #1 and give it an inbound phone number if you want to do so.
  4. Click the “Create Application” button.

That’s really all there is to it. You can then start calling into the app right away.

Now let’s make it truly “step-by-step” and go through the steps in excruciating detail complete with screenshots:


1. LOGIN TO EVOLUTION – Yeah, I know it’s a “Duh!” thing, but you do have to login to evolution.voxeo.com. If you don’t have an account, you can create one for free. (This entire process here, including obtaining inbound phone numbers is entirely free. No charges anywhere.)


2. CREATE THE APPLICATION FILE – Now, you can skip this step if you are going to use our graphical Designer tool, but if you are creating a voice application in CallXML, VoiceXML or CCXML you have to… well… create the application file first. Yes, I realize this is another “Duh!” moment, but hey, if I was going to skip steps I wouldn’t call this a “step-by-step” tutorial, would I?

2a. IF YOU ARE HOSTING YOUR APPLICATION FILE ON YOUR OWN WEB SERVER, simply create the XML file and put it somewhere on your web server that is publicly accessible. You can skip ahead to Step 3.

2b. IF YOU ARE USING OUR (FREE) WEB HOSTING, you need to follow this quick process.

  • First, scroll down the first page inside Evolution until you see “Files, Logs and Reports” and click on that link:

    evo-newappfilelogsreports.jpg
  • Click on “www” to go into that directory. (All XML files that you want to map to applications need to be stored in “www”.)
  • You will now see the list of files in your www directory (obviously I have some in here for various apps) and at the bottom you’ll see fields to either “Upload File” or create a “New File”:
    evo-filemgrwww.jpg
  • If you have created the XML file on your local computer, you can simply locate the file and click the “Upload” button. If you want to create a brand new file, you can enter the name of the file and click the “Create” button. I’m going to create a file called “mysimplesample.xml“.
  • Once you’ve done that, you’ll see the directory again and if you have uploaded an XML file you wrote, you’re all set and can go on to Step 3. If you are creating a new file, you need to click the pencil icon next to your new file and go into the editor:
    evo-newfileedit.jpg
  • You’ll now see a blank editor window:
    evo-newappeditor1.jpg
  • You can now just type in your text. I’m going to have the editor help me by choosing the “CallXML 3.0 Template” and clicking the Insert button. I’m then going to type in simple “<say>Hello, World!</say>“. The end result will look like this:
    evo-newapphelloworld.jpg
  • Click on the “Save Changes” button and wait to see “Successfully saved file” on the top of the page.
  • Click on the “Account” link in the upper left corner to return to your main “Account Overview” page:
    evo-newappeditordone.jpg

3. GO INTO THE APPLICATION MANAGER – Now to get to the mapping of an application to a phone number, click on the Application Manager link:

evo-appmgr.jpg

4. ADD AN APPLICATION – You will now see a list of all the applications you currently have in your account (which may be none if its a new account). Click the Add Application button at the bottom of the list:

evo-addapp.jpg

5. CHOOSE THE TYPE OF APPLICATION – You next need to choose the type of application you are adding. This could be an application built using our visual Designer tool or it could be an application written in either CallXML, VoiceXML or CCXML (see our Platform Guide to understand the differences):

evo-platformchoice.jpg

After choosing the platform type, click the “Next” button. For the purpose of this blog post, I’m just going to create a quick CallXML application.


6. ENTER AN APPLICATION NAME – The next screen you see will involve a couple of actions. First you need to provide some name for the application. It’s going to show up in your list of applications in the application manager but only you see it, so as long as you remember what the name means, you can use any name you want:

evo-newappsettings.jpg

Do NOT click the “Create Application” link yet. We still have work to do.


7. ASSIGN A URL – This is where you connect the “application” created in Evolution to the actual XML file you have created (or are about to create).

7a. IF YOU ARE HOSTING YOUR OWN XML FILE on your own webserver, simply enter the URL here in the field marked “Start URL 1″. You can now skip down to step 8.

7b. IF YOU ARE USING OUR WEB HOSTING, do the following:

  • Click on the “file manager” link next to “Start URL 1″:

    evo-newappsettings2.jpg
  • In the File Manager window that pops up, just click on the name of the file and click the “Map” button:
    evo-newappfilemgrmapping.jpg
  • Ta da… you should see your URL entered in “Start URL 1:

8. ADD A PHONE NUMBER – You now have a choice. If you just want to test your voice app calling in via Skype (read more about calling into your apps using Skype), SIP, or using an 800-number and a PIN, you’re done. Just click “Create Application” and your application will be created. If you would like to assign a direct phone number to your application, click on the “Application Phone Number” pop-up menu and choose from one of the available regions:

evo-newapp-aboutoaddphonenum.jpg

Then just simply click “Create Application” and you’re done.

Now before you ask… no, you can’t choose a specific number. Only US numbers are available. The available regions will change over time as we exhaust some pools of numbers and add others. And it’s for a region, not necessarily the precise area code visible in the popup (For example, right now it’s showing “Boston, MA (617)” but the numbers being allocated are 857.) Please remember that these are free inbound phone numbers we’re making available for you to use in developing your application. If you move your application into our production environment then as part of establishing a commercial relationship with you we’ll work with you on setting phone numbers.


9. CALL YOUR APPLICATION! You’re done with the creation of a new app and mapping a phone number in our system. Just give it a call! For a complete list of available phone numbers, click on the “Phone Numbers” tab to see the many different ways you can call into your voice application:

evo-newappphonenumbers.jpg

That’s it! You’re now creating voice applications.


And yes, if you’re really bored you can indeed call this “Hello, world” app at +1-857-366-6244 or one of the other numbers.

But why call my highly-exciting sample app? Why not sign up for a free developer account on Evolution and create your own sample apps? (And then quickly move on from there into creating much more powerful voice applications?)


If you found this post interesting or helpful, please consider either subscribing via RSS or following on Twitter.


Technorati Tags: , , , , , , , , , , ,


Want to learn how Voxeo can help unlock your communications and deliver a better customer experience? Please contact us!

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook, or following us on Twitter.


Developers – you can download VoiceObjects 7.4 now…

Tuesday, January 13th, 2009

VoiceObjectslogo-2.jpg

VoiceObjects Developer Edition 7.4 is available for download now.

Exciting new features of this release include:

  • Support for 2-way SMS dialogs

    VoiceObjects 7.4 has expanded the text channel so that in addition to USSD dialogs text messaging from mobile devices using the Short Message Service (SMS) is now supported. The architecture follows a flexible, extensible adapter approach to be able to support arbitrary SMS gateways. Using the new functionality organizations can extend their automated self-service offerings to additional channels, providing users of mobile phones and messaging clients a powerful and efficient interface. Moreover, new customer groups may be entered by providing a means of interaction that is unmatchable low in cost.

  • Security enhancements
    Two new user roles as well as several new capabilities related to password handling have been added to VoiceObjects user management to support deployments in security-sensitive areas.

  • Newly supported Media Platforms
    Support has also been added in VoiceObjects 7.4 for the media platforms Nortel ICP and Voxeo Prophecy 9.0.
  • New expression functions

    A significant number of new expression functions has been added to enable more convenient manipulation of strings and dates. There is also a new function to easily apply configuration settings in a bulk operation. Visit our blog to learn how the new functions can be used: Exploring the new Expression Functions in VoiceObjects 7.4 and Handling Test Case Data in VoiceObjects 7.4

You can download VoiceObjects Developer Edition 7.4 from
http://developers.voiceobjects.com/downloads/

To learn more about VoiceObjects 7.4 join our Developer Jam Session on January 14th.

Join us to stay up-to-date with the newest release.


This article was originally posted by Michael Gill in the VoiceObjects Developer Blog


If you found this post interesting or helpful, please consider either subscribing via RSS or following on Twitter.


Technorati Tags: , , , , , ,


Want to learn how Voxeo can help unlock your communications and deliver a better customer experience? Please contact us!

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook, or following us on Twitter.


What the VoiceObjects acquisition by Voxeo means for voice application developers…

Tuesday, December 9th, 2008

VoiceObjectslogo.jpgWhat if there was an easier way to develop large-scale voice applications? What if there was a way to develop voice apps that fit in with many of your existing developer tools? What if you could write voice apps in a way that allowed you to easily re-use your components?

Today, we here at Voxeo are delighted to bring you such a solution through our acquisition of VoiceObjects, the world’s leading provider of self-service application development and analytics solutions.

For a brief intro, you can watch an Emerging Tech Talk video podcast where I interviewed VoiceObjects co-founder and CTO Michael Codini this morning about the acquisition.

From a developer point of view, VoiceObjects offers a very strong set graphical design tools based on the Eclipse development platform. Creating very advanced voice applications is now a very simple process – and you do have ways to easily re-use existing components, to link to external services and much, much more.

VoiceObjects provides a free download of their developer edition on their developers.voiceobjects.com developer portal. They also provide a wealth of great information to help developers get started:

We encourage our developers to check out all that information and to download and try out the VoiceObjects software. You can be sure that we’ll be posting more information, guides, screencasts/webcasts and so much more over the weeks and months ahead.

If you have any questions about this news, please feel free to leave a response to this post or to email me directly.

One final note – I have had a few people ask how this acquisition affects our Prophecy Designer tool. It doesn’t. Designer is a great tool for quickly and easily designing voice applications and it will continue to be part of our offerings. VoiceObjects now just brings some more advanced capabilities to build even larger and more complex voice applications. Being Eclipse-based, VoiceObjects also fits very nicely into customers’ development environments where they are already using Eclipse.

As I said, if you do have more questions, please feel free to send them along or post them here. We’re very excited about the acquisition and looking forward to the many great applications the combined companies will enable you to create!

Technorati Tags: , , , ,


Want to learn how Voxeo can help unlock your communications and deliver a better customer experience? Please contact us!

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook, or following us on Twitter.


Adding Call Control to Voxeo Designer Applications via CCXML

Wednesday, November 26th, 2008

voicexmlcertifieddeveloper.gif

Lately, the Voxeo Designer platform has become increasingly popular. However, it can be somewhat limited in terms of call control. Customers who are used to a combination of CCXML and VoiceXML may be turned away by this idea. Well, fear not, as we can easily integrate CCXML and Designer now, adding that game-changing call control aspect that CCXML brings to the table. Why use a CCXML front end, you say? Well, lots of reasons. CCXML brings call control, conferencing, whisper dialogs, hold dialogs, as well as the ability to pass in parameters to your Designer application. Whether it’s “you have a call from John Smith, press 1 to accept this call,” or a simple repeating hold music dialog, it is now possible with Designer dialogs.

So now let’s take a look at how we put it all together. Let’s assume that you already have a basic Designer application established. At this point, we don’t care what it does. Now, we need to write a CCXML front end for it.

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

    <transition event="connection.alerting">
      <log expr="'Preparing to answer the call.'"/>
      <accept/>
    </transition>

    <transition event="connection.connected">
      <log expr="'Caller has connected.  Executing VoiceXML dialog now.'"/>
      <dialogstart src="'helloworld.vxml'" type="'application/voicexml+xml'" dialogid="myDialogID"/>
    </transition>

    <transition event="dialog.exit">
      <log expr="'The dialog is now complete.  Exiting application.'"/>
      <exit/>
    </transition>

    <transition event="error.*">
      <log expr="'An error has occured (' + event$.reason + ').  Exiting application.'"/>
      <exit/>
    </transition>

  </eventprocessor>
</ccxml>

This simple CCXML code snippet accept a user’s call, and launches a VoiceXML dialog titled helloworld.vxml. Now, all we need to do is modify the “src” attribute to reference the Designer application. How, you ask? Well, it’s a little tricky, but far from impossible. All we need to do is grab the Designer URL from the Application Debugger (or the Prophecy Log Viewer, for all the local installations out there). The full URLs will look something like this, and may require copying the link to the clipboard (in Evolution, at least) in order to see the entire thing:

Evolution Designer:

  http://evodesigner-internal.voxeo.com/CallRouter?vr.application.id=XXXX   (where XXXX is your specific Application ID)

Prophecy Designer:

  http://127.0.0.1:9992/CallRouter?vr.application.id=X   (where X is your specific Application ID)

We can then inject this into the <dialogstart> keeping everything else the same. The dialog “type” remains “application/voicexml+xml” since Designer is pure VoiceXML behind the scenes, coupled with a custom GUI.

Now let’s take a look at the finalized code, with our Designer dialog in place.

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

    <transition event="connection.alerting">
      <log expr="'Preparing to answer the call.'"/>
      <accept/>
    </transition>

    <transition event="connection.connected">
      <log expr="'Caller has connected.  Executing Designer dialog now.'"/>
      <dialogstart src="'http://127.0.0.1:9992/CallRouter?vr.application.id=1'" type="'application/voicexml+xml'" dialogid="myDialogID"/>
    </transition>

    <transition event="dialog.exit">
      <log expr="'The dialog is now complete.  Exiting application.'"/>
      <exit/>
    </transition>

    <transition event="error.*">
      <log expr="'An error has occured (' + event$.reason + ').  Exiting application.'"/>
      <exit/>
    </transition>

  </eventprocessor>
</ccxml>

And there you have it — a basic application which launches a Designer dialog. Hopefully this will help shed some light on how developers can combine the utility of CCXML with the usability of Voxeo Designer.

Jeff Menkel VXML Certified Developer


Want to learn how Voxeo can help unlock your communications and deliver a better customer experience? Please contact us!

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook, or following us on Twitter.