Archive for the ‘Tips and tricks’ Category

Creating IM Bots … and phone-less testing

Friday, September 4th, 2009

Did you read Tobias Göbel’s very recent blog about “IM-ifying VoiceObjects applications”? Well, I’m not saying it’s outdated. But, things have become even simpler since then.

When provisioning applications on Voxeo Evolution, you are no longer confined to the IVR channel. In addition to voice phone applications, you can provision your applications as “text messaging” applications. And you can provision these text messaging apps as an SMS service and / or map them to bots on the different IM networks, all in one single spot. Read the recent Voxeo blog about this new feature.

Now, what does this mean for VoiceObjects developers?

First of all, the two new options for deploying text messaging apps are actually very different both technically and  in terms of use case. This is represented by the following architectural sketch:

Architecture

Application Type “Instant Messaging Bot”

First, have a look at the right-hand-side of the drawing. In VoiceObjects Server, the media platform driver Voxeo IMified Platform is selected (which has been available since VO 9 R1), while in Evolution, the application type is set to Instant Messaging Bot. In this scenario, Evolution is just the place where you configure your bots on IMified and provision the application’s start URL pointing to your VoiceObjects Server. The actual session-related traffic will be exchanged directly between VoiceObjects Server and the IMified platform, which in turn is connected to the IM networks. In the VoiceObjects service, the text channel will be active, and you can specifically design your application for this channel. (If you have never seen a VoiceObjects service in the text channel yet, watch this little demo video that shows how to test-drive a text app with the VoiceObjects PhoneSimulator).

“Instant Messaging Bot” is the application type you want to use for service with a specific design for the text channel. Under the hood, it uses the XML/http-based IMified API.

Application Type “Prophecy 10 VXML 2.1 /w SMS”  (aka Phoneless testing!)

Now, for the left-hand side of the architectural sketch. The difference looks small, but this is actually a completely different approach. Here, (a beta version of) Voxeo Prophecy 10 is sitting in between the application Server and the IMified platform. In VoiceObjects, you configure the exact same media platform driver as in the case of Voxeo-based IVR applications: Voxeo Voice Platform. In other words, VoiceObjects Server renders plain old VXML 2.1. In Evolution, you pick the new application type Prophecy 10 VXML 2.1 /w SMS. The Prophecy server is connected to IMified via MRCP, and rather than using ASR and TTS as IVR resources, it is treating IMified as a resource for (dis)playing prompts and processing grammars.

What happens if you talk to an IM bot configured this way? Well, he’ll speak the TTS text that he finds in the VXML, and he will process the input you type into the chat window based on the grammar(s) defined in the VXML code. What if your application expects DTMF input? You simply type in a number. What if you type in an out-of-grammar utterance? Guess what, a NoMatch event is triggered and the according NoMatch prompt will be played. What if you stay inactive for more than a few seconds? Of course – a NoInput event will be triggered, and if you have a NoInput handler defined, it will be processed.

In short: We’re looking at the perfect phone-less testing device for voice applications. Here’s a screenshot from a sample session; you can see me “talking” to the voice channel version of our SpeechTEK 411 demo application. Note the NoMatch and the NoInput situations.

Sample IM session

So - can you think of a more elegant phone-less testing test harness? I can’t.

When deploying and testing your voice application in this way, just make sure that all your prerecorded prompts have alternative TTS text defined, and set the speech timeout to a much higher value than the standard 3 seconds.

VoiceObjects LoadTester available for download

Friday, July 31st, 2009

Load and performance testing, functional regression testing, active production monitoring – things that ain’t fun, but need to be done if you’re serious about service quality and 24×7 availability.

For internal quality assurance based on test automation, as well as for automated testing in projects delivered by our own professional services and by partners, the Voxeo VoiceObjects team has developed and has been using a great little tool for quite a while: The VoiceObjects LoadTester. Technically, it’s a set of Python scripts that allow for

  • recording test scripts by making reference calls;
  • playing back test scripts by few or by hundreds of virtual callers (simulation of real-world workload), stressing the VoiceObjects Server platform and all involved back-end systems, while at the same time verifying that the system still responds quickly and correctly even under peak load conditions;
  • and help to analyze system performance and response times, identify system bottlenecks, and understand resource usage.

The primary use case is making sure that the sizing and configuration of the VoiceObjects platform, including the server cluster, load balancer, Infostore setup, and back-end systems are ready to meet peak load situations, and that the system survives breakdown of single components.

An additional important use case is automated functional regression testing - making sure, with every new service release, that functionality that once was tested successfully hasn’t been broken since then. Finally, the LoadTester can be used for active production monitoring: Executing a set of test scripts in regular intervals (like, every 3 minutes) against the production system, performing transactional, end-to-end testing, that feeds health information and alarms into an existing system monitoring solution.

Now, why do I write about this? Simple: You can now download and use the VoiceObjects LoadTester in your own projects, for free. It will be official part of the VoiceObjects package in the next revision of VoiceObjects 9.0. And it is available today, as a pre-release, here: LoadTester.zip (this package contains a full installation for Windows, including the Python interpreter and required libraries).

On July 29, 2009, I presented the LoadTester in one of our developer jam sessions. Be sure to download (and scan through) the slides I used in the presentation, get the LoadTester Guide, and - sit back and relax – watch a recording of the webinar.

Finally, these are some images with charts generated the VoiceObjects LoadTester. Want to know what they show? Well, check out the LoadTester Guide – it’s all explained in there.

 

Mini-Preview of LoadTester charts

Mini-Preview of LoadTester charts

VoiceObjects Analyzer for MicroStrategy 9 – Free Edition

Monday, July 20th, 2009

A few weeks ago you have learned how to enable Infostore on your Developer Edition. Once the connection to Infostore has been established, detailed information about the calls to your application are beeing logged to the Infostore repository.  By the way if you want to learn how you can fill your new Infostore repository faster than by manually making calls, join us for our next Developer Jam Session taking place on July 29 at 11am Eastern to learn about LoadTester. Registration is open now.

With VoiceObjects Analyzer for MicroStrategy 9 now available for download from the VoiceObjects Developer Portal (for the free Developer Edition) as well as from the VoiceObjects Service Portal (for existing customers), and the parallel offering of the free available MicroStrategy 9 Reporting Suite you can now complete your package of free solutions to get all the possibilities to create and call applications with Voxeo VoiceObjects  Developer Editon, and to analyze the callers’ behavior by running one of the 50 standard reports that are part of VoiceObjects Analyzer for MicroStrategy 9.

A detailed description on how to download, install and configure MicroStrategy 9 and VoiceObjects Analyzer is available here. Follow the descibed steps and come back to this post once MicroStrategy 9 is running properly and VoiceObjects Analyzer for MicroStrategy has been imported successfully.

In the following we will briefly describe how you can run one of the standard reports delivered with VoiceObjects Analyzer in MicroStrategy 9. Keep in mind that running a meaningful report requires to have at least some useful data in your Infostore repository. By the way, we are planning to extend our free offering by adding a package of Infostore demo data. Stay tuned for more details within the next couple of weeks!

  1. Open MicroStrategy Desktop (typically available from the start menu “Start” -> “All programs” -> “MicroStrategy” -> “Desktop”).
  2. Provide the login details as defined in the Intelligence Server configuration (default is Administrator and empty password).
  3. Open the Project Source “VoiceObjects Analyzer” (or any other name you have defined in the Project Source creation process).
  4. Open the project “VoiceObjects Analyzer v9 R1″.MicroDesktop
  5. The standard reports can be found in the folder “Reports” below “Public Objects”. They are distributed in three categories “Administration and Maintenance”, “Application Development and Tuning” and “Business and Caller Analysis”. Refer to the Analyzer Guide for detailed information on the different reports.
  6. As an example open the report “Number of Sessions by Day” from the category “Administration and Maintenance”.
  7. In the upcoming prompts select the service and pick at least the year on which the report should be run. Click  “Finish” to start the report. You should get a report looking similar to the following example:
    ExampleReport
  8. Now you can enjoy exploring the variety of available reports.

As always, if you have any problems, questions, or suggestions do not hesitate to contact our Extreme Support.

How to Setup MicroStrategy 9 with VoiceObjects Analyzer

Monday, July 20th, 2009

The following text describes how to download, install and configure MicroStrategy and VoiceObjects Analyzer for MicroStrategy to properly work together.
Before we begin with the installation process itself you should take a moment and step through the prerequisites, so that everything needed is available for the setup.

Prerequisites & System Requirements:

  • VoiceObjects Analyzer for MicroStrategy 9 (download from the Developer Portal)
  • MicroStrategy 9 free reporting software (download from MicroStrategy – ~ 1,8 GB!)
    NOTE: Registration is required before you can download MicroStrategy 9.
    Once registered you will receive an email with a license key that must be entered during the installation process.
  • A Infostore repository with at least some logging data in it
  • Microsoft Office 2002 or higher
  • Acrobat Reader version 7 or higher
  • Adobe Flash Player version 9.0

Once you have completed collecting all the material we can start with the installation process.

Installation:

  1. Double-click the file MICROSTRATEGY9.exe to start the installation.
  2. Enter the license key you received from MicroStrategy.
  3. Follow the instructions and keep all default settings.
  4. Send activation request.
  5. Restart your computer.

After the installation you now need to activate and configure MicroStrategy properly.

Activation & Configuration

First open the “License Manager” from the start menu and switch to the tab “License Administration”. Click “Next” and select the option “Server Activation using Activation Code”. Now paste in the activation code you have received by email after you sent the activation request during the installation process of MicroStrategy.

License Manager

Click “Next” to finish the activation process.

Secondly you need to configure MicroStrategy to import the VoiceObjects Analyzer package and connect to your Infostore repository. If after restarting your machine the “Configuration Wizard” of MicroStrategy has not started automatically, you need to go to the start menu and open it manually. The “Configuration Wizard” is used to:

  • generate or update the metadata tables of MicroStrategy (as the downloaded package is already updated to MicroStrategy 9, this option can be skipped);
  • configure the MicroStrategy Intelligence Server;
  • create the connection to the project sources, which will be VoiceObjects Analyzer for MicroStrategy in our case.

Configuration Wizard Overview

  1. Select the option “MicroStrategy Intelligence Server”. Click “Next” to continue.Configuration Wizard IntelligenceServer
  2. On this screen the DSN (Data Source name) must be selected that represents the connection to the MicroStrategy metadata tables. Click “New” to define a new DSN.
  3. On the upcoming screen click “Next” to continue.Configuration Wizard IV
  4. Next, the appropriate driver for the DSN must be selected. Select “Other Relational Databases”. Click “Next” to continue.
    Configuration Wizard V
  5. Select the appropriate Microsoft Access driver, e.g.  “Microsoft Access Driver” if you have the English version of Microsoft Access installed. Click “Next” to continue.Configuration Wizard VI
  6. Define a name and description for the new DSN and click  “Select”. In the upcoming file dialog browse for the downloaded VoiceObjects Analyzer for MicroStrategy file (VoiceObjectsAnalyzer_forMicroStrategy_90.mdb) and click  “OK”.
  7. Click “OK” again to finally create this DSN.
  8. Back in the DSN screen you will find this new DSN selected. Click “Next” to continue.Configuration Wizard IntelligenceServerII
  9. If not already provided as default values use Administrator as user name and leave the password field empty. Click “Next” to continue.ConfigurationWizard IntelligenceServerIII
  10. Define a name for the new Intelligence Server, e.g. MicroStrategy. Click “Next” to continue.ConfigurationWizard IntelligenceServerIV
  11. Select the checkboxes “VoiceObjects Analyzer v9 R1″ in order to load the package on start-up and “Start Intelligence Server when finished” to start the Intelligence Server automatically after the configuration process. Click “Next” to continue.
  12. If a warning message pops up complaining about a missing DSN, this can be ignored. The missing DSN will be defined later in the configuration process.Server Summary
  13. Check the summary. Click “Finish” to finally start the configuration of the MicroStrategy Intelligence Server.
  14. After a successful configuration click “Close” to return to the Overview page of the Configuration Wizard.ConfigurationWizard Project
  15. Back on the Overview page select the option “Project Sources”. Click “Next” to continue.ConfigurationWizard Project II
  16. Define a name for the project source, e.g. VoiceObjects Analyzer, and select the option “MicroStrategy Intelligence Server (3 Tier)”. Click “Next” to continue.ConfigurationWizard Project III
  17. Select the machine on which your MicroStrategy Intelligence Server is running and provide the corresponding port number, if you have changed the default port. Click “Next” to continue.ConfigurationWizard Project IV
  18. Keep the default selection “Use login id and password entered by the user (standard authentication)”. Click “Next” to continue.ConfigurationWizard Project V
  19. Check the summary. Click “Finish” to finally start the creation of the new Project Source.
  20. After a successful configuration click “Close” to return to the Overview page of the Configuration Wizard.ConfigurationWizard Overview II
  21. Click “Exit” to close the Configuration Wizard.

Configure DSN to Infostore repository

As mentioned during the configuration of the MicroStrategy Intelligence Server, a DSN to the existing Infostore repository is needed. The VoiceObjects Analyzer for MicroStrategy package requires a DSN named Infostore_WH. Follow the steps described below in order to create this DSN.
NOTE: Depending on your Windows operating system, the steps might slightly differ from the description!

  1. Open the “Data Sources (ODBC)” window (Start -> Control Panel -> Administrative Tools -> Data Sources (ODBC)).
  2. Select the tab “System DSN”.
    odbc
  3. Click “Add” to create a new DSN
    NOTE: If no DSN´s are listed here (althoug one has already been created in the Intelligence Server configuration), this might indicate that you are running MicroStrategy 9 (32 bit software) on a 64 bit operating system. In this case you need to open the “ODBC Data Source Administrator” manually by starting the application [Windows]/SysWOW64/odbcad32.exe.
  4. Select the driver that corresponds to your RDBMS containing the Infostore repository. Click “Finish” to continue.
  5. CAUTION: Take care to use the name Infostore_WH for the new DSN, as otherwise the VoiceObjects Analyzer project cannot be connected to the data in your Infostore repository.
  6. Follow the steps depending on the selected driver to properly define the connection to your Infostore repository.

Test of MicroStrategy Configuration

Once the DSN to the Infostore repository has been created successfully, you can test your setup by doing the following:

  1. Open the MicroStrategy Desktop (Start -> All Programs -> MicroStrategy -> Desktop -> Desktop).
  2. Provide the login details as defined in the Intelligence Server configuration (default is Administrator and empty password).
  3. Open the Project Source “VoiceObjects Analyzer” (or any other name you have defined in the Project Source creation process).
  4. Open the project “VoiceObjects Analyzer v9 R1″.
  5. Expand the folder “Data Explorer” -> “Application” -> “Site” and check if an entry “System” will be offered. If this is the case the connection to the Infostore repository is working.DesktopTest

Call Control with CCXML and VoiceObjects

Friday, July 17th, 2009

Can you do outbound dialing with VoiceObjects? Does VoiceObjects support call conferencing? How do I do call whispering using VoiceObjects? Questions of this kind reach us from time to time, and I have recently held a Developer Jam Session on the topic of Integrating Advanced Call Control in VoiceObjects Applications using CCXML to address some of these questions. For those of you who find this topic interesting but prefer reading over listening/watching, this is YOUR post.

It’s in fact interesting to see how W3C recommendations (or working drafts for that matter) slowly make their way into implementations within the industry. As is the case with CCXML; several vendors have recently announced support for this markup language, some have it in their portfolio for quite some time now. Vendors that support it include Avaya, Genesys, HP, Intervoice, Loquendo, and Nortel. Voxeo, with our VoiceXML & CCXML platform Prophecy, is at the forefront of CCXML development. Our CTO RJ Auburn acts as editor and chair of this markup standard that has been around since 2002.

So given that CCXML can be seen as an adopted standard, how does it all work? While I don’t intend to provide a full introduction (check out Voxeo’s CCXML developer guide with lots of tutorials and moderated forums instead, or read http://www.voxeo.com/library/ccxml.jsp to get an overview), here are some basic principles behind the language:

  • CCXML implements a state machine
  • CCXML is based on a flexible asynchronous event processing model, able to handle any kind of telephony and application events and perform actions upon them
  • CCXML extends VoiceXML with advanced call control functionality missing in VoiceXML (which essentially only offers blind or bridged transfers), while being independent of VoiceXML (can work together with any other voice markup)
  • CCXML integrates with VoiceXML by connecting callers with VoiceXML-powered applications as call legs if required

The following architecture picture shows how CCXML integrates with an XML-based telephony environment and how Voxeo products fit into the picture:

CCXML Architecture

CCXML Architecture (based on an image taken from http://www.w3.org/TR/ccxml/)

So basically Voxeo Prophecy acts both as the dialog interpreter (i.e. VoiceXML browser) and call control interpreter (i.e. CCXML browser), whereas Voxeo VoiceObjects takes the role of the dialog application server. CCXML documents are always in the lead in a telephony session and control how the call is being handled and whether/when it is or is not connected to VoiceXML dialogs. Thus, VoiceObjects dialogs are being initiated from within CCXML, via the VoiceXML browser. In fact, depending on the application, there could be several interactions between the CCXML interpreter and VoiceObjects Server within one call, as depicted in the following graph:

CCXML CallFlow Including VoiceObjects

The chain of interactions would look like this:

  1. A call comes into the telephony platform and launches a CCXML document associated with the called number (DNIS)
  2. The CCXML document handles all telephony events (connection.alerting, connection.connected, …) and might decide to launch a VoiceXML dialog
  3. If so, it instructs the VoiceXML browser to request a dialog from VoiceObjects Server
  4. VoiceObjects Server handles the dialog logic and sends VoiceXML pages while the voice browser requests them
  5. When the dialog logic comes to an end, VoiceObjects Server renders tags like <disconnect>, <transfer>, or <exit> to hand back control to the CCXML document which was on standby, listening for any new events coming in
  6. Steps 2-5 could be repeated, until the call session itself is finished (caller hangup, CCXML browser hangup)

Now that we know how it all works (in principle), what kind of applications can you build with this? Well, any that require advanced call control:

  • Outbound Calls: To initiate a call and start VoiceXML dialogs once a connection is established
  • Call Conferencing: To allow multiple participants to join a conference
  • Routing: To route calls to the next available agent
    • Find me/Follow me: To find a person at several possible end points (mobile/work/home)
  • Selective Call Answering: To decide whether or not to take a call based upon available caller information
  • Coaching: To allow a third party to connect to a call, but only have one of the participants hear what is said

Interested in learning more? Also how exactly the integration with VoiceObjects can look like? Well, in that case I would indeed point you again to the Developer Jam Session on that topic. Also, on our Developer Portal you will find a sample implementation of a personal assistant. You can download it and try it out using our free editions of Voxeo Prophecy and Voxeo VoiceObjects!

Oh, and if outbound IVR is of specific interest for you, please check out our website, which also has a link to a white paper on this topic: http://www.voxeo.com/outboundivr/

Please leave comments to this post if you have anything to share publicly on this topic. Thank you!

Decisions are looming in your future

Tuesday, July 14th, 2009

This one’s a first: Up until now, all “tips and tricks” articles referred to the current edition of Voxeo VoiceObjects Developer Edition. Today, however, we’ll grant you a look into the (foreseeable) future and whet your appetite with new functionality that will become available to you in the next couple of weeks. Use the Comments section below to let us know whether you’d like to see more such previews.

Voxeo VoiceObjects Developer Edition offers two connection modes: standalone and network.
In standalone mode, it is fully self-contained and works purely on the basis of its embedded database. This is great when you need to develop on-the-go, or just want to get started without the need to set up an elaborate infrastructure.
In network mode, you connect to a central Metadata Repository. This way you can collaborate within a team, share objects, and work on the same application simultaneously. Ideal when you work on larger projects.

If you’re like me, you’ll switch between these modes often – which, at the moment, can become a minor itch in the neck. Every time you need to open up the Preferences, go to the VoiceObjects section, switch the connection, click “OK”, then wait for the switch to be applied and the Repository Browser to refresh. And if you’re starting up with a network mode configuration in a “standalone environment” in which the central repository does not exist, you need to wait a moment for that to register, watch the Repository Browser go away, then go through the steps described above. Wouldn’t it be nice if there was an easier way?

Well, in the next VoiceObjects revision there will be! 9.0R1 will offer two enhancements with regard to the Metadata Repository connection:

  1. Switch connection from the VoiceObjects menu
    The VoiceObjects menu will have a new entry Switch connection mode that immediately lets you switch the repository connection without the need to go to the Preferences. Even better, this switch is “transient” in the sense that it does not change your preference settings.
  2. Select connection upon start-up
    For those who often move between different environments, there is also an additional switch in the Preferences called Ask for Metadata Repository connection on startup. When selected, Developer Edition asks on every start-up which mode it should work in. No more waiting for timeouts or clicking through error messages!

Not a big change, perhaps, but we think that it addresses a real need – and hopefully makes your user experience with Voxeo VoiceObjects Developer Edition more pleasant still. We’re looking forward to your feedback.

If you’d like to be among the first to know when 9.0 R1 is available on the Developer Portal, follow us on Twitter.

How to enable Infostore on your Developer Edition

Tuesday, June 30th, 2009

A couple of weeks ago we had started to take a look at the structure of Infostore,  the VoiceObjects data repository for real-time caller behavior analysis. (Incidentally – yes, the second installment of this series is in the pipeline.)

 Infostore is the basis for statistical data analysis using Business Intelligence (BI) tools such as MicroStrategy (for which a free edition is available), SAP BusinessObjects or IBM Cognos. As such a certain amount of data is required to obtain useful and statistically significant reports. However we realize that many of you would like to explore the capabilities of Infostore even in your development environments using Voxeo VoiceObjects Developer Edition, so in this article we’ll show you how to enable Infostore in this setup. And it’s just about as easy as 1-2-3:

  1. Set up a database
    Infostore, being a data repository, requires a relational database to live in. Since it is conceptually designed to hold many millions of records, it currently supports large-scale commercial database systems that can do this with high performance, including Oracle, Microsoft SQL Server, IBM DB2, and PostgreSQL.
    For evaluations all of these provide free versions that can be downloaded; one that is particularly easy to work with and that we’ll use in this article is Microsoft SQL Server Express. Installation and configuration of the database itself is very straightforward. Appendix B of the Installation Guide provides  instructions on how to set things up.
  2. Create the Infostore schema
    Once you have a database user and (empty) schema, it is time to create the tables and fill them with initial configuration data. Infostore supports partitioned and non-partitioned tables; in this article we will use the non-partitioned version since the data volume for evaluation will be limited.
    So the first thing to do is to run the script LDCreate.sql that can be found in <EclipseFolder>\plugins\com.voiceobjects.eclipseDesktop_9.0.0\driver\db\SQLServer of your Developer Edition installation. This creates all of the database tables that Infostore needs.
    After this has finished successfully, run LDConfigure.sql from the same folder. This inserts a whole bunch of static look-up data into the tables and prepares Infostore for its use.
  3. Configure Developer Edition
    With the preparations of the two preceding steps, we can now point Voxeo VoiceObjects Developer Edition to use this Infostore repository.
    Open the configuration file Eclipse_Configuration.xml that is located in <EclipseFolder>\plugins\com.voiceobjects.eclipseDesktop_9.0.0\config and locate the section System Log Repository Connection. Within this section, there is a single <connection> entry.
    Set its enabled attribute to true (the default entry is false). Then set the correct database type <rdbms>, connection URL <dburl>, user <user> and password <password>.  There are examples for the various supported database types; for SQL Server it will be something like:
                <rdbms>SQLServer</rdbms>
                <dburl>jdbc:jtds:sqlserver://localhost:1433/VODB</dburl>
                <user>voadmin</user>
                <password>voadmin</password>
  4. Start Developer Edition and make your calls
    After having changed and saved the configuration file, (re-)start your Developer Edition. If you have configured a Control Center entry for the embedded server, you should see a green light in the System DB Logging column.
    Deploy an application using the Test Application command and make a call either with a media platform such as Voxeo Prophecy or using the Debug Viewer. This will create the first fact record entries in your Infostore repository.
  5. Enjoy
    To explore the entries created in Infostore, refer to the sample SQL queries listed here. Or take a look at the Infostore Guide to learn more about advanced features.

As always, if you have any problems, questions, or suggestions do not hesitate to contact our Extreme Support.

And if you want to learn how you can fill your new Infostore repository faster than by manually making calls, join us for our next Developer Jam Session taking place on July 29 at 11am Eastern to learn about LoadTester. Registration is open now.

Peek under the hood

Friday, June 26th, 2009

Are you the kind of person who took apart gadgets when you were young, just to see what they looked like on the inside? Are you unafraid of getting your hands a little dirty to better understand how the cogs move the shafts? Then this article is for you!

Voxeo VoiceObjects Developer Edition provides you with an all-in-one framework for building, testing, deploying, and monitoring phone applications using multiple phone channels such as voice, texting, or mobile web. It does this in part by incorporating a full-fledged Voxeo VoiceObjects platform “under the hood”, configured and operated in such a way that you do not need to see or touch it for all standard tasks. Just like the motor in your car it just runs whenever you turn the key, and the only maintenance required is an oil change every now and then. Yet the hood isn’t welded shut, and if you really want to you can sneak a peek inside. As a first step what we’ll do today is to create a Control Center entry for the embedded server, so you can watch its status and activity.

The Control Center is the graphical component that lets you monitor and control VoiceObjects servers, either on their own or in clusters. A detailed description of the functions and capabilities can be found within the Deployment Guide.
To configure a Control Center connection in Voxeo VoiceObjects Developer Edition, open the Eclipse preferences and go to the VoiceObjects section.

 ccaddconnection

The bottom half of the pane lists all configured Control Center connections; initially (as shown in the screen shot) this list is empty. Click “Add…” to add a new connection. This brings up a new window in which to configure the connection.

ccaddconnection21

For a connection to the embedded server we use the default VoiceObjects account voadmin (which, if you haven’t changed it, has the default password manager). Again by default, the port used by the embedded server is 8070. The Testing URL parameter is used by the Debug Viewer, so it isn’t strictly required but convenient to have in place. Finally, an Alias is required to identify the Control Center connection since you can have any number of them.

Once you have defined your Control Center connection and stored the updated preferences, your Control Center view should look like this:

 ccview

If the Control Center view should not be open in your Eclipse perspective, you can open it from the Window menu.

ccviewopen

The first tab within the Control Center view, called Server Manager, gives an overview of the VoiceObjects Server and the corresponding server instances. For the embedded server in Voxeo VoiceObjects Developer Edition, there is only a single server instance on localhost.
The second tab, called Service Manager, lists all services deployed on the server.

ccservice

On the embedded server, there is only a single service called testService. Do not be unduly alarmed if it shows a yellow warning triangle as in the screen shot above – usually this simply means that you haven’t actually deployed an application yet, so the service doesn’t quite know what to do with itself. A situation that can easily be rectified by deploying an application using the Test Application entry in the Object Browser context menu:

pitestapp

This brings up the Test Monitor view – which actually is a simplified version of the Control Center you have just created!

pitestmonitor

When you switch back to the Control Center view and click the refresh button (the intertwining green arrows just above the drop-down selection box) your service entry should now be green and happy:

ccservice2

A right-click on the service opens up the context menu of available actions, including the ability to start a Debug Viewer session for the service. This does the exact same thing as clicking the Debug button in the Test Monitor view.

ccservicecontextmenu

The other context menu entries will no doubt be tempting to play with, but we’d strongly recommend to at least read the documentation before doing so to avoid unexpected results. 
Don’t say we didn’t warn you! :-)

After completing a call in the Debug Viewer and going back to the Control Center view (and possibly hitting the refresh button again) you’ll see your successful call listed in the Finished column.

ccservicefinishedcall

In this final screen shot, you may notice the black lamp in the System DB Logging column that will show the tool tip Overridden when you place your mouse over it. This is due to the fact that while the service would like to write its statistics to the Infostore database, no appropriate connection has been configured for the server. This is something we’ll jointly rectify next week. Until then you may want to brush up your Infostore knowledge so you’re all set and ready to go.

With your new Control Center entry and the server’s activity in full view, you may be interested in seeing the wheels spin at higher speeds. Our next Developer Jam Session, scheduled for July 29 at 11am Eastern, will feature Andreas Volmer talking about the LoadTester component of the Voxeo VoiceObjects platform which, unsurprisingly, is designed for load testing your applications. Registration is highly recommended!

The power of copy&paste

Monday, June 22nd, 2009

After we’ve seen last week how to keep the Voxeo VoiceObjects Developer Edition well-oiled, and how to make best use of the Outline view, it’s time this week to take a look at some hands-on tips. We know that tastes differ, and that the keyboard – and particularly the CTRL+C / CTRL+V keys – have a special place in many a developer’s heart. So today we’ll take a look at the shortcut notation that can be used to create object references without ever having to touch your mouse.

Our examples use the Output object, but the same functionality is available in other structurally similar places such as e.g. the Log object. The screenshots in this article use the Canyon theme to provide some diversity.

Voxeo VoiceObjects Developer Edition is based on the concept of drag&drop, and many users will want to assemble their objects e.g by typing static portions and then bringing in object references by dragging them from the Object Browser or from the Object Palette.

dragdrop1

This creates a textual reference to the object indicated by square brackets and boldface, e.g. [V:Song]. Double-clicking the reference opens the respective object editor, and the object’s short description is displayed in a tool tip when the mouse hovers over the reference.

shortcutnotation2

Dragging and dropping is swell, but sometimes you know exactly which objects you want to reference and would prefer not to interrupt the flow of typing. And the great thing is that in these cases, you can also just type in the textual reference!

shortcutnotation1 

To make this as easy as possible, object references are validated in real time as you type. So when you start with something like [V: and then type the name of the Variable object to be referenced (more on object types below) followed by a closing bracket ] the object reference is recognized and automatically highlighted in boldface.

shortcutnotation3

But what if you mistyped the object name? Well, that’s recognized, too, and indicated by red font and question marks:

shortcutnotation4

You can simply correct the typo (in this case replace the “i” by an “o”) and the reference will again automatically and immediately change into the boldface [V:Song]. Neat, right?
And despite all the extra functionality of being clickable and showing tool tips, the shortcut notation references still are “normal” text, so you can handle them like you would any other text. In particular, you can copy and paste them e.g. from one Output item to another, or from an Output object to a Log object.

Before saving an object you should make sure that all invalid references are corrected. Why?
A correctly established object reference is stored internally as such, i.e. in our example the Voxeo VoiceObjects platform knows that when processing the Output object, it needs to refer to the value of the Variable object “Song”. When saving the Output object with the invalid reference to the “Sing” variable, no such dependency can be established and therefore what you intended as a reference will (need to) be treated as pure text. So instead of “You are about to download Like a Virgin” you’ll hear “You are about to download Sing”.

As mentioned above, the different types of objects that can be referenced using shortcut notation are identified by the initial letter following the opening bracket (note that not all types are appropriate in all places, e.g. an Output object cannot be referenced within a Log object):

  • [A:Audio] references an Audio object
  • [C:Collection] references a Collection object
  • [E:Expression] references an Expression object
  • [L:Layer] references a Layer object
  • [M:Movie] references a Video object
  • [O:Output] references an Output object
  • [S:Silence] references a Silence object
  • [V:Variable] references a Variable object
  • [X:Script] references a Script object (which is eXecutable)

So the next time you need to insert an object reference into your Output item or Log entry, be aware of your options. Nothing wrong with dragging and dropping; nothing wrong with just typing along. All just a matter of taste.

By the way, to pre-empt a common feature request: We know that it would be *really* neat if you could start typing e.g. [V:So and be presented with a list of possible completions. It’s high on our own wish list, too; stay tuned and you may see this and other things show up in future versions.

Finally, if you’re reading this close the date of original posting, there’s still time to register for our next Developer Jam Session. It’s coming up this Wednesday, June 24, at 11am Eastern and deals with Integrating advanced call control in VoiceObjects applications using CCXML.
And if you’ reading this article at your leisure later on – fear not, because our archived jam sessions are available here for your convenience.

How to grease lightning

Thursday, June 18th, 2009

After our recent lengthy article on the benefits of the editor outline, today’s is a much shorter but no less important tip when working with Voxeo VoiceObjects Developer Edition.

As you may know, the Developer Edition provides a convenient all-in-one packaging of the entire Voxeo VoiceObjects platform. One of its invisible parts is an embedded database that is used to store all object definitions and deployed services. It is based on the acclaimed Apache Derby DB and usually provides you with excellent, reliable, and fast service whenever you turn the key. In grateful return, you should tend to its needs every now and then.

When you work on your applications, entries in the database are created, modified, and deleted. Over time, this can lead to a certain amount of disorder and dirt that accumulates in the DB tables - engine gunk, as they call it in the car commercials. It can lead to sluggish performance e.g. when opening projects or saving objects. Not to worry, though, since there is an easy solution that you can apply without ever having to open the hood.

From the VoiceObjects menu, select the entry Optimize Embedded Database.

optimizedb1

This starts a fully automatic clean-up and optimization process, which may take a couple of minutes depending on how big (and dirty) your database has become.

optimizedb21

This time is very well spent, however, since after it is finished you will likely notice a significant boost in responsiveness and performance. Cleaner engines do run faster.

Think of it as an occasional oil change for your IDE. No need to do it on a weekly basis, but every couple of months or whenever you have the feeling that Developer Edition has become noticeably slower than it used to be is a good time.