Archive for July, 2009

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: (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 Evolution Portal

Thursday, July 30th, 2009

Since the end of 2008, VoiceObjects is part of the Voxeo family and since this time we worked on extensive enhancements for our technical support for customers, partners and developers.

While it was planned to open up the support system for our customers and partners for some time – and the old support ticketing system used at VoiceObjects already had all ingredients to show up as a support portal and knowledge base – the acquisition made this step even more urgent.
With the necessity of integrating VoiceObjects´ Technical Support into Voxeo´s Extreme Support organization, we were facing the need of having one ticketing system for all technical support inquiries.
The solution is Voxeo´s Evolution Portal.

Now we are happy to introduce VoiceObjects Evolution – a support sortal for customers, partners and developers using VoiceObjects´ technology, based on Voxeo’s Evolution.
This portal enables you to get support for your VoiceObjects related inquiries directly. It also allows the Voxeo Extreme Support team to use one system for all incoming support requests. This makes it easier for us to help you in the most effective way.

You may be wondering: “What is it all about?”
Well, this portal is a web based ticketing system. This means that the easiest way to get support is to log into Evolution and either open a support chat for quick questions or open a support ticket.

Or visit one of the available forums and check if your question has already been answered. If not – why not open a new forum thread?

Additional features are

  • You are able to see all tickets opened for your account / company – even tickets opened by your co-workers

  • Get access to the VoiceObjects documentation

  • Explore other helpful resources

  • View global tickets (announcements)

As a VoiceObjects Customer or Partner you are able to get a personal introduction to the portal. You or your manager should already have received a mail regarding the transition to the new support portal If not, you will receive it within the next weeks.

If you are a VoiceObjects Developer I would like to ask you to register for your individual Evolution account at This will give you the opportunity to receive support for your VoiceObjects products. Additionally it will give you the full Voxeo Evolution feature set – including the free hosted Voxeo Prophecy IVR.
You already have an account at Voxeo? Great – Just use it to get support for all of your Voxeo products!

And – we are not done yet.
We are working on integrating parts of our internal knowledge base into this portal within the next months.

Additional features for this portal are coming soon.
Stay tuned …

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:
  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.


  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”.
  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 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

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:

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.

Inside Infostore – Part II: Modules and Paths

Wednesday, July 8th, 2009

Back in April, in the first installment of our Inside Infostore series, we looked at the general structure of the Infostore repository for real-time caller behavior analysis and answered a number of interesting questions on the basis of the Call Detail Record table VOLDDLGSTS alone. This time, we’ll take a look at Module information available within Infostore. It provides valuable insight into how callers use your application – which parts they visit, which parts they skip, and exactly how they get to where they end up.

Module objects in the Voxeo VoiceObjects framework provide a “wrapper” for applications or sub-applications within a bigger one such as a self-service portal. The Prime Insurance sample provides a good model, as shown in its main menu:


 A separate Module object encapsulates each of the five branches, as well as the overall application. Each Module defines inheritable event handling, navigation using hyperlinks, and additional application settings.
More information on the Module object can be found within the Object Reference. Best practices in structuring your application using Modules are discussed in the Design Guide. Both are highly recommended additional reading.

Module Tables
Module information is stored within Infostore in five different tables: VOLDMODULE, VOLDMODSEQ, VOLDMODSET, VOLDRELMSQ, and VOLDSUBSEQ. Other tables, such as VOLDDLGSTS, refer to them through surrogate IDs.

VOLDMODULE contains general lookup information on each Module object such as its name, modification timestamps, and key settings.
Data in this table is updated with each deployment or redeployment. In addition to the “real” Module objects, the table also contains an entry for “[End of Dialog]“, which is used to indicate the end of the dialog (as you may have guessed).

VOLDMODSEQ contains an entry for each sequence of Module objects that has been traversed within a call. So e.g. when somebody calls the Prime Insurance application shown above, selects the car insurance branch from the main menu, and then afterwards also inquires about life insurance, there would be an entry “Prime Insurance Portal,Car Insurance,Life Insurance”.
Data is entered into this table as necessary whenever a new sequence is observed in a call.

VOLDMODSET is similar in that it contains one entry for each set of Module objects that has been visited within a call. Multiple sequences may lead to the same set, and each sequence entry in VOLDMODSEQ contains a pointer to the respective set entry in VOLDMODSET. The set entry is sorted alphabetically, so for the same call example as above the set entry would be “Car Insurance,LifeInsurance,Prime Insurance Portal”.
Data is entered into this table as necessary whenever a new set is observed in a call. Since the sequence entry references the corresponding set entry, the set entry is made first.

VOLDRELMSQ maps individual Module objects to module sequences and the positions at which they occur within these sequences. In the example there would be three separate entries mapping Module “Prime Insurance Portal” to the first position in the sequence, “Car Insurance” to the second position, and “Life Insurance” to the third.
Data is entered into this table as necessary whenever a new sequence is observed in a call.

Finally, VOLDSUBSEQ contains a break-down of Module sequences into their constituent sub-sequences. This information is needed for reports such as the dominant path analysis referred to below. In our example this will result in the following six sub-sequences including the end marker  ”[End of Dialog]” mentioned above:

  • Prime Insurance Portal,Car Insurance,Life Insurance,[End of Dialog]
  • Prime Insurance Portal,Car Insurance,Life Insurance
  • Prime Insurance Portal,Car Insurance
  • Car Insurance,Life Insurance,[End of Dialog]
  • Car Insurance,Life Insurance
  • Life Insurance,[End of Dialog]

Data is entered into this table as necessary whenever a new sequence is observed in a call.

Taken together, these five tables can be utilized to gain insight into how callers navigate through your applications. The next two sections explore a number of sample questions. 

Basic Orientation
As in part I, the SQL statements shown below have been tested using Microsoft SQL Server. They are meant to be indicative of specific types of information and are formulated for readability rather than performance. Entries in all tables mentioned here belong to specific services identified by a unique ID, the VSC_SID. In all of the samples we assume this SID to be known and fixed. It can be retrieved like this:

select vsc_sid from voldvscobj where vsc_refid=’<VSN of service>’ and is_current=1

Finally, the SQL statements used here operate on the “raw” Infostore tables. For Analyzer, there is an additional view layer that adjusts localization and performs a few mappings that usually aren’t relevant here.

With these preliminaries out of the way, here are a few high-level questions that can be answered easily on the basis of the Module set and sequence entries as well as the references in the VOLDDLGSTS table we looked at before:

  • How many different sets / sequences do callers visit?
    Obviously this is about the simplest question you can ask regarding sets and sequences, but it does already give you a high-level idea of how callers utilize an application.
    select count(*) from voldmodset where vsc_sid=SID
    select count(*) from voldmodseq where vsc_sid=SID
  • What is the ratio between sets and sequences?
    This ratio is a rough measure of variability between different calls (and callers). When it is close to 1, callers visit the same places in roughly the same way. When it is significantly bigger than 1, different calls visit the same places in significantly different ways. Keep in mind, however, that this value depends on application design at least as much as it depends on caller choices.
    select (select count(*) from voldmodseq where vsc_sid=SID) / (select count(*) from voldmodset where vsc_sid=SID)
  • Which percentage of calls visits a certain sub-application?
    Different choices within a self-service portal will attract callers to differing extents. In our example we want to know the percentage of calls that visit the “Life Insurance” branch of the Prime Insurance Portal.
    select 100.0*count(*)/(select count(*) from volddlgsts where vsc_sid=SID) from volddlgsts where mod_set_sid in (select mod_set_sid from voldmodset where mod_set_name like ‘%Life Insurance%’) and vsc_sid=SID
  • How often does each Module object occur in sequences?
    Module sequences will contain individual Module objects in different numbers, which is indicative of their respective importance in call flows.
    select count(*) as cnt, m.mod_name from voldrelmsq r inner join voldmodule m on (r.mod_sid = m.mod_sid and m.mod_sid>0 and r.vsc_sid=SID) group by m.mod_name order by cnt desc
  • What is the most / least visited sub-application within my application portal?
    If your application is e.g. a banking self-service portal offering sub-applications such as balance checking, making transfers, and brokerage transactions, then you will want to know if 90% of your callers really only want to check their account balance at the end of the month. Note that while this question is similar to the preceding one, here we’re dealing with numbers of actual calls as opposed to just occurrences of Module objects in sequences.
    select m.mod_name, count(dlg_id) as callCount from voldmodule m inner join ((select distinct mod_seq_sid, mod_sid from voldrelmsq) as r inner join volddlgsts as s on r.mod_seq_sid = s.mod_seq_sid and vsc_sid=SID) on r.mod_sid = m.mod_sid and m.vsc_sid=SID group by m.mod_name order by callCount desc
  • What is the average time spent in each Module visited?
    This simple query does, of course, only give you a very rough global estimate – but it can give a hint on whether the “size” of your Modules is reasonable. If the average time spent in a Module is in the order of minutes, you may want to add more structure to your application by adding Module objects in strategic places to obtain a better resolution.
    select avg(dlg_call_dur_ms/(1000.0*no_modules)) from volddlgsts where no_modules>0 and vsc_sid=SID
  • Which Module scopes do callers typically hang up in?
    Knowing where in the application callers hang up can validate (or invalidate) assumptions about caller behavior.
    select count(d.dlg_id) as cnt, m.mod_name as modname from volddlgsts d, voldmodule m where m.mod_sid=d.last_module_sid and d.dlg_exit_type_id=16 and d.last_module_sid>-1 and d.vsc_sid=SID group by m.mod_name order by cnt desc

VoiceObjects Analyzer contains a Dominant Path Analysis report that shows in significant detail how callers navigate through your application, and which choices they predominantly make whenever there is a fork in the road. 



While this report is too complex to replicate fully in manual SQL, we can answer a number of related questions here:

  • Which paths have callers taken to get from one Module to another?
    Different paths can lead to the same destination, and to optimize the flow of an application it is very relevant to look at the various paths callers take to get from one place to another. In our example we want to find all the different paths that lead from the Module object with Reference ID “LifeInsurance” to the one with Reference ID “CarInsurance”.
    select distinct mod_seq_refid as paths from voldsubseq where mod_start_sid=(select mod_sid from voldmodule where mod_refid=’LifeInsurance’ and vsc_sid=SID) and mod_end_sid=(select mod_sid from voldmodule where mod_refid=’CarInsurance’ and vsc_sid=SID) and vsc_sid=SID
  •  Which Modules are often visited together?
    As a mirror to the first question, it is also of interest to see which Modules are often visited alongside a given Module. In terms of online shopping, this is a bit like saying “customers who bought this item also liked these other products”.
    select m1.mod_name as name1, m2.mod_name as name2 from voldmodule m1, voldmodule m2 where m1.mod_sid<m2.mod_sid and m1.mod_sid>0 and m2.mod_sid>0 and m1.vsc_sid=SID and m2.vsc_sid=SID and exists (select * from (select * from voldrelmsq where mod_sid=m1.mod_sid and vsc_sid=SID) as rel1 inner join (select * from voldrelmsq where mod_sid=m2.mod_sid and vsc_sid=SID) as rel2 on rel1.mod_seq_sid = rel2.mod_seq_sid)

  • Which Modules occur as immediate predecessors of a given Module object in sequences?
    Expectations about how to use a certain sub-application are driven by the other places the caller has previously been to during the call. Therefore it is relevant to look at the predecessor Module object. In our example, we want to find out which places callers come from just before they enter the “Car Insurance” sub-application within Prime Insurance.
    select distinct mod_start_name as predecessor from voldsubseq where mod_end_sid=(select mod_sid from voldmodule where mod_name=’Car Insurance’ and vsc_sid=SID) and mod_subseq_count=0 and vsc_sid=SID

And with this, we’ve reached the end of our path for today.
In the next installment we’ll dig one level deeper and look at the detailed information that is written for each caller interaction in the input state table VOLDDSSEQ. In the meantime, we’d love to get your feedback. Just leave a comment below!