VoiceGenie supports both ASCII and binary UUI data. This is done by using a URL encoding/decoding algorithm on UUI data being passed in to the platform with an inbound call, or sent out with an outbound call.
Passing In UUI Data
When data is passed in to the platform with an inbound call (i.e., in the call setup message), the algorithm encodes non-ASCII bytes as "%HH", where "H" is a hexadecimal number and "%" is the escape. For example, "00000001" is represented as "%01", and "00001010" is represented as "%0A".
This will affect the data that is accessible in the VoiceXML
page through a
session variable (session.telephone.uui,
session.connection.uui,
session.telephone.aai,
or session.connection.aai, depending on how the
platform is configured).
Sending Out UUI Data
When data is sent out with an outbound call request, the algorithm decodes any "%HH" sequences into binary data. Except for "%", all other printable ASCII characters in the data remain unchanged.
This will affect the data that is sent out through the
aai/aaiexpr attributes of
<transfer> or <call>,
or through the 'uuidata' property of an object passed
through the signalvar attribute of
<transfer> or <call>.
Conversion Example
The ECMAScript parseInt() function can be used to
turn hexadecimal strings back into a decimal number. So binary
data within an inbound UUI message can be accessed in the
VoiceXML page with code like:
<var name="uui" expr="session.telephone.uui"/> <var name="char1" expr="uui.charAt(0)"/> <!-- uui.charAt(1) == "%" --> <var name="byte1" expr="parseInt(uui.substring(2, 4), 16)"/> <!-- uui.charAt(4) == "%" --> <var name="byte2" expr="parseInt(uui.substring(5, 7), 16)"/>
(where the second parameter of parseInt() indicates
that the string is in base 16). Then, if the binary value of the
second field was "00000001", the byte1 variable
would be set to "1".