VoiceXML Stylesheet - Page 5
November 29, 2001
Note that the stylesheet is designed to produce a single VoiceXML
document containing just one user's data. So, its top-level
template only matches documents where the top-level attribute
export_type is set to single. The indent attribute
on the <xsl:output> tag will produce a well-formatted
result document that will be easier for a human brain to examine.
<?xml version = "1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="ISO-8859-1" indent="yes"/>
<xsl:template match="myrubberbands[@export_type='single']/customer_record">
<vxml version="1.0">
<meta name="author" content="Underpaid Myrubberbands Engineer"/>
<meta name="copyright" content="Copyright (C) 2001 Myrubberbands.com"/>
[The colored lines above are one line. They have been split
for formatting purposes.]
The next block illustrates one way XSL can generate elements with
an attribute having dynamic content: the <xsl:element>
construct.
<xsl:element name="meta">
<xsl:attribute name="name">description</xsl:attribute>
<xsl:attribute name="content">Voice Interface for #<xsl:value-of
select="customer/@id"/>
</xsl:attribute>
</xsl:element>
We will need to set up some variables for use in the VoiceXML
document. First off, we grab the user's Automatic Number
Identification (ANI) and Dialed Number Identification Service
(DNIS) for later use. These correspond to the phone number that
originated the call (analogous, but not identical to, the
consumer caller ID service) and the number that the user dialed.
The implementation of these is system dependent, and the data may
not be available for all calls in any case. They are included
here mainly for illustration. In a real application, the ANI can
be used for auto-identification of the user. The
form_pointer variable will be used for navigation
later.
<var name="customer_ani" expr="session.telephone.ani"/>
<var name="customer_dnis" expr="session.telephone.dnis"/>
<var name="session_error_count" expr="0"/>
<var name="form_pointer" expr="'mainMenu'"/>
<var name="user_command" expr="''"/>
Next come the form level help dialogs, which here attempt to
mimic typical responses likely from a real life call center,
contrary to the advice of Chapter 6:
<help count="1">
What seems to be the trouble?
<reprompt/>
</help>
<help count="2">
Come on - isn't this easy enough to understand?
<reprompt/>
</help>
<help count="3">
Hey <xsl:value-of select="customer/firstname"/>,
are you stupid or something?
<reprompt/>
</help>
[The colored lines above are one line. They have been split
for formatting purposes.]
The design specifies that the main menu command is always
available. We can implement that with a global VoiceXML
<link> element:
<link next="#mainMenu">
<grammar type="application/x-jsgf"> main menu </grammar>
</link>
Again, we use the information from the XML file to customize the
prompts for the user. This form welcomeMessage
corresponds to the "welcome message" box in the interface design
diagram earlier.
<form id="welcomeMessage">
<block>
<prompt bargein="false" timeout="0.1s">
Hello, <xsl:value-of select="customer/firstname"/>.
Welcome to the my rubber bands dot com voice order status system.
</prompt>
<goto next="#mainMenu"/>
</block>
</form>
Creating a Markup Language (Con't) - Page 4
Early Adopter VoiceXML
VoiceXML Stylesheet (con't) - Page 6
|