VoxGen has been designing, building and improving Interactive Voice Response solutions - or IVRs - for some time now. Since we’ve been in the business, we’ve seen technology grow to meet the more demanding expectations placed both upon the companies who rely on automated systems to do business, and the consumers who actually experience the IVRs.
To help us keep pace with this ever-changing world we organically began to create our own internal tools to help us leverage emerging technologies while still allowing us to seamlessly continue delivering best-in-class, enterprise-scale IVR applications. Today, our developers - and testers, designers, and, most importantly, our customers - have come to rely on the VoxGen delivery framework. In this article, we’ll explore the key advantages our framework offers over conventional IVR tools.
The VoxGen framework comprises several distinct features that address various aspects of delivering IVR solutions, including:
SpeechWizard, an IVR Application Framework for robust, scalable, state-based dialogue management;
An Integrated Development Environment (IDE) Tooling & Code Generation (called the Wavoo Design Tool) to support the authoring and testing of dialogue systems;
An Admin & Monitoring Service to manage deployed IVR systems at runtime;
Services that support the IVR by providing enterprise functionality such as KeyStore & Encryption Utilities;
A platform for Outbound services;
A Batch Application Framework for implementing ETL-based integration with external systems; and
A Call Logging Service for logging & reporting.
Today, we’ll focus on the first– SpeechWizard.
What is SpeechWizard?
SpeechWizard is an application framework, based on Java and Spring, for building IVR applications for VoiceXML platforms. SpeechWizard uses Java servlets and JSON objects at runtime to efficiently manage the execution of the IVR call flow and session data.
…And why do we think this is better than conventional IVR tools?
There are many answers to this question:
1. Separating Design from implementation
Vendors often sell graphical tools by pretending that “no developer skills are needed”. We think that this is rubbish. In order to develop beautiful, robust, scalable applications that guide callers through complex interactions, sound great, interact with diverse back-ends and perform well you need to program the solution. With conventional tools, what you’re able to create is limited to the imagination of the vendor who created it; you will quickly hit those limitations and become stuck.
SpeechWizard has developed organically to support the functionality our designers produce and the complexity of back-end service integrations. We provide the flexibility to extend the system in any way through normal Java code.
2. Java developer friendly
According to Oracle there are over 9 million Java developers worldwide; that’s quite a talent pool. Because we use a Java based framework, developing an IVR with SpeechWizard is much like developing any other enterprise system. Consequently, developers from other channels find it easy to transition to developing IVR applications using this familiar framework. There is no need to learn a complex tool; our programming interface is intuitive and easy to learn.
3. Better integration with business logic
Graphical tools offer various pre-packaged back-end interface facilities (Database requests, SOAP request, XML HTTP request, etc.). But, once again, they are often limited and don’t provide adequate flexibility to meet the realities of your development environment.
SpeechWizard’s integration follows standard enterprise patterns that can be easily abstracted and stubbed as necessary for the various stages of development. This approach to business integration reduces dependencies on services that may still be under development, allowing work to continue in parallel.
4. Supports revision control system, parallel development
Since we write standard Java enterprise applications, we are able to use standard source control systems to manage the code, including resources like grammars, prompts and audio files, affording traceability for every change. This also means that our developers can work in parallel - even on the same code segment - and easily view, resolve and merge code conflicts should they occur. Something that is not feasible in the diagram world.
5. Code reviews
As well as automatically reviewing code using tools like FindBugs, CheckStyle or PMD, all code can be reviewed by our peers to ensure regulatory compliance and, more importantly, for mentoring and continuous improvement. This way, junior team members can quickly pick up the best practises that our senior developers have honed over years of Java development (sometimes they show us new tricks too).
6. Vendor lock-in avoidance / portability
SpeechWizard generates VoiceXML-2.1 compliant code, allowing us to run on any compatible platform, but it also allows us to easily exploit any platform-specific extension if they need to be used. By using SpeechWizard developers are not locked in; instead, they are freed, able to take advantage of standard enterprise Java tools and techniques.
7. Support for automated test suites
Another benefit of using source control is Continuous Integration and Deployment. Here we use automatic build and test tools to monitor the repository for code, resource or configuration changes. When change is detected a pipeline process is initiated that compiles, builds and runs the unit tests for entire system.
If errors are detected then the whole team is alerted and work together to fix the problem, either by rolling back the change or by applying an update. If no errors are detected then the pipeline continues with packaging and deploying the application for further integration, acceptance and performance tests.
Acceptance tests are produced to capture business requirements and are written in a style that make them readable by the business and QA teams. In fact, we like to work with our customers in developing these acceptance tests as a way to flush out and fully understand specific requirements. The development team then uses these acceptance tests to write code to assert that the business rules are being met.
8. Better debugging facilities
Since the application is just a standard Java one, we can debug the application as a whole during development. Simply placing breakpoints in the Java code allows us to trace problems at different levels: interaction details, call flow logic, back-end logic. This allows us to track complex behaviour and locate the cause of bugs more easily.
Following Test Driven Development approaches also means that we develop a unit test for each bug. The purpose of this is to firstly recreate the issue in a unit test, then fix the bug and ensure that the unit test is passed. The unit test then stands as a permanent reminder of this problem and ensures that it does not re-occur or be re-introduced via subsequent code changes.
9. Libraries and Modularisation
SpeechWizard has grown from a fairly simple abstraction of VoiceXML to a sophisticated arsenal of tools – including a suite of libraries and modules of repeatable and reusable functionality, from basic concatenation strategies through to complex self-service capabilities.
The library of reusable components speeds up development while ensuring the standard application of common functionality. Below is a sample of some of these modules and libraries: