Posts Tagged ‘VoiceObjects 9’

VoiceObjects 9.1 Early Access

Friday, December 4th, 2009

We’re into the holiday season, and to spread the joy we are releasing an Early Access (EA) version of VoiceObjects 9.1 – a preview of the next version of the Voxeo VoiceObjects platform, which is currently scheduled to reach GA in Q1/2010. In this post we’ll give you an overview of some of the major new functionalities that will be available, and that you can start working with today. Simply download the Early Access install from the VoiceObjects Developer Portal.

For those of you currently using VoiceObjects 9.0, note that we also released Revision 3, which you can download from the same place.

Database Object
Experience in lots of customer projects has shown us that an overwhelming percentage of Connector object implementations end up connecting to a database. So we decided to go ahead and create a dedicated object for this task – the Database object. It transparently manages the connection infrastructure, including pooling, and allows you to focus on the SQL statements to extract, insert, or manipulate data.

DBObject

The Database object supports all standard databases (such as e.g. Oracle or  SQL Server) as well as any custom database you may want to use so long as it offers a JDBC driver.

Simple Connector Mode
A different requirement for the Connector object came from developers and new users who quickly want to build their first VoiceObjects applications. They often have existing scripts (JSP, PHP, Ruby, etc.) that they would like to re-use without the need to convert it to the XML data exchange format utilized by the Connector object. The focus here is on simplicity, ease of use, and quick results.

So we added a “simple mode” to the HTTP Connector that performs a straight POST of the parameters defined for it and expects a single return value. This value can still be an XML structure, from which individual items may be extracted using the XPATH-based result mapping.

Menu Object Enhancements
Dynamic personalization is one of the particular strengths of the Voxeo VoiceObjects platform: Adjusting each call to the preferences, usage patterns, and needs of the individual caller.

One aspect of this can be the dynamic re-ordering of items within a menu, so that e.g. the most frequently used entry (such as “Account balance” in a banking application) is at the top. VoiceObjects 9.1 provides a new option on the Menu object to easily change the ordering of Menu items using a comma-separated list of entries.
When utilizing such dynamic re-ordering, specifically in DTMF-based applications, it is often desirable to also employ auto-numbering, i.e. to automatically assign DTMF keys to menu entries. With VoiceObjects 9.1 we have provided easier access to these assigned digits for instance to read them out within the respective menu item prompts.

Finally, each menu item can now also fill a variable with a result value that indicates which item has been selected by the caller.

Cache Standby
In deployments with a large number of services, there is often the situation that a small number of these services receive the vast majority of call traffic, while many of the other services are merely using up memory most of the time. VoiceObjects 9.1 therefore now intelligently puts such services into a standby mode in which they do not consume any resources, but still remain available for calls.

Control Center Reports
The Infostore repository gives a lot of insight into the status of a deployed system, such as call traffic over time, traffic distribution within a cluster, or caller success rates (as measured by Business Tasks). With VoiceObjects 9.1 graphical reports for key metrics are available right from within the Desktop for Eclipse Control Center. There is also a fully embedded Infostore now in Desktop for Eclipse, so you can start using these reports without the need to set up a separate database.

ServerSessionsInstance

In addition to the new features described above, VoiceObjects 9.1 will also offer a number of other capabilities that are not yet included within the Early Access package:

Infostore Extensions
The Infostore repository provides a wealth of information on application performance and caller experience. And with each release we add more data to it to enable even more detailed reports. VoiceObjects 9.1 is no exception, and with it we provide among others

  • Aggregated Business Task information within the Call Data Record
  • Performance data on the new Database object
  • Detailed barge-in information for input states

Utterance Validation in Textual Channels
In voice or DTMF applications, grammars define what callers are allowed to say within a given input state. In text and web applications, there often is free-form text input which the application then needs to validate explicitly. With VoiceObjects 9.1 we make this easier by allowing developers to define a regular expression pattern that the caller input needs to conform to. VoiceObjects Server automatically checks this and triggers a No Match event when appropriate.

To learn more about VoiceObjects 9.1, please join us for our upcoming Developer Jam Session on December 9, 2009 at 8am Pacific / 11am Eastern / 5pm European.

Revisioning VoiceObjects 9.0

Monday, August 24th, 2009

Seems like yesterday that we released VoiceObjects 9. And still here we are with Revision 1  (R1) of VoiceObjects 9.0.

Yes, it fixes a couple of issues that we found or that you reported to us (thanks, and keep the feedback coming!) – but more than that it is chock-full of new features and functionalities to the point that merely calling it a revision is really hiding its light under a bushel. So this blog post gives you a high-level overview of what you can expect to find when you step up to R1.
It’s available immediately over here and on the VoiceObjects Service Portal.

Desktop for Eclipse
One of the new features coming in Desktop for Eclipse (including Developer Edition) you may already have seen in a previous blog post: The ability to switch between standalone and network mode at startup and from the VoiceObjects menu. Very convenient if you frequently change your working environment.

SwitchConnectionMode

Another convenience function introduced with R1 is the ability to backup all of your projects at once. Simply select the new entry in the VoiceObjects menu and define a location for the backup. You can even choose between separate export files, a single combined ZIP archive, or all of the above.

BackupAllProjects

Finally, the Search view has received a complete makeover. It now presents search results in individual tabs, giving you the ability to keep multiple search results open at the same time. It also shows you a lot more detail on the search conditions, both within the tab header itself and in the corresponding tool tip. Providing these additional capabilities was very high on the list of developer requests, and we’re happy to respond to this feedback.

TabbedSearch

Do let us know how the newly expanded search works for you!

Texting
In the unlikely case that you may have missed it: IMified has joined the Voxeo family, giving you access to all major Instant Messaging networks. Blending neatly with the existing VoiceObjects multi-channel approach, you can now augment your applications to also work as IM “bots” by simply running them with the new IMified driver. Part and parcel of our Unified Self-Service vision:

voxeo-unifiedselfservice

To be honest, it’s less of a vision by now – it’s reality you can put to use today!

A functionality used by many of our customers is what we call Service Chaining: Shepherding the caller through a number of consecutive applications that give the external appearance of being a single one. Often this is e.g. a shared initial application that accesses the backend for CRM data, followed by the  respective application dialled into by the caller (as identified e.g. by DNIS).
The way this was done so far could produce ugly intermediate pages in the text-based channels that required explicit caller interaction to move to the next page. Therefore R1 now uses standard HTTP redirects to trigger invisible and seamless service chaining in these channels.

CCXML
For certain types of applications, such as e.g. conferencing, VoiceXML in and of itself is insufficient due to its lack of fine-grained telephony capabilities. In these cases, Call Control XML (CCXML) is the language of choice – usually in combination with VoiceXML since CCXML in its turn is not particularly dialog-oriented. To make this combination as smooth as possible, R1 offers a new transfer type within the Transfer object, fittingly called CCXML. It gives you the ability to easily jump from a VoiceXML dialog into the enveloping CCXML application – and return to the dialog at some later time. For details, refer to June’s Jam Session.

Infostore
A lot of things have happened in R1 around Infostore, the repository for real-time caller behavior analysis.
First of all, it has completed its architectural transition to using a persistent on-disk message queue based on the popular Apache ActiveMQ. This means that regardless of database or network slowdowns or even outages, no Infostore data will ever be lost. Important peace of mind for customers who rely on the insight that Infostore delivers.

VoiceObjects Server provides sophisticated sampling options to ensure that statistically relevant data on caller behavior is collected while keeping the sheer data volume at a manageable level even for installations with very high call volume. This implies that even though Infostore is enabled, not every single call will actually write data to it.
In some situations it is of interest to know within the application itself whether a call has been selected to be written to Infostore or not – e.g. when your application logs custom data that only makes sense in combination with the corresponding Infostore entries. The new Expression object function ISLOGGINGACTIVE() does just that for all the relevant settings including utterance recording.

There’s also another enhancement for customers handling sensitive caller data such as credit card numbers: In addition to the long-existing masking option of using one-way encryption to obtain a protected yet unique representation for each caller input, it is now also possible to apply a generic, static mask that replaces every sensitive utterance with the same configurable string.

LoadTester
Those of you who participated in July’s Jam Session already know about the new LoadTester tool that allows you to easily stress test your application and deployment infrastructure. Starting with R1 it is bundled with the installer.

Grammar Management
With VoiceObjects 9.0R1 we are also proud to release the integration with Nu Echo’s NuGram IDE. Making full use of the Eclipse workbench approach, you can now develop, maintain, and manage your speech recognition (and DTMF) grammars in what is recognized by many as the market’s best grammar development tool. Bundled right into VoiceObjects Developer Edition,  a single download now gives you more power than ever before.
To learn more about VoiceObjects and NuGram, join us for our next Developer Jam Session on September 16.

And if you want to learn more about the Voxeo VoiceObjects platform in general, why not join one of our free training classes at Voxeo University? Seats are limited, so sign up today for the next courses in September and October by contacting us at university@voxeo.com!

Finally, if you’re in New York City during this week of August 24, please make sure to visit us at SpeechTEK in the Marriott Marquis!
You can find us in booth 800. We’re looking forward to talking to you.

http://developers.voiceobjects.com/2009/07/14/decisions-are-looming-in-your-future/

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.

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

pimodules

 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

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

 

dominantpath1

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!

What’s new in VoiceObjects 9

Monday, June 15th, 2009

Last Friday we gave you a heads-up that VoiceObjects 9 is available for download. Today we want to look at the release in some more detail and give you an overview of major new functionality that comes with it. For a full list of all enhancements and fixes, check the Release Notes that are part of the documentation in the download package. They are also contained within the Installation Guide.

Event Handling
If you build voice or DTMF applications, you’re familiar with the concept of “event handling” – how to deal with situations in which callers either don’t say anything at all (“No Input”), or something that the application does not expect at this point (“No Match”). Most of the time you want to handle these events by either just giving the caller another chance (e.g. “Sorry, I didn’t get that”) or by providing them with further assistance (e.g. “You may also enter your account number using the keys on your phone.”). Sometimes, however, when there are just too many of these events in a call, you may decide to give up and transfer the caller to a human agent to ensure they get the service they deserve.

VoiceObjects 9 introduces a new event type that makes this easier, called Invalid Answer Limit. It combines No Input and No Match events into a single counter for “invalid answers” and allows you to set a limit on them. So you can say e.g. that after four such events, no matter in which combination or order, the call is to be transferred to a human agent.

invalidanswer

Of course, this new event type is fully integrated into the object-oriented approach delivered by the Voxeo VoiceObjects platform. In fact, the primary use case is likely to be that the root Module of your application defines a handler for Invalid Answer Limit that is then automatically applied in all input states of your application.

Text-To-Audio
In all but the simplest applications there is the need to present dynamic data to the caller – be it a package delivery date, an account balance, or a flight departure gate. For optimal quality and blending with the rest of the prompts, this is most typically done by using pre-recorded audio snippets that are assembled on-the-fly. Within the Voxeo VoiceObjects platform, this is referred to as Text-To-Audio (TTA).

VoiceObjects 9 further strengthens the existing rich TTA support by introducing the ability to reference existing dialog objects from within the sequence of audio snippets. Apart from being a logical extension of the previous capabilities, this is also a good example of enhancements driven by user feedback.

Resource Validation
Sophisticated applications frequently use thousands of audio files, often in multiple languages such as English, Spanish and/or French. The Storyboard Manager is a great tool for keeping track of all these files – and it got even better in VoiceObjects 9 by offering automatic resource validation. At the click of a button, it traverses all the various resource folders and makes sure that the required files are available.

resourcevalidation

You see at a glance whether files are missing, and if so which ones. A major time saver, and a potential life saver in making sure that your callers hear their prompts instead of static.

Logging
By default, the Voxeo VoiceObjects platform logs to rotating files with a variety of configuration options. Some of our large customers expressed the desire to integrate the logs directly with their monitoring framework the way that VoiceObjects already does with SNMP alarming and email notifications. So with VoiceObjects 9 we provide the ability to write to a syslog stream, either instead of writing to log files or in addition to it. One more way to ensure that there is a seamless path from the free Developer Edition on your laptop to a failsafe multi-thousand port deployment in your corporate network.

Support Chat
We take pride in our 24×7 Extreme Support that is there for you whenever you need assistance – because we are successful when you are successful. So to make it easier than ever for you to get in touch with us, we added a new Support Chat entry to VoiceObjects Developer Edition. Within seconds, you can start a chat with a member of our support team and get the information you need.

supportchat

Never hesitate to make use of it – we genuinely love to hear from you and appreciate your feedback to make our products better.

Instant Messaging
As you will have heard, IMified has joined the Voxeo family recently. That’s great news since it expands your options in building outstanding phone applications even further – and with the built-in support for Instant Messaging and texting available in VoiceObjects since version 7.4, you can have multi-channel applications running in no time. We’ll have a separate blog posting on this soon, and we’re busy working on a deeper integration. This is going to be an exciting summer!

Finally, we’d like to remind you of and invite you to our Developer Jam Session for this month (on June 24, 11am Eastern), in which Tobias Göbel is going to present hands-on information on how to build powerful CCXML applications using the Voxeo VoiceObjects tools and Voxeo Prophecy. Hope to see you there!