How RedToMe works.
An Internet phone works by connecting a telephone handset to the Internet
using a TCP/IP protocol called SIP or H.323.
To get started you need to register your phone to a Public Switched Telephone
Network gateway provider. RedToMe uses the SIP protocol from a provider
like BROADVOICE or VOIPTALK to make the connection to "land line" services.
When purchasing a SIP service you are often able to choose your own
telephone number and you are give a login identification and password. If you
ever want to "dial out" you must also purchase "credits" - we don't!
In fact, the Session Initiation Protocol (SIP) is just a way starting a
telephone call. When an incoming call is received, SIP is used to establish the
connection and then the audio traffic is passed on to Real Time Transport
protocol (RTP). There a lot of ports that have to pass through a firewall to
make this work!
How RedToMe speaks.
There are many competing Text To Speech ( TTS) Engines
available for Windows. The default Microsoft engines are very good but there are
specialised
engines for most languages. RedToMe uses TTS to convert text from a script
to audio and RTP to play the audio to a "dial in" user. Of course, the
system will also play digital audio from other sources.
RedToMe "reads" from a pre-prepared script which has special functions
designed to provide hints for the more difficult reading tasks. e.g
say '$100.23'
; is better written
currency '$100.23'
; and will be read as one hundred dollars and twenty three
cents
RedToMe scripting language (RSL)
Every dial in user causes an RSL script to be processed. (There is
an RSL summary manual at the end of this document)
e.g.
say 'Welcome to flood watch'
say 'There are no flood warnings' date_dmy '22062006'
say 'High tide today will be at '
time '4:32 PM. '
say 'The height is predicted to be'
number_decimal '10.23'
say 'feet.'
How RedTome interacts.
RedTome uses the phone keyboard DTMF tones for simple
interaction. RSL provides two functions for this purpose.
input identifier
Read a number from the phone terminated by the * or the # key.
key identifier
Read a single key. (* has value 11, # has value
12)
There is no time-out.
How RedTome manages message security.
Security is not mandated; the "flood watch" script above, would
work for all clients that knew the telephone number. Enforcing security is the
responsibilty of the RSL script author. RSL provides two functions for
"login" checking against a validation database of accounts and passwords.
login identifier
Read an ACCOUNT NUMBER from the phone
terminated by the * or the
# key. If a
sub-directory exists in the application root directory corresponding to the
number entered, the reserved identifier "account_status" is
set to "1". This is the message directory for the client.
A "client" message is an RSL script. The number of RSL scripts
that exist in the message directory for the client is set in the reserved
identifier "message_status".
password identifier
Read a PASSWORD from the phone terminated
by the * or the
# key. If the
number entered is correct for the account number the reserved identifier
"password_status" is set to "1". If message_status>0 the
script could go on to play messages using the function
messages
messages
Speak messages in the client folder correspondind to the
account number. Each message is prefaced by the creation time and
date.
delete
Delete messages in the client messages folder (if
any)
RedToMe encrypts the account number and the password using a one
way block cipher. Plain text passwords are not stored on file.
RedToMe Script Language elements.
Strings must be quoted e.g. 'hello world'
Identifiers are used to hold numbers and must start with an alpha
character and contain nothing other that alphanumeric characters plus "_".
White space is ignored. A semi-colon is used to introduce a
comment.
Flow control
if {conditional_expression}
{condition_block}
conditional_expression::=identifier
conditional_operator identifier
conditional_operator::= > | < |
>= | <= | = |
<>
goto label_identifier
A label is denoted in the script using the
notation label_identifier :
e.g if {message_status=0} {goto theend}
RedToMe scripting
language functions
login, password, messages, delete
(documented above under security)
say string
Read the text. Punctuation is not required but full stops and
commas help with the phrasing.
sayplural identifier , string
This function used to read identifier as an integer
using an extended form. The system attempts to use a plural form of the
cited string as required.
e.g. sayplural x,'note'
x=3 .. three notes
x=1 .. one note
x=0 .. no notes
wave string
Play a pre-recorded ".wav" file. The file must be made in
11KHz 8bit Mono WAV format.
inc identifier
dec identifier
Increment or decrement the number stored in the cited
identifier.
let identifier = number
Assign a value to the cited identifier
silence
number
Pause for a number of milliseconds e.g. silence 1000 - pause
for a second
Various "helper" functions are provided to "read as" in a
special format.
date_mdy string |
month day year. |
date_dmy string |
day month year. |
date_ym string |
year month. |
date_mdy string |
month day year |
date_my string |
month year |
date_dm string |
day month |
date_md string |
month day |
date_year string |
year |
date_time string |
time |
number_fraction
string |
fraction |
number_decimal
string |
decimal |
number_digit
string | identifier |
read number as a series of digits |
currency string |
currency amount in appropriate international
notation |
phone_number string
|
read as a phone number |
web_url
string |
read as a web site address |
number_cardinal
string | identifier |
positive integer |
Note that only number_digit
and number_cardinal accept either identifier or
literal string parameters. This allows key pad entry or "status" reserved
identifiers to be spoken.
Complex
Pronunciation
pronounce string
RedTome speech synthesis engines
may need help with words that are not in the lexicon. For example, end users
might be offended by "Microsoft Anna" getting their name wrong! RSL uses a
phonetic notation to voice these types of words correctly.
The string parameter for the
pronounce function uses a series of short comands to voice the word
correctly and emphasise the correct syllable
e.g. pronounce 'h eh
- l ow 1'
- |
syllable boundary (hyphen) |
! |
Sentence terminator (exclamation mark) |
& |
word boundary (ampersand) |
, |
Sentence terminator (comma) |
. |
Sentence terminator (period) |
? |
Sentence terminator (question mark) |
_ |
Silence (underscore) |
1 |
Primary stress |
2 |
Secondary stress |
aa |
as in father |
ae |
as in cat |
ah |
as in cut |
ao |
as in dog |
aw |
as in foul |
ax |
as in ago |
ay |
as in bite |
b |
as in big |
ch |
as in chin |
d |
as in dig |
dh |
as in then |
eh |
as in pet |
er |
as in fur |
ey |
as in ate |
f |
as in fork |
g |
as in gut |
h |
as in help |
ih |
as in fill |
iy |
as in feel |
jh |
as in joy |
k |
as in cut |
l |
as in lid |
m |
as in mat |
n |
as in no |
ng |
as in sing |
ow |
as in go |
oy |
as in toy |
p |
as in put |
r |
as in red |
s |
as in sit |
sh |
as in she |
t |
as in talk |
th |
as in thin |
uh |
as in book |
uw |
as in took |
v |
as in vat |
w |
as in with |
y |
as in yard |
z |
as in zap |
zh |
as in
sure |
Example
script
;
Read account number wave 'ring.wav' start: silence 300 say
'Please enter your account code followed by the star key'
input account
login account say 'Thank you' silence 300 say
'Now enter your password followed by the star key'
input pw
;
validate password password pw
if {password_status=1} {goto okpass}
say 'Account ' number_digit account say 'not
authorised.' say 'please try again.' goto start
okpass:
say 'You have' sayplural
message_status,'message'
if
{message_status=0} {goto theend}
loop: say 'to play all messages press 1' say 'to
delete all messages press 2'
key a if {a=1} {goto playit} if {a=2} {goto
dele} if {a=3} {goto secret} goto loop
secret:
wave 'drydemo.wav' goto loop
playit: say 'Playing messages'; messages goto
loop
dele: say 'Please press 2 to confirm that you want to
delete all messages' key a if {a<>2} {goto
loop} delete say 'all messages deleted'
theend: say 'Thank you for calling the RedTitan
Interactive Voice Response system'
RedTome version 1.3
2007
|