Applications are built in the Voxeo VoiceObjects platform using an object-oriented approach that is based on a set of core object building blocks. Some of these objects relate to standard programming primitives (such as loops or variables); some relate to interactions with the caller (such as inputs or menus). Yet some also relate directly to business-oriented aspects of the application, such as the Layer or the topic of this blog article: the Business Task.
The goal here is to introduce you to the concept, briefly explain how to use it in your applications, and to sketch some of the substantial benefits you can reap for very little effort.
When customers call a self-service application, they usually don’t do so for the fun of it. They have a question they want answered, or a transaction they want to perform. As such, from the customer’s point of view the call cannot be considered successful simply if speech recognition worked and the application did not crash somewhere in the middle. Callers must have received their answer, or completed their transaction in order to really be contented with the application’s performance.
So application developers and business analysts face the challenge of tracking this “semantic” information in addition to the more technical data on recognition quality, application errors, etc. This is where Business Tasks come in. They model specific caller actions of different types:
E.g. logging in using an account number and PIN, or possibly authentication using biometric means.
E.g. asking for an account balance or an insurance quote.
E.g. sending out an SMS or email to the caller.
E.g. transferring the caller to a human agent.
E.g. making a money transfer or buying a product.
Open-ended category to capture sundry other tasks.
At the highest level, Business Tasks distinguish between “complete” and “incomplete” termination. Tolstoy wrote that “Happy families are all alike; every unhappy family is unhappy in its own way.” In much the same sense there is effectively one way of completing a Business Task successfully, but many different ways for it to fail. Callers may change their mind and navigate elsewhere, or just hang up. Recognition may fail and prevent callers from making progress. A backend system may be down – and so forth.
Specifically, VoiceObjects distinguishes between seven different types of issues:
- Backend Error
The task finished unsuccessfully because a backend system failed or was not available.
- Business Logic
The task finished unsuccessfully because a certain business logic requirement was not met (e.g. an intended transaction exceeded a maximum set for the account).
- Caller Abort
The task finished unsuccessfully because the caller explicitly aborted it e.g. through a command or through negative confirmation.
- Recognition Failure
The task finished unsuccessfully because of recognition problems such as No Inputs and No Matches.
- Task Restart
The task finished unsuccessfully because the same task was started again.
- Session Termination
The task finished unsuccessfully because the session ended, i.e. the caller hung up or was transferred somewhere else.
- Technical Error
The task finished unsuccessfully because of a technical problem within the application.
Along with a task’s status it is often desirable to also log certain bits of data. In the case of a car insurance quote e.g. it might be relevant to know the make and model the caller inquired about. For money transfers, the amount might be relevant. And there are, in fact, cases in which different types of data are of interest depending on whether the task was completed successfully or not.
That’s why each Business Task carries two (optional) parameter sets defining the data to be logged in case it completes successfully or unsuccessfully. There is also a convenience option to use the same data in both cases.
How To Implement
When implementing a VoiceObjects application, you can think of a Business Task as an interval: From where a specific task is started, to where it is completed successfully. You only need to define these end points; VoiceObjects Server pretty much takes care of the rest for you.
The way to start a Business Task is by use of the Expression function STARTTASK(). The Expression object should be positioned at the appropriate place (or places) in the dialog flow at which the caller starts with the activity modeled by the Business Task. The start of a task is indicated in the dialog flow by a green “start” icon.
A Business Task can be finished “manually” at any point using the Expression function FINISHTASK(). Typically this is used to finish it successfully, i.e. as “completed”. Finishing a task is indicated in the dialog flow by a red “stop” icon.
One of the great advantages in using Business Tasks is that you do not need to explicitly track all possible outcomes. Rather, VoiceObjects Server takes care of this automatically and thus not only reduces your workload, but also eliminates the potential for errors or omissions – thereby improving the quality and consistency of the statistics data that is collected.
At the same time, you have the ability to influence precisely how VoiceObjects Server handles the automatic task completions. Specifically, this concerns the behavior in event handlers (i.e. when something goes wrong), in navigation (i.e. when the caller decides to move elsewhere), and in jumps within the application.
In all of these cases, you can select whether to finish the currently active task, all tasks (see below) – or to do nothing. If a task is finished, then its completion status is automatically inferred from the context. As an example, if you define an event handler for “No Match” and let it finish the active task, then that task is automatically finished with the status “Recognition Failure”. Likewise, a handler for “Error – Connector” automatically assigns a status of “Backend Error”.
Combined with the native VoiceObjects principle of inheritance, this means that you can define this behavior once within your root Module and have immediate, automatic, and consistent handling throughout your entire application.
How It Works
Once you have defined start and end points of task intervals, and made the selections for automatic completion, VoiceObjects Server takes it from there.
During a dialog session, it maintains a stack of Business Tasks. Only one of them is active at any given time, but others may be further down the stack, in an inactive state, ready to pop up again once the current one finishes.
All of this process is fully automatic and requires no interaction from your side. It gives you the powerful ability, though, to determine that e.g. in the example pictured above, the caller chose to buy a stock but then, before completing that transaction, first obtained some additional information on the stock in question. Only after having checked this information successfully did he return and finalize the purchase.
In other words: Business Tasks give you a panoramic window on caller behavior.
Infostore and Analyzer
Business Task information is available within the application (through the Expression functions TASKSTATUS, TASKREFID, and LASTTASK), but the primary interest tends to be in what gets written to Infostore. Two separate tables (VOLDTASKSTATS and VOLDTASKDATA) capture this information in detail, including e.g.
- completion status and performance of the task itself
e.g. duration, number of input states, etc.
- application performance while the task was active
e.g. No Input/No Match events, errors that occurred, etc.
- external interactions while the task was active
e.g. calls to backend systems, database dips, etc.
VoiceObjects Analyzer offers a variety of insightful reports based on this data.
Since a Business Task effectively delineates an interval during which a caller attempted to achieve a certain goal, it lends itself to correlation with many other facts such as:
An example is shown in the picture above – how well are your different customer segments achieving their goals? In the example, the preferred Platinum category seems to have a problem that requires looking into.
- Recognition quality
When callers fail to achieve their goals, it is of course crucial to analyze why this happens. Insufficient recognition quality can be a factor, caused e.g. by a lack of tuning in grammars or the speech recognition engine, or by application factors such as misleading prompts.
- Backend performance
Another key factor deciding caller success is the performance of backend systems – in terms of both availability and responsiveness. Few callers wait a minute for a transaction to complete, so you will see many tasks aborted with “Session Termination”.
I’ll provide more details on the rich data that VoiceObjects Server collects in regard to backend access in an upcoming blog article.
So if your application does not use Business Tasks yet, identify the key goals that callers want to achieve within it and cover them as described in the How To Implement section. The resulting Infostore data will help you understand much better what does and does not work for callers, and why – and thereby help you in making the application better!
You can find more information on Business Tasks and how to use them in the Design Guide as well as in the Object Reference. Both of them are freely available on the Developer Portal, along with our software downloads. There is also a Best Practices document with hands-on examples.
As always, for questions and comments, reach out to me on Twitter at @voxeostefan.