Intrigued by the idea of voice access to back-end applications, my research into VoiceXML and related technologies led me across the path of a very cool online tool that supports 100% online VoiceXML application development. The online development tool (and let me say that this may be the first time I’ve ever referred to a Web site as a ‘development tool’!) is Tellme Studio and it is a living testament to the power of XML-based technologies. Once an account has been created at the Studio, developers can completely rely on the VoiceXML standard to contruct live voice-based applications for wireless devices. Intrigued by the idea, I decided to revisit Tellme Studio and put it through its paces to see if it delivers on the promise.
Some Background
If you’re not familiar with the concept of voice portals or VoiceXML, let me refer you first to our tutorial and the VoiceXML Forum for more information. Basically, the driving concept is that not all consumers will want to access wireless content or applications through a pen- or keyboard-based interface…never mind a 12-digit keypad. The logical next step is to make use of the traditional mode of communications that has stood the test of time: the voice. A variety of voice “portals” have sprung up to service this audience including Tellme, BeVocal, and Mobilee. Tellme has created their Studio product for developers interested in hosting content on their service. A stated intention is to keep the service free (or extremely low cost) for independent developers while charging larger accounts or businesses to host their applications. Before continuing, if you haven’t used Tellme at least once, give it a try by dialing 1-800-555-TELL. This will familiarize you with the information in the rest of this article. A number of keywords can be used to access existing applications, including “Movies”, “Airlines”, and “Stock Quotes”.
My First VXML App
After creating an account at the Tellme Studio, I was presented with a “My Studio” screen which contained a simple “Hello World!” application already pre-constructed. Saving the application and registering it allows anyone to dial a 1-800 number and access the application! Also included within the studio is a complete VoiceXML tag reference as well as a handy library which includes:
- Common VoiceXML “grammars” – built-in definitions that help the voice engine understand user commands
- Audio files – sounds to play for common commands such as help, goodbye, and stop
- Code modules – public VXML and JavaScript source code to handle common tasks
Like most self-respecting developers, I assumed that the “Hello World” app was far too simple for my vast talents so I deleted it…only to kick myself a few minutes later as I struggled with some VoiceXML basics! Moving beyond that, I found that I gained a grudging respect for the structure that XML forces upon the VXML developer – not unlike the rigid nature of WML. There is no fooling the XML parser and voice interpreter and, unlike WML, you have the assurance that the end user will access the content correctly regardless of their device. I decided to built a fairly straightforward application that will provide the user with voice content from three sources:
1. Text physically contained within the host VXML markup file
2. Text retrieved from a VXML file hosted at WirelessDevNet
3. Text generated dynamically from a database query at WirelessDevNet
To do this, I decided to present the user with a menu offering three types of information: the latest wireless industry news from WirelessDevNet, the latest content added to WirelessDevNet, and a static amount of information on several leading companies in the wireless industry. The VXML code used to implement this menu is shown below in Listing 1.
Listing 1 – The VXML Main Document
<!DOCTYPE vxml PUBLIC “-//Tellme Networks//Voice Markup Language 1.0//EN” “http://resources.tellme.com/toolbox/vxml-tellme.dtd”> <vxml> <menu id=”three_choice_menu”> <prompt> <audio>Welcome To WirelessDevNet’s Voice Portal! Say Content, Company Info, or News To Proceed.</audio> </prompt> <choice next=”#Content”> content </choice> <choice next=”http://www.wirelessdevnet.com/channels/voice/company.vxml”> (?company info) </choice> <choice next=”http://www.wirelessdevnet.com/channels/voice/news.phtml”> news </choice> <default><reprompt/></default> </menu> <form id=”Content”> <block> <audio>New content this week includes a discussion on Nokia’s Wireless Internet Strategy, thoughts on Wireless Session Tracking, and a look at Bluetooth as it moves forward. Also, don’t miss our new online WML tag reference! </audio> <goto next=”_home”/> </block> </form> </vxml> |
A few notes about the code above before we move on. The user is initally presented with a decision tree in the form of a VXML. If the user chooses “Content”, they will be taken to a text string within the file that will be converted, on-the-fly, to speech by the Tellme voice processing engine. Of course, this content could be stored anywhere on the Web. Finally, saying “News” will cause a PHP script to be run on our server that dynamically generates (formatted in VXML) the last 10 news headlines on WirelessDevNet. Listing 2 shows the PHP code used to produce this (using the PostgreSQL database).
Listing 2 – The Dynamic PHP/VXML Script
<!DOCTYPE vxml PUBLIC “-//Tellme Networks//Voice Markup Language 1.0//EN” “http://resources.tellme.com/toolbox/vxml-tellme.dtd”> <vxml> <form> <block> <audio> <?php $conn = pg_connect(‘host=XXX dbname=XXX user=XXX’); $rsRef = pg_exec($conn, “(SQL QUERY)”); for ($i=0; $i <10; $i++) { $title = pg_result($rsRef, $i, “title”); $out .= $title.”! “; } echo $out; ?> </audio> <goto next=”_home”/> </block> </form> </vxml> |
Some Notes
Before testing your application, be sure to first use the Syntax Checker in order to validate your VXML. Once you pass that test, dial into Tellme to test your application. Should your application fail, simply select the “View Log” Button (under Debug Tool) to view a report of all the errors that were encountered. Like most debuggers, some of the errors didn’t nail down my problem (since I’m a newbie), but they did help me know where to look. For instance, after some trial and error, I discovered that the items between the tags need to be lower-case – i.e. news, content, etc., not News, Content, Etc.. When you’re ready for the world to use your application, select the Tellme Extensions link to move forward. There, you’ll need to tell the Studio where your root VXML file will be located and whether you’d like it published in the Tellme Directory.
Accessing The Application
As I mentioned earlier, I registered the application for all the world to hear. To use this simple application, dial 1-800-555-TELL and say “Extensions” when prompted. The Application ID I was given is: 85367. To summarize, I found this mode of application development to be incredibly powerful and rather easy to implement. The fact that VXML applications can be integrated with traditional Web services and accessible via a public phone number in a matter of hours makes this technology a must-support for enterprises and information providers looking to reach a large number of mobile users. I’m curious to hear what you think the advantages and implications of this technology are so be sure to leave your comments with this article.