With XDK, the XML Development Kit, VoiceObjects provides the voice market’s first open, XML-based interface to its phone application server. XDK enables developers to use the Integrated Development Environment (IDE) of their choice, such as Eclipse, SAP NetWeaver Studio, or IBM WebSphere Studio, while still retaining full access to the object-oriented design approach provided by VoiceObjects.
At the heart of XDK stands VoiceObjectsXML, an XML-based application-level markup language. It sits on top of open standard such as VoiceXML or SALT, yet is independent of individual media platforms, owing to the VoiceObjects media platform driver concept. Furthermore, it provides all the powerful capabilities built into VoiceObjects’ patented object technology such as a true object-oriented development approach and inheritance.
Applications may be developed in XDK using any Integrated Development Environment (IDE) of choice. A Document Type Description (DTD) and XML schema are provided to enable validation and such features as auto-completion.
A VoiceObjectsXML application definition may consist of multiple files, one of which needs to be the root file from which all others are referenced. Additional files can be imported using the following notation:
<xi:include href=”../lib/myobjects.xml”/>
The href reference may use relative or absolute file or HTTP URLs. Relative URLs are resolved relative to the location of the parent file.
Imports may only be defined at the beginning of a file, before any object definition. Objects may be referenced across different files. Before performing a validity check, all files are merged to determine the total set of objects.
Each individual document needs to be wrapped in
<VoiceObjectsXML version=”9.1”> … </VoiceObjectsXML>
8 Caution: All referenced VoiceObjectsXML files must have the same version information set. A mix of different VoiceObjects versions is not supported as it might lead to problems on importing and deploying.
The file encoding needs to be specified in the <xml> header line, e.g.
<?xml version="1.0" encoding="ISO-8859-1"?>
The following table lists the available top-level VoiceObjectsXML elements. They correspond to the objects of the same name, and are described in detail in the Object Reference.
|
Element |
Description |
|
<audio> |
Defines an Audio object. Uses embedded <altText>. |
|
<businessTask> |
Defines a Business Task object. |
|
<case> |
Defines a Case object. Uses embedded <caseItem>. |
|
<collection> |
Defines a Collection object. |
|
<confirmation> |
Defines a Confirmation object. Uses embedded <correctionItem>. |
|
<connector> |
Defines a Connector object. Uses embedded <connectorItem>. |
|
<database> |
Defines a Database object. |
|
<exit> |
Defines an Exit object. |
|
<expression> |
Defines an Expression object. Uses embedded <argument>. |
|
<format> |
Defines a Format object. Uses embedded <formatItem>. |
|
<goto> |
Defines a Goto object. |
|
<grammar> |
Defines a Grammar object. Uses embedded <grammarItem>. |
|
<hyperlink> |
Defines a Hyperlink object. |
|
<if> |
Defines an If object. |
|
<input> |
Defines an Input object. Uses embedded <resultHandling>. |
|
<layer> |
Defines a Layer object. Uses embedded <layerState>. |
|
<list> |
Defines a List object. Uses embedded <contentFormatting>, <columnGroup>, <navigationMessages>, <selectionCommands>. |
|
<log> |
Defines a Log object. Uses embedded <logItem>. |
|
<loop> |
Defines a Loop object. |
|
<menu> |
Defines a Menu object. Uses embedded <menuItem>. |
|
<module> |
Defines a Module object. |
|
<osdm> |
Defines an OSDM object. Uses embedded <osdmItems>. |
|
<output> |
Defines an Output object. Uses embedded <outputItem>. |
|
<pause> |
Defines a Pause object. |
|
<plugin> |
Defines a Plug-In object. Uses embedded <parameterSet>, <value>. |
|
<recording> |
Defines a Recording object. Uses embedded <parameterSet>. |
|
<resourceLocator> |
Defines a Resource Locator object. |
|
<script> |
Defines a Script object. Uses embedded <parameterSet>, <value>. |
|
<sequence> |
Defines a Sequence object. |
|
<silence> |
Defines a Silence object. |
|
<text> |
Defines a Text object. |
|
<transfer> |
Defines a Transfer object. Uses embedded <parameterSet>. |
|
<variable> |
Defines a Variable object. |
|
<video> |
Defines a Video object. |
The top-level elements make use of the following embedded elements:
|
Element |
Description |
|
<argument> |
Defines arguments for expressions. |
|
<eventHandling> |
Defines event handling. |
|
<item> |
Defines individual entries in parameter sets or result handling. |
|
<osdmItems> |
Defines parameterization for OSDM objects. |
|
<parameterSet> |
Defines parameter sets. |
|
<resultHandling> |
Defines result handling for inputs. |
|
<standardNavigation> |
Defines standard navigation. |
|
<tuning> |
Defines tuning settings. |
|
<value> |
Wraps embedded code for plug-ins or scripts, or embedded values for variables, collections, and expression arguments. |
The top-level VoiceObjectsXML elements carry certain standard attributes, all of which are optional. The following table provides an overview of these attributes and their uses.
Attributes listed in the descriptions for the individual XML elements are to be seen in addition to the standard attributes. They are optional unless marked as “required”.
|
Attribute |
Description |
|
name |
Name of the object. Can be used to refer to the object within XDK files. |
|
referenceID |
Reference ID of the object. |
|
guid |
Globally unique ID for the object. Unless this is specified, a new ID is generated whenever a VoiceObjectsXML application is deployed to VoiceObjects Server or imported into the VoiceObjects Metadata Repository. |
|
shortDescription |
A text string defining the short description of the object. Maximum length is 4,000 bytes. |
|
comment |
A text string defining a comment for the object. Maximum length is 8,000 bytes. |
|
keywords |
A text string defining the keywords for the object (for searching). Maximum length is 4,000 bytes. |
|
versionDescription |
A text string defining the version description of the object. Maximum length is 8,000 bytes. |
|
errorDescription |
A text string defining the error description of the object. Maximum length is 4,000 bytes. |
|
disable |
Either true or false. Indicates whether the object is disabled or not. If not specified, defaults to false. |
|
link |
A reference to another object of the same type. References begin with the # character and may use either the object’s name or the object’s reference ID. Objects may be referenced across file boundaries. When resolving references, an object of the same type with the given string as name is searched for first. If no such object exists, then an object of the same type with the given string as reference ID is searched for. If no such object exists either, an error message is produced. |
|
usage |
Indicates how this element is used as a child of another element. This is relevant when an element may have several children of the same type. |
i8 Note: In case of the attributes name, shortDescription, comment, keywords, versionDescription, and errorDescription using UTF-8 characters is allowed, but may reduce the given size limit, as some characters use more than one byte.
i8 Note: When using MaxDB as the Metadata Repository DBMS the following limits apply to the size of the standard properties described above:
referenceID: 255 bytes; shortDescription: 500 bytes; comment: 500 bytes; keywords: 255 bytes; versionDescription: 500 bytes; errorDescription: 255 bytes.
Objects are referenced in VoiceObjectsXML by their name to enhance readability. Since most references combine object type and object name as e.g. in
<sequence>
<output link=”#Welcome message”/>
<input link=”#Enter account number”/>
</sequence>
there is no confusion because no two objects of the same type may have the same name.
When objects are referenced in attributes, a “type hint” can optionally be added to eliminate confusion between objects of equal name but different type:
<list selectionCart=”/**collection**/#Cart collection”>
Objects from libraries can be referenced using the fully qualified object notation:
<module name=”Prime Banking”>
<output link=”object://General library/Version1#Time-dependent greeting”/>
…
</module>
Applications developed within XDK are deployed to VoiceObjects Server as services. This can be done using VoiceObjects Desktop and the Web Services Interface.
8 Caution: When using Infostore in conjunction with XDK applications, make sure to provide reference IDs and names for all Module objects in your application. Otherwise, reports on application usage will suffer from inconsistent object IDs.
XDK applications can be referenced directly from within services created within VoiceObjects Desktop by using a URI as start object definition. Upon (re-) deployment of the service, the application is dynamically loaded by the server.
For more information, refer to the Deployment Guide.
Services can be deployed through the Web Services Interface as standard services using the deployXDKService method, or as volatile services using the redeployXDKApplication method. The difference in the latter case is that no intermediate files need to be generated from which the application definition is loaded.
For more details, refer to the Web Services Guide.
All VoiceObjects configuration objects (servers, services, users, and projects) can also be defined using VoiceObjectsXML markup. The subsequent paragraphs describe how to define the different object types.
i8 Note: Only a single type of configuration object may be defined within one XDK file, but multiple objects of the same type can be defined at once.
Servers are configured using the <server> element. It has two children <serviceList> (described below) and <accessControlList> (described in Users and access control) and the following attributes (in addition to the standard attributes, of which referenceID is mandatory):
|
Attribute |
Description |
|
sessionLimit |
Defines the maximum number of concurrent sessions for this server. |
|
sessionGuarantee |
Defines the guaranteed number of concurrent sessions for this server. |
|
systemDBLogging |
Defines whether System DB logging is enabled for this server. Either true or false. If not specified, defaults to true. |
|
customDBLogging |
Defines whether Custom DB logging is enabled for this server. Either true or false. If not specified, defaults to true. |
|
utteranceRecording |
Defines whether utterance recording is enabled for this server. Either true or false. If not specified, defaults to true. |
<serviceList> may contain any number of <service> children defining the list of services hosted on the server. The services can either be defined inline, or they can be referenced using the link attribute. When a service is referenced using the link attribute, the corresponding Service object must already exist in the Metadata Repository.
i8 Note: When using an inline definition of a service, this service must not exist in the Metadata Repository. Otherwise an error message will be returned when importing the server definition.
Any number of servers may be defined in a single XDK file.
Example:
<server name=”Production Server” referenceID=”VOServer”
systemDBLogging=”true” customDBLogging=”false”/>
Services are configured using the <service> element. It has one child <accessControlList> (described in Users and access control) and the following attributes:
|
Attribute |
Description |
|
name |
Name of the Service object (for display in VoiceObjects Desktop). |
|
vsn |
VoiceObjects Service Name for the service. Mandatory. |
|
link |
A reference to another service, either by name or by VSN. References begin with the # character. |
|
startObject |
Start object for the service, to be provided as a URL. Note that the start object itself must be designated by its reference ID, not by its name. |
|
enableValidation |
Indicates whether the application should be validated when loading the cache. Either true or false. If not specified, defaults to true. |
|
retainOnShutdown |
Indicates whether the application cache should be persisted even when the server is completely shut down. Either true or false. If not specified, defaults to false. |
|
cacheStandby |
Indicates whether the application cache for this service may be dropped from memory. Either onDemand or never, defaults to onDemand. |
|
dnisMapping |
Comma-separated list of DNIS that map to this service. |
|
startupMode |
Defines the start-up mode for the service. One of automatic, disabled, manual. If not specified, defaults to automatic. |
|
respectUserAgent |
Indicates whether the server should attempt to derive the appropriate driver from the user-agent information contained in the initial request. Either true or false. |
|
language |
Defines the initial language setting for the service. Can be default or a valid language code (e.g. de-DE, en-US, etc.). If not specified, defaults to default. |
|
driver |
Defines the media platform driver for the service. Can be default or a valid media platform driver code, e.g. Avaya_VP_4_0_VXML_2_1_ASR_Nuance (see the Deployment Guide or the DTD or XSD for a list of all available drivers). If not specified, defaults to default. |
|
sessionLimit |
Defines the maximum number of concurrent dialog sessions that is allowed for this service. |
|
sessionGuarantee |
Defines the number of guaranteed sessions that should be set aside for this service. |
|
sessionDistribution |
Defines the distribution of dialog sessions between services within the same custom site. Either disabled, or a float value between 0 and 1 indicating a percentage (e.g. 0.75 for 75%). If not specified, defaults to disabled. |
|
maintainer |
E-mail address of the application administrator. Is used by the media platform to send e-mail in case of errors. |
|
loggingDestination |
Defines the default logging destination for Custom DB logging. One of file, customDB, mediaPlatform, systemDB, logOSDM. If not specified, defaults to file. |
|
loggingCategories |
Defines the active logging categories for Custom DB logging. Comma-separated list of values from among info, debug, error, statistics, billing. If not specified, all of the categories are enabled. |
|
systemDBLogging |
Defines whether System DB logging is enabled. Either true or false. If not specified, defaults to false. |
|
customDBLogging |
Defines whether Custom DB logging is enabled. Either true or false. If not specified, defaults to false. |
|
inputStateLogging |
Defines whether Input State logging is enabled. Either true or false. If not specified, defaults to false. |
|
loggingCoverage |
Defines the percentage of dialogs that should be written to System DB logging. Can be a float value between 0 and 1 indicating a percentage (e.g. 0.75 for 75%). If not specified, defaults to 1. |
|
filterScope |
Defines whether the logging coverage extends only to input states, to System DB logging, or to System and Custom DB logging. One of inputState, systemDB or systemDBCustomDB. If not specified, defaults to systemDB. |
|
enableUtteranceRecording |
Defines whether utterance recording is enabled. Either true or false. If not specified, defaults to false. |
|
recordUtterances |
Defines the default value for the recordUtterances setting on dialog objects. Either true or false. If not specified, defaults to true. |
|
recordingScope |
Defines whether utterance recording files are created only for recognized utterances (recognition), for utterances that lead to No Match events (noMatch), or for both (all). If not specified, defaults to all. |
|
utteranceRecordingPath |
Defines the path that utterance recording files are written to. |
|
utteranceRecordingURL |
Defines the URL through which utterance recording files can be retrieved. |
|
recordingCoverage |
Defines the percentage of dialogs that should write utterance recording files. Can be a float value between 0 and 1 indicating a percentage (e.g. 0.75 for 75%). If not specified, defaults to 1. |
|
bargein |
Defines the default value for barge-in behavior. Either true or false. If not specified, defaults to true. |
|
grammarType |
Defines the default grammar type. Must be one of default, abnf, gsl, jsgf, xml, cisco, precompiled, none. If not specified, defaults to default. |
|
grammarPrecedence |
Defines the precedence between embedded and external grammar definitions within Grammar objects. Either embedded:external or external:embedded. If not specified, defaults to embedded:external. |
|
outputMode |
Defines the default output mode. Either audio:tts or tts:audio. If not specified, defaults to audio:tts. |
|
inputMode |
Defines the default input mode. One of voicedtmf, voice, or dtmf. If not specified, defaults to voicedtmf. |
|
exitType |
Defines the default dialog exit type. Can be disconnect, exit, or return. If not specified, defaults to disconnect. |
|
videoType |
Defines the default video type. One of default, video, videoaudio, none. If not specified, defaults to default. |
|
dialogTimeout |
Defines the dialog timeout. An integer value that is interpreted as seconds. If not specified, defaults to 300 (5 minutes). |
|
standbyTimeout |
Defines the default standby timeout. An integer value that is interpreted as seconds. If not specified, defaults to 600 (10 minutes). |
|
connectorTimeout |
Defines the default connector timeout. An integer value that is interpreted as seconds. If not specified, defaults to 60 (1 minute). |
|
standardNavigationHistory |
Defines the length of the dialog navigation history for the service. Can be disabled, or an integer between 1 and 10. If not specified, defaults to 3. |
|
audioFileExtension |
Defines the standard audio file extension. Legal values are none, wav, aif, aiff, dwd, mp3, snd, au, voc, vox. If not specified, defaults to none. |
|
grammarFileExtension |
Defines the standard grammar file extension. Legal values are none, abnf, grammar, grm, grxml, gsl, jsgf. If not specified, defaults to none. |
|
videoFileExtension |
Defines the standard video file extension. Legal values are none, 3gp, 3g2, mp4, mp4v, m4v, rtp, bmp, gif, jpg, jpeg. If not specified, defaults to none. |
|
textFileExtension |
Defines the standard text file extension. Legal values are none, txt. If not specified, defaults to none. |
|
rejectResponse |
Defines the response behavior for dialogs that are rejected due to missing licenses. Either overflow or redirect. If not specified, defaults to overflow. |
|
proxyHost |
Defines a proxy host to use for HTTP connectors. If not specified, no proxy is used. |
|
proxyPort |
Defines a proxy port to use in combination with the proxy host. Only relevant if proxyHost is defined. |
|
resourceLocatorPath |
Defines a physical path that overwrites the respective entries in resource locators with the option allowServiceOverwrite enabled. If not specified, the local entries of all resource locators are used. |
|
loopAbortHandlerURL |
Defines the location of a file holding valid VoiceXML code that will be used as the loop abort handler. |
|
configurationURL |
Defines the location of a configuration file that defines application default values. |
|
resourceLocatorURL |
Defines a URL that overwrites the respective entries in resource locators with the option allowServiceOverwrite enabled. If not specified, the local entries of all resource locators are used. |
|
osdmURL |
Defines a URL that points to the OSDM installation to be used by OSDM objects. |
|
osdmEventLogging |
Indicates whether OSDM event logging is enabled. Either true or false. If not specified, defaults to false. |
|
osdmEventLogDestination |
Defines the file to which OSDM event logging should be written. If not defined, the default OSDM event logging destination as defined by the OSDM installation is used. |
|
shortDescription |
A text string defining the short description of the service. |
|
errorDescription |
A text string defining the error description of the service. Maximum length is 4,000 bytes. |
|
versionDescription |
A text string defining the version description of the service. Maximum length is 8,000 bytes. |
|
comment |
A text string defining the comment for the service. |
|
keywords |
A text string defining the keywords for the service. |
Multiple services may be defined in a single XDK file, wrapped in the <serviceList> element.
Example:
<service vsn=”insurance” startObject=”http://myserver/XDK/PrimeInsurancePortal.xml#Portal” language=”en-US” systemDBLogging=”true”/>
Users are configured using the <user> element. It has one child <accessControlList> (described below) and the following attributes (in addition to the standard attributes):
|
Attribute |
Description |
|
userID |
Defines the user ID for this user. This replaces the standard referenceID attribute, and is required. |
|
password |
Defines the password for this user. |
|
|
Defines the e-mail address for this user |
|
role |
Defines the user role. One of reviewer, designer, serviceController, observer, siteController, siteAdministrator, userManager, serverController, serverAdministrator. |
|
accountStatus |
Defines whether the account is active or not. Either active or inactive. |
|
allowPasswordChange |
Defines whether the user is allowed to change his password (true or false), or whether the password needs to be changed on next login (login). |
|
allowProjectCreation |
Defines whether the user is allowed to create new projects. Either true or false. |
|
allowWSIAccess |
Defines whether the user is allowed to access the Web Services Interface. Either true or false. |
|
auditDesktop |
Defines the audit level for user interactions with VoiceObjects Desktop. One of none, all, denied. |
|
auditServer |
Defines the audit level for user interactions with VoiceObjects Server. One of none, all, denied. |
|
auditWSI |
Defines the audit level for user interactions with the Web Services Interface. One of none, all, denied. |
|
The attributes listed below are only relevant if the user is the root Site Administrator for a custom site. In this case, they define settings that are applied in the entire site. |
|
|
siteID |
Defines the name of the site. If not defined, the user ID of the root Site Administrator of the site is used. |
|
basePath |
Defines a base physical path used for all resource locators in applications within the site. |
|
baseURL |
Defines a base URL used for all Audio, Video, Grammar, and Plug-In objects in applications within the site. |
|
connectorURL |
Defines a base URL used for all Connector and Script objects in applications within the site. |
|
importPath |
Defines a base import/export path used for the site. |
|
startObjectPath |
Defines a base URL used for the start objects of all XDK-based services in the site. |
|
utteranceRecordingPath |
Defines the base path used for writing utterance recording files in the site. |
|
utteranceRecordingURL |
Defines the base URL through which utterance recording files can be retrieved in the site. |
|
sessionGuarantee |
Defines the guaranteed number of concurrent sessions for the site. |
|
sessionLimit |
Defines the maximum number of concurrent sessions for the site. |
|
serverLimit |
Defines the maximum number of concurrently active servers for the site. |
|
serviceLimit |
Defines the maximum number of concurrently active services for the site. |
|
designerSeats |
Defines the maximum number of Designer seats available within the site. |
|
siteSeats |
Defines the maximum number of Site seats available within the site. |
|
seats |
Defines the maximum number of VoiceObjects Desktop seats available within the site. |
|
osdm |
Indicates whether OSDM support is available within the site. Either true or false. |
|
infostore |
Indicates whether Infostore is available within the site. Either true or false. |
Access control lists for objects are defined using the <accessControlList> element. It has one child <aclEntry>, which in turn has an attribute user that references a User object through its userID.
Any number of users may be defined in a single XDK file.
Example:
<user name=”John Smith” userID=”jsmith” password=”uhg6df8”
role=”serviceController”/>
<user name=”Site Alpha” userID=”adminAlpha” password=”alpha” siteID=”SiteAlpha” sessionGuarantee=”5” sessionLimit=”20”/>
<accessControlList><aclEntry user=”jsmith”/></accessControlList>
Projects are configured using the <project> element. It has two children <accessControlList> (optional) and <projectVersion> (mandatory), and the standard attributes of which name is mandatory.
In addition, the <project> element has an attribute isLibrary, which can be true or false (the default). The isLibrary attribute is only interpreted the first time a project is created and cannot be modified later on.
A project version is configured using the <projectVersion> element. It has one optional child <libraries> and the standard attributes, of which name is mandatory. When creating a project, exactly one project version must be created. New project versions can only be created by publishing existing ones. For more information, refer to the Web Services Guide.
Libraries are attached to project versions using the <libraries> element. It may contain one or more <library> children. Each <library> has two mandatory attributes libraryName and libraryVersionName.
Any number of projects may be defined in a single XDK file.
Example:
<project name=”Hello World” shortDescription=”My first application”>
<projectVersion name=”1.0”/>
</project>
<project name=”Credit Card Validation”>
<accessControlList>
<aclEntry user=”john17”/>
<aclEntry user=”alice32”/>
<aclEntry user=”bob19”/>
</accessControlList>
<projectVersion name=”1.0”>
<libraries>
<library libraryName=”Common tasks” libraryVersionName=”3.6”/>
</libraries>
</projectVersion>
</project>
Applications developed in XDK can be imported into the VoiceObjects Metadata Repository through VoiceObjects Desktop or through the Web Services Interface. This is done using the standard import mechanism described in Chapter 7 – Basic Commands in the Desktop for Eclipse Guide and Desktop for Web Guide, and in the Web Services Guide.
@8 Tip: When you intend to import your XDK application into the VoiceObjects Metadata Repository, you should define the name attribute for all objects. For objects that do not have a name defined, a name is constructed during the import process based on the name of the XDK file and the line number in which the object definition starts (e.g. HelloWorld.xml_17). The resulting application is fully functional, but not very readable.
In addition to applications, it is also possible to import configuration objects into the Metadata Repository.