Archive for January, 2009

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.


Learning CallXML, Part 1: A very simple ‘Hello, world’ voice app

Monday, January 26th, 2009

Do you want a really simple way to create voice apps? Are you looking for something simpler to write in than VoiceXML?

Throughout this Voxeo Developer’s Corner blog as well as our other blogs, we have tended to focus most of the attention on developing applications using the open standards of VoiceXML or CCXML (Call Control XML). There’s a reason for this… we are huge advocates of open standards and the need to avoid “vendor lock-in” – and we’ve deployed the most standards-compliant VoiceXML implementation out there. We want you to use our voice application platform and stay with us because of our extreme support and outstanding platform… not because we are forcing you to do so.

But recently as I’ve noticed people out there on the Internet seeking something simpler than VoiceXML, it’s become clear that we are not talking enough about the other XML language we support – our own CallXML.

CallXML was created back in 1999 when Voxeo was founded and has gone through several generations of development since that time (the most recent version is CallXML 3.0). It is very simple to use yet also cable of creating very complex applications. It’s also highly scalable with one customer of ours using CallXML for an application that is literally making thousands of simultaneous calls.

So I’m going to spend some time writing here about CallXML and showing how incredibly easy it is to build voice applications using it. You’re welcome to follow along… of course, you don’t have to wait for me… there’s a detailed set of CallXML tutorials and also an Element Summary if you just want to dive into the CallXML elements themselves and start coding.

All you need is a free developer account on our Evolution developer portal or to download a free copy of our premise Prophecy software (and remember that the beta of Prophecy 9 is on Mac OS X and Linux in addition to Windows). Note that I recently posted a step-by-step tutorial of creating an XML application in Evolution and assigning it a phone number that you may find useful.

So with that, let’s stop talking and start writing code…


Let’s start with the very basic program that simply says “Hello, world”. That is accomplished through the <say> element. Here’s how the program looks:

<?xml version="1.0" encoding="UTF-8"?> 
<callxml version="3.0">
    <say>Hello World</say>
</callxml>

Yep, that’s it. Create it in your Evolution account, assign it a free direct-dial US phone number or call it via SIP or Skype. Ta da… you’ve written a CallXML app.

Now if you have come from the world of VoiceXML, you may be more familiar with the <prompt> element and CallXML 3.0 now offers that as well. At first glance it looks very much like the <say> element:

<?xml version="1.0" encoding="UTF-8"?> 
<callxml version="3.0">
    <prompt>Hello World</prompt>
</callxml>

But the <prompt> element also includes some other fun things you can do, such as this:

<?xml version="1.0" encoding="UTF-8"?> 
<callxml version="3.0">
    <prompt repeat="3">Hello World</prompt>
</callxml>

Which, as you might expect, repeats the text three times.

There is a great amount more you can do with the <prompt> element, but I’m going to leave this simple example here and pick up with some more ideas in the next post. Those of you who want to dive in deeper right away can of course look at the examples on the <prompt> element documentation page.

Have fun with it and I’ll dive a bit deeper in Part 2…

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.


Want to learn about VoiceObjects? Join the Developer Jam Session tomorrow…

Tuesday, January 13th, 2009

VOdeveloperjamsession.jpgAre you interested in learning more about VoiceObjects and how you can use VO to rapidly develop complex voice applications? If so, you can join VoiceObjects VP Stefan Besling tomorrow for a “Developer Jam Session” webinar where we will go through the new features of the recently announced VoiceObjects 7.4:

Date: January 14, 2009
Time: 8am PDT, 11am EDT, 5pm CET
Topic: Introducing VoiceObjects 7.4
Speaker: Stefan Besling, Vice President of Engineering, VoiceObjects Germany GmbH

Abstract: This session will give you an overview of the enhancements and new capabilities provided with VoiceObjects 7.4. Learn about 2-way SMS and Instant Messaging, security and user management enhancements, object extensions, and a lot more. Join us to stay up-to-date with the newest release of the VoiceObjects platform.


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.