mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-05-30 18:33:46 +00:00
Added mod_rayo (XMPP 3PCC http://xmpp.org/extensions/xep-0327.html). Used by Adhearsion as its native call control protocol. Currently beta testing.
This commit is contained in:
parent
5feca50770
commit
ef785c6e9b
@ -93,6 +93,7 @@ event_handlers/mod_cdr_sqlite
|
|||||||
event_handlers/mod_event_socket
|
event_handlers/mod_event_socket
|
||||||
#event_handlers/mod_event_zmq
|
#event_handlers/mod_event_zmq
|
||||||
#event_handlers/mod_radius_cdr
|
#event_handlers/mod_radius_cdr
|
||||||
|
#event_handlers/mod_rayo
|
||||||
#event_handlers/mod_snmp
|
#event_handlers/mod_snmp
|
||||||
formats/mod_local_stream
|
formats/mod_local_stream
|
||||||
formats/mod_native_file
|
formats/mod_native_file
|
||||||
|
39
src/mod/event_handlers/mod_rayo/Makefile
Normal file
39
src/mod/event_handlers/mod_rayo/Makefile
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
BASE=../../../..
|
||||||
|
|
||||||
|
IKS_DIR=$(BASE)/libs/iksemel
|
||||||
|
PCRE_DIR=$(BASE)/libs/pcre
|
||||||
|
IKS_LA=$(IKS_DIR)/src/libiksemel.la
|
||||||
|
PCRE_LA=$(PCRE_DIR)/libpcre.la
|
||||||
|
LOCAL_CFLAGS += -I$(BASE)/libs/iksemel/include -I$(BASE)/libs/pcre
|
||||||
|
LOCAL_OBJS= $(IKS_LA) \
|
||||||
|
$(PCRE_LA) \
|
||||||
|
iks_helpers.o \
|
||||||
|
nlsml.o \
|
||||||
|
rayo_components.o \
|
||||||
|
rayo_input_component.o \
|
||||||
|
rayo_output_component.o \
|
||||||
|
rayo_prompt_component.o \
|
||||||
|
rayo_record_component.o \
|
||||||
|
sasl.o \
|
||||||
|
srgs.o \
|
||||||
|
xmpp_streams.o
|
||||||
|
LOCAL_SOURCES= \
|
||||||
|
iks_helpers.c \
|
||||||
|
nlsml.c \
|
||||||
|
rayo_components.c \
|
||||||
|
rayo_input_component.c \
|
||||||
|
rayo_output_component.c \
|
||||||
|
rayo_prompt_component.c \
|
||||||
|
rayo_record_component.c \
|
||||||
|
sasl.c \
|
||||||
|
srgs.c \
|
||||||
|
xmpp_streams.c
|
||||||
|
include $(BASE)/build/modmake.rules
|
||||||
|
|
||||||
|
$(IKS_LA): $(IKS_DIR) $(IKS_DIR)/.update
|
||||||
|
@cd $(IKS_DIR) && $(MAKE)
|
||||||
|
@$(TOUCH_TARGET)
|
||||||
|
|
||||||
|
$(PCRE_LA): $(PCRE_DIR) $(PCRE_DIR)/.update
|
||||||
|
@cd $(PCRE_DIR) && $(MAKE)
|
||||||
|
@$(TOUCH_TARGET)
|
@ -0,0 +1,41 @@
|
|||||||
|
<configuration name="acl.conf" description="Network Lists">
|
||||||
|
<network-lists>
|
||||||
|
<!--
|
||||||
|
These ACL's are automatically created on startup.
|
||||||
|
|
||||||
|
rfc1918.auto - RFC1918 Space
|
||||||
|
nat.auto - RFC1918 Excluding your local lan.
|
||||||
|
localnet.auto - ACL for your local lan.
|
||||||
|
loopback.auto - ACL for your local lan.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<list name="lan" default="allow">
|
||||||
|
<node type="deny" cidr="192.168.42.0/24"/>
|
||||||
|
<node type="allow" cidr="192.168.42.42/32"/>
|
||||||
|
</list>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This will traverse the directory adding all users
|
||||||
|
with the cidr= tag to this ACL, when this ACL matches
|
||||||
|
the users variables and params apply as if they
|
||||||
|
digest authenticated.
|
||||||
|
-->
|
||||||
|
<list name="domains" default="deny">
|
||||||
|
<!-- domain= is special it scans the domain from the directory to build the ACL -->
|
||||||
|
<node type="allow" domain="$${domain}"/>
|
||||||
|
<!-- use cidr= if you wish to allow ip ranges to this domains acl. -->
|
||||||
|
<!-- <node type="allow" cidr="192.168.0.0/24"/> -->
|
||||||
|
</list>
|
||||||
|
|
||||||
|
<list name="rayo-clients" default="deny">
|
||||||
|
<node type="allow" cidr="192.168.0.39/32"/>
|
||||||
|
<node type="allow" cidr="192.168.0.59/32"/>
|
||||||
|
</list>
|
||||||
|
|
||||||
|
<list name="rayo-servers" default="deny">
|
||||||
|
<node type="allow" cidr="192.168.0.39/32"/>
|
||||||
|
</list>
|
||||||
|
|
||||||
|
</network-lists>
|
||||||
|
</configuration>
|
||||||
|
|
@ -0,0 +1,23 @@
|
|||||||
|
<configuration name="cdr_csv.conf" description="CDR CSV Format">
|
||||||
|
<settings>
|
||||||
|
<!-- 'cdr-csv' will always be appended to log-base -->
|
||||||
|
<!--<param name="log-base" value="/var/log"/>-->
|
||||||
|
<param name="default-template" value="example"/>
|
||||||
|
<!-- This is like the info app but after the call is hung up -->
|
||||||
|
<!--<param name="debug" value="true"/>-->
|
||||||
|
<param name="rotate-on-hup" value="true"/>
|
||||||
|
<!-- may be a b or ab -->
|
||||||
|
<param name="legs" value="a"/>
|
||||||
|
<!-- Only log in Master.csv -->
|
||||||
|
<!-- <param name="master-file-only" value="true"/> -->
|
||||||
|
</settings>
|
||||||
|
<templates>
|
||||||
|
<template name="sql">INSERT INTO cdr VALUES ("${caller_id_name}","${caller_id_number}","${destination_number}","${context}","${start_stamp}","${answer_stamp}","${end_stamp}","${duration}","${billsec}","${hangup_cause}","${uuid}","${bleg_uuid}", "${accountcode}");</template>
|
||||||
|
<template name="example">"${caller_id_name}","${caller_id_number}","${destination_number}","${context}","${start_stamp}","${answer_stamp}","${end_stamp}","${duration}","${billsec}","${hangup_cause}","${uuid}","${bleg_uuid}","${accountcode}","${read_codec}","${write_codec}"</template>
|
||||||
|
<template name="snom">"${caller_id_name}","${caller_id_number}","${destination_number}","${context}","${start_stamp}","${answer_stamp}","${end_stamp}","${duration}","${billsec}","${hangup_cause}","${uuid}","${bleg_uuid}", "${accountcode}","${read_codec}","${write_codec}","${sip_user_agent}","${call_clientcode}","${sip_rtp_rxstat}","${sip_rtp_txstat}","${sofia_record_file}"</template>
|
||||||
|
<template name="linksys">"${caller_id_name}","${caller_id_number}","${destination_number}","${context}","${start_stamp}","${answer_stamp}","${end_stamp}","${duration}","${billsec}","${hangup_cause}","${uuid}","${bleg_uuid}","${accountcode}","${read_codec}","${write_codec}","${sip_user_agent}","${sip_p_rtp_stat}"</template>
|
||||||
|
<template name="asterisk">"${accountcode}","${caller_id_number}","${destination_number}","${context}","${caller_id}","${channel_name}","${bridge_channel}","${last_app}","${last_arg}","${start_stamp}","${answer_stamp}","${end_stamp}","${duration}","${billsec}","${hangup_cause}","${amaflags}","${uuid}","${userfield}"</template>
|
||||||
|
<template name="opencdrrate">"${uuid}","${signal_bond}","${direction}","${ani}","${destination_number}","${answer_stamp}","${end_stamp}","${billsec}","${accountcode}","${userfield}","${network_addr}","${regex('${original_caller_id_name}'|^.)}","${sip_gateway_name}"</template>
|
||||||
|
</templates>
|
||||||
|
</configuration>
|
||||||
|
|
@ -0,0 +1,213 @@
|
|||||||
|
<!-- http://wiki.freeswitch.org/wiki/Mod_conference -->
|
||||||
|
<!-- None of these paths are real if you want any of these options you need to really set them up -->
|
||||||
|
<configuration name="conference.conf" description="Audio Conference">
|
||||||
|
<!-- Advertise certain presence on startup . -->
|
||||||
|
<advertise>
|
||||||
|
<room name="3001@$${domain}" status="FreeSWITCH"/>
|
||||||
|
</advertise>
|
||||||
|
|
||||||
|
<!-- These are the default keys that map when you do not specify a caller control group -->
|
||||||
|
<!-- Note: none and default are reserved names for group names. Disabled if dist-dtmf member flag is set. -->
|
||||||
|
<caller-controls>
|
||||||
|
<group name="default">
|
||||||
|
<control action="mute" digits="0"/>
|
||||||
|
<control action="deaf mute" digits="*"/>
|
||||||
|
<control action="energy up" digits="9"/>
|
||||||
|
<control action="energy equ" digits="8"/>
|
||||||
|
<control action="energy dn" digits="7"/>
|
||||||
|
<control action="vol talk up" digits="3"/>
|
||||||
|
<control action="vol talk zero" digits="2"/>
|
||||||
|
<control action="vol talk dn" digits="1"/>
|
||||||
|
<control action="vol listen up" digits="6"/>
|
||||||
|
<control action="vol listen zero" digits="5"/>
|
||||||
|
<control action="vol listen dn" digits="4"/>
|
||||||
|
<control action="hangup" digits="#"/>
|
||||||
|
</group>
|
||||||
|
</caller-controls>
|
||||||
|
|
||||||
|
<!-- Profiles are collections of settings you can reference by name. -->
|
||||||
|
<profiles>
|
||||||
|
<!--If no profile is specified it will default to "default"-->
|
||||||
|
<profile name="default">
|
||||||
|
<!-- Directory to drop CDR's
|
||||||
|
'auto' means $PREFIX/logs/conference_cdr/<confernece_uuid>.cdr.xml
|
||||||
|
a non-absolute path means $PREFIX/logs/<value>/<confernece_uuid>.cdr.xml
|
||||||
|
absolute path means <value>/<confernece_uuid>.cdr.xml
|
||||||
|
-->
|
||||||
|
<!-- <param name="cdr-log-dir" value="auto"/> -->
|
||||||
|
|
||||||
|
<!-- Domain (for presence) -->
|
||||||
|
<param name="domain" value="$${domain}"/>
|
||||||
|
<!-- Sample Rate-->
|
||||||
|
<param name="rate" value="8000"/>
|
||||||
|
<!-- Number of milliseconds per frame -->
|
||||||
|
<param name="interval" value="20"/>
|
||||||
|
<!-- Energy level required for audio to be sent to the other users -->
|
||||||
|
<param name="energy-level" value="300"/>
|
||||||
|
|
||||||
|
<!--Can be | delim of waste|mute|deaf|dist-dtmf waste will always transmit data to each channel
|
||||||
|
even during silence. dist-dtmf propagates dtmfs to all other members, but channel controls
|
||||||
|
via dtmf will be disabled. -->
|
||||||
|
<!--<param name="member-flags" value="waste"/>-->
|
||||||
|
|
||||||
|
<!-- Name of the caller control group to use for this profile -->
|
||||||
|
<!-- <param name="caller-controls" value="some name"/> -->
|
||||||
|
<!-- Name of the caller control group to use for the moderator in this profile -->
|
||||||
|
<!-- <param name="moderator-controls" value="some name"/> -->
|
||||||
|
<!-- TTS Engine to use -->
|
||||||
|
<!--<param name="tts-engine" value="cepstral"/>-->
|
||||||
|
<!-- TTS Voice to use -->
|
||||||
|
<!--<param name="tts-voice" value="david"/>-->
|
||||||
|
|
||||||
|
<!-- If TTS is enabled all audio-file params beginning with -->
|
||||||
|
<!-- 'say:' will be considered text to say with TTS -->
|
||||||
|
<!-- Override the default path here, after which you use relative paths in the other sound params -->
|
||||||
|
<!-- Note: The default path is the conference's first caller's sound_prefix -->
|
||||||
|
<!--<param name="sound-prefix" value="$${sounds_dir}/en/us/callie"/>-->
|
||||||
|
<!-- File to play to acknowledge succees -->
|
||||||
|
<!--<param name="ack-sound" value="beep.wav"/>-->
|
||||||
|
<!-- File to play to acknowledge failure -->
|
||||||
|
<!--<param name="nack-sound" value="beeperr.wav"/>-->
|
||||||
|
<!-- File to play to acknowledge muted -->
|
||||||
|
<param name="muted-sound" value="conference/conf-muted.wav"/>
|
||||||
|
<!-- File to play to acknowledge unmuted -->
|
||||||
|
<param name="unmuted-sound" value="conference/conf-unmuted.wav"/>
|
||||||
|
<!-- File to play if you are alone in the conference -->
|
||||||
|
<param name="alone-sound" value="conference/conf-alone.wav"/>
|
||||||
|
<!-- File to play endlessly (nobody will ever be able to talk) -->
|
||||||
|
<!--<param name="perpetual-sound" value="perpetual.wav"/>-->
|
||||||
|
<!-- File to play when you're alone (music on hold)-->
|
||||||
|
<param name="moh-sound" value="$${hold_music}"/>
|
||||||
|
<!-- File to play when you join the conference -->
|
||||||
|
<param name="enter-sound" value="tone_stream://%(200,0,500,600,700)"/>
|
||||||
|
<!-- File to play when you leave the conference -->
|
||||||
|
<param name="exit-sound" value="tone_stream://%(500,0,300,200,100,50,25)"/>
|
||||||
|
<!-- File to play when you ae ejected from the conference -->
|
||||||
|
<param name="kicked-sound" value="conference/conf-kicked.wav"/>
|
||||||
|
<!-- File to play when the conference is locked -->
|
||||||
|
<param name="locked-sound" value="conference/conf-locked.wav"/>
|
||||||
|
<!-- File to play when the conference is locked during the call-->
|
||||||
|
<param name="is-locked-sound" value="conference/conf-is-locked.wav"/>
|
||||||
|
<!-- File to play when the conference is unlocked during the call-->
|
||||||
|
<param name="is-unlocked-sound" value="conference/conf-is-unlocked.wav"/>
|
||||||
|
<!-- File to play to prompt for a pin -->
|
||||||
|
<param name="pin-sound" value="conference/conf-pin.wav"/>
|
||||||
|
<!-- File to play to when the pin is invalid -->
|
||||||
|
<param name="bad-pin-sound" value="conference/conf-bad-pin.wav"/>
|
||||||
|
<!-- Conference pin -->
|
||||||
|
<!--<param name="pin" value="12345"/>-->
|
||||||
|
<!--<param name="moderator-pin" value="54321"/>-->
|
||||||
|
<!-- Max number of times the user can be prompted for PIN -->
|
||||||
|
<!--<param name="pin-retries" value="3"/>-->
|
||||||
|
<!-- Default Caller ID Name for outbound calls -->
|
||||||
|
<param name="caller-id-name" value="$${outbound_caller_name}"/>
|
||||||
|
<!-- Default Caller ID Number for outbound calls -->
|
||||||
|
<param name="caller-id-number" value="$${outbound_caller_id}"/>
|
||||||
|
<!-- Suppress start and stop talking events -->
|
||||||
|
<!-- <param name="suppress-events" value="start-talking,stop-talking"/> -->
|
||||||
|
<!-- enable comfort noise generation -->
|
||||||
|
<param name="comfort-noise" value="true"/>
|
||||||
|
<!-- Uncomment auto-record to toggle recording every conference call. -->
|
||||||
|
<!-- Another valid value is shout://user:pass@server.com/live.mp3 -->
|
||||||
|
<!--
|
||||||
|
<param name="auto-record" value="$${recordings_dir}/${conference_name}_${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- IVR digit machine timeouts -->
|
||||||
|
<!-- How much to wait between DTMF digits to match caller-controls -->
|
||||||
|
<!-- <param name="ivr-dtmf-timeout" value="500"/> -->
|
||||||
|
<!-- How much to wait for the first DTMF, 0 forever -->
|
||||||
|
<!-- <param name="ivr-input-timeout" value="0" /> -->
|
||||||
|
<!-- Delay before a conference is asked to be terminated -->
|
||||||
|
<!-- <param name="endconf-grace-time" value="120" /> -->
|
||||||
|
<!-- Can be | delim of wait-mod|audio-always|video-bridge|video-floor-only
|
||||||
|
wait_mod will wait until the moderator in,
|
||||||
|
audio-always will always mix audio from all members regardless they are talking or not -->
|
||||||
|
<!-- <param name="conference-flags" value="audio-always"/> -->
|
||||||
|
</profile>
|
||||||
|
|
||||||
|
<profile name="wideband">
|
||||||
|
<param name="domain" value="$${domain}"/>
|
||||||
|
<param name="rate" value="16000"/>
|
||||||
|
<param name="interval" value="20"/>
|
||||||
|
<param name="energy-level" value="300"/>
|
||||||
|
<!--<param name="sound-prefix" value="$${sounds_dir}/en/us/callie"/>-->
|
||||||
|
<param name="muted-sound" value="conference/conf-muted.wav"/>
|
||||||
|
<param name="unmuted-sound" value="conference/conf-unmuted.wav"/>
|
||||||
|
<param name="alone-sound" value="conference/conf-alone.wav"/>
|
||||||
|
<param name="moh-sound" value="$${hold_music}"/>
|
||||||
|
<param name="enter-sound" value="tone_stream://%(200,0,500,600,700)"/>
|
||||||
|
<param name="exit-sound" value="tone_stream://%(500,0,300,200,100,50,25)"/>
|
||||||
|
<param name="kicked-sound" value="conference/conf-kicked.wav"/>
|
||||||
|
<param name="locked-sound" value="conference/conf-locked.wav"/>
|
||||||
|
<param name="is-locked-sound" value="conference/conf-is-locked.wav"/>
|
||||||
|
<param name="is-unlocked-sound" value="conference/conf-is-unlocked.wav"/>
|
||||||
|
<param name="pin-sound" value="conference/conf-pin.wav"/>
|
||||||
|
<param name="bad-pin-sound" value="conference/conf-bad-pin.wav"/>
|
||||||
|
<param name="caller-id-name" value="$${outbound_caller_name}"/>
|
||||||
|
<param name="caller-id-number" value="$${outbound_caller_id}"/>
|
||||||
|
<param name="comfort-noise" value="true"/>
|
||||||
|
<!--<param name="tts-engine" value="flite"/>-->
|
||||||
|
<!--<param name="tts-voice" value="kal16"/>-->
|
||||||
|
</profile>
|
||||||
|
|
||||||
|
<profile name="ultrawideband">
|
||||||
|
<param name="domain" value="$${domain}"/>
|
||||||
|
<param name="rate" value="32000"/>
|
||||||
|
<param name="interval" value="20"/>
|
||||||
|
<param name="energy-level" value="300"/>
|
||||||
|
<!--<param name="sound-prefix" value="$${sounds_dir}/en/us/callie"/>-->
|
||||||
|
<param name="muted-sound" value="conference/conf-muted.wav"/>
|
||||||
|
<param name="unmuted-sound" value="conference/conf-unmuted.wav"/>
|
||||||
|
<param name="alone-sound" value="conference/conf-alone.wav"/>
|
||||||
|
<param name="moh-sound" value="$${hold_music}"/>
|
||||||
|
<param name="enter-sound" value="tone_stream://%(200,0,500,600,700)"/>
|
||||||
|
<param name="exit-sound" value="tone_stream://%(500,0,300,200,100,50,25)"/>
|
||||||
|
<param name="kicked-sound" value="conference/conf-kicked.wav"/>
|
||||||
|
<param name="locked-sound" value="conference/conf-locked.wav"/>
|
||||||
|
<param name="is-locked-sound" value="conference/conf-is-locked.wav"/>
|
||||||
|
<param name="is-unlocked-sound" value="conference/conf-is-unlocked.wav"/>
|
||||||
|
<param name="pin-sound" value="conference/conf-pin.wav"/>
|
||||||
|
<param name="bad-pin-sound" value="conference/conf-bad-pin.wav"/>
|
||||||
|
<param name="caller-id-name" value="$${outbound_caller_name}"/>
|
||||||
|
<param name="caller-id-number" value="$${outbound_caller_id}"/>
|
||||||
|
<param name="comfort-noise" value="true"/>
|
||||||
|
<!--<param name="tts-engine" value="flite"/>-->
|
||||||
|
<!--<param name="tts-voice" value="kal16"/>-->
|
||||||
|
</profile>
|
||||||
|
|
||||||
|
<profile name="cdquality">
|
||||||
|
<param name="domain" value="$${domain}"/>
|
||||||
|
<param name="rate" value="48000"/>
|
||||||
|
<param name="interval" value="10"/>
|
||||||
|
<param name="energy-level" value="300"/>
|
||||||
|
<!--<param name="sound-prefix" value="$${sounds_dir}/en/us/callie"/>-->
|
||||||
|
<param name="muted-sound" value="conference/conf-muted.wav"/>
|
||||||
|
<param name="unmuted-sound" value="conference/conf-unmuted.wav"/>
|
||||||
|
<param name="alone-sound" value="conference/conf-alone.wav"/>
|
||||||
|
<param name="moh-sound" value="$${hold_music}"/>
|
||||||
|
<param name="enter-sound" value="tone_stream://%(200,0,500,600,700)"/>
|
||||||
|
<param name="exit-sound" value="tone_stream://%(500,0,300,200,100,50,25)"/>
|
||||||
|
<param name="kicked-sound" value="conference/conf-kicked.wav"/>
|
||||||
|
<param name="locked-sound" value="conference/conf-locked.wav"/>
|
||||||
|
<param name="is-locked-sound" value="conference/conf-is-locked.wav"/>
|
||||||
|
<param name="is-unlocked-sound" value="conference/conf-is-unlocked.wav"/>
|
||||||
|
<param name="pin-sound" value="conference/conf-pin.wav"/>
|
||||||
|
<param name="bad-pin-sound" value="conference/conf-bad-pin.wav"/>
|
||||||
|
<param name="caller-id-name" value="$${outbound_caller_name}"/>
|
||||||
|
<param name="caller-id-number" value="$${outbound_caller_id}"/>
|
||||||
|
<param name="comfort-noise" value="true"/>
|
||||||
|
</profile>
|
||||||
|
|
||||||
|
<profile name="sla">
|
||||||
|
<param name="domain" value="$${domain}"/>
|
||||||
|
<param name="rate" value="16000"/>
|
||||||
|
<param name="interval" value="20"/>
|
||||||
|
<param name="caller-controls" value="none"/>
|
||||||
|
<param name="energy-level" value="200"/>
|
||||||
|
<param name="moh-sound" value="silence"/>
|
||||||
|
<param name="comfort-noise" value="true"/>
|
||||||
|
</profile>
|
||||||
|
|
||||||
|
</profiles>
|
||||||
|
</configuration>
|
@ -0,0 +1,56 @@
|
|||||||
|
<configuration name="console.conf" description="Console Logger">
|
||||||
|
<!-- pick a file name, a function name or 'all' -->
|
||||||
|
<!-- map as many as you need for specific debugging -->
|
||||||
|
<mappings>
|
||||||
|
<!--
|
||||||
|
name can be a file name, function name or 'all'
|
||||||
|
value is one or more of debug,info,notice,warning,err,crit,alert,all
|
||||||
|
See examples below
|
||||||
|
|
||||||
|
|
||||||
|
The following map is the default, which is all debug levels enabled:
|
||||||
|
<map name="all" value="debug,info,notice,warning,err,crit,alert"/>
|
||||||
|
|
||||||
|
|
||||||
|
Example: the following turns on debugging for error and critical levels only
|
||||||
|
<map name="all" value="err,crit"/>
|
||||||
|
|
||||||
|
NOTE: using map name="all" will override any other settings! If you
|
||||||
|
want a more specific set of console messages then you will need
|
||||||
|
to specify which files and/or functions you want to have debug
|
||||||
|
messages. One option is to turn on just the more critical
|
||||||
|
messages with map name="all", then specify the other types of
|
||||||
|
console messages you want to see for various files and functions.
|
||||||
|
|
||||||
|
Example: turn on ERROR, CRIT, ALERT for all modules, then specify other
|
||||||
|
levels for various modules and functions
|
||||||
|
|
||||||
|
<map name="all" value="err,crit,alert"/>
|
||||||
|
<map name="switch_loadable_module_process" value="all"/>
|
||||||
|
<map name="mod_local_stream.c" value="warning,debug"/>
|
||||||
|
<map name="mod_sndfile.c" value="warning,info,debug"/>
|
||||||
|
-->
|
||||||
|
<map name="all" value="console,debug,info,notice,warning,err,crit,alert"/>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
You can use or modify this sample set of mappings. It turns on higher
|
||||||
|
level messages for all modules and then specifies extra lower level
|
||||||
|
messages for OpenZAP, Sofia, and switch core messages.
|
||||||
|
|
||||||
|
<map name="all" value="warning,err,crit,alert"/>
|
||||||
|
<map name="zap_analog.c" value="all"/>
|
||||||
|
<map name="zap_io.c" value="all"/>
|
||||||
|
<map name="zap_isdn.c" value="all"/>
|
||||||
|
<map name="zap_zt.c" value="all"/>
|
||||||
|
<map name="mod_openzap" value="all"/>
|
||||||
|
<map name="sofia.c" value="notice"/>
|
||||||
|
<map name="switch_core_state_machine.c" value="all"/>
|
||||||
|
|
||||||
|
-->
|
||||||
|
</mappings>
|
||||||
|
<settings>
|
||||||
|
<!-- comment or set to false for no color logging -->
|
||||||
|
<param name="colorize" value="true"/>
|
||||||
|
<param name="loglevel" value="$${console_loglevel}"/>
|
||||||
|
</settings>
|
||||||
|
</configuration>
|
@ -0,0 +1,10 @@
|
|||||||
|
<configuration name="distributor.conf" description="Distributor Configuration">
|
||||||
|
<lists>
|
||||||
|
<!-- every 10 calls to test you will get foo1 once and foo2 9 times...yes NINE TIMES! -->
|
||||||
|
<!-- this is not the same as 100 with 10 and 90 that would do foo1 10 times in a row then foo2 90 times in a row -->
|
||||||
|
<list name="test" total-weight="10">
|
||||||
|
<node name="foo1" weight="1"/>
|
||||||
|
<node name="foo2" weight="9"/>
|
||||||
|
</list>
|
||||||
|
</lists>
|
||||||
|
</configuration>
|
@ -0,0 +1,9 @@
|
|||||||
|
<configuration name="event_socket.conf" description="Socket Client">
|
||||||
|
<settings>
|
||||||
|
<param name="nat-map" value="false"/>
|
||||||
|
<param name="listen-ip" value="127.0.0.1"/>
|
||||||
|
<param name="listen-port" value="8021"/>
|
||||||
|
<param name="password" value="ClueCon"/>
|
||||||
|
<!--<param name="apply-inbound-acl" value="lan"/>-->
|
||||||
|
</settings>
|
||||||
|
</configuration>
|
@ -0,0 +1,6 @@
|
|||||||
|
<configuration name="hash.conf" description="Hash Configuration">
|
||||||
|
<remotes>
|
||||||
|
<!-- List of hosts from where to pull usage data -->
|
||||||
|
<!-- <remote name="Test1" host="10.0.0.10" port="8021" password="ClueCon" interval="1000" /> -->
|
||||||
|
</remotes>
|
||||||
|
</configuration>
|
@ -0,0 +1,17 @@
|
|||||||
|
<configuration name="http_cache.conf" description="HTTP GET cache">
|
||||||
|
<settings>
|
||||||
|
<!-- set to true if you want to enable http:// and https:// formats. Do not use if mod_httapi is also loaded -->
|
||||||
|
<param name="enable-file-formats" value="true"/>
|
||||||
|
<param name="max-urls" value="10000"/>
|
||||||
|
<param name="location" value="$${base_dir}/http_cache"/>
|
||||||
|
<param name="default-max-age" value="86400"/>
|
||||||
|
<param name="prefetch-thread-count" value="8"/>
|
||||||
|
<param name="prefetch-queue-size" value="100"/>
|
||||||
|
<!-- absolute path to CA bundle file -->
|
||||||
|
<param name="ssl-cacert" value="$${base_dir}/conf/cacert.pem"/>
|
||||||
|
<!-- verify certificates -->
|
||||||
|
<param name="ssl-verifypeer" value="true"/>
|
||||||
|
<!-- verify host name matches certificate -->
|
||||||
|
<param name="ssl-verifyhost" value="true"/>
|
||||||
|
</settings>
|
||||||
|
</configuration>
|
@ -0,0 +1,49 @@
|
|||||||
|
<configuration name="local_stream.conf" description="stream files from local dir">
|
||||||
|
<!-- fallback to default if requested moh class isn't found -->
|
||||||
|
<directory name="default" path="$${sounds_dir}/music/8000">
|
||||||
|
<param name="rate" value="8000"/>
|
||||||
|
<param name="shuffle" value="true"/>
|
||||||
|
<param name="channels" value="1"/>
|
||||||
|
<param name="interval" value="20"/>
|
||||||
|
<param name="timer-name" value="soft"/>
|
||||||
|
<!-- list of short files to break in with every so often -->
|
||||||
|
<!--<param name="chime-list" value="file1.wav,file2.wav"/>-->
|
||||||
|
<!-- frequency of break-in (seconds)-->
|
||||||
|
<!--<param name="chime-freq" value="30"/>-->
|
||||||
|
<!-- limit to how many seconds the file will play -->
|
||||||
|
<!--<param name="chime-max" value="500"/>-->
|
||||||
|
</directory>
|
||||||
|
|
||||||
|
<directory name="moh/8000" path="$${sounds_dir}/music/8000">
|
||||||
|
<param name="rate" value="8000"/>
|
||||||
|
<param name="shuffle" value="true"/>
|
||||||
|
<param name="channels" value="1"/>
|
||||||
|
<param name="interval" value="20"/>
|
||||||
|
<param name="timer-name" value="soft"/>
|
||||||
|
</directory>
|
||||||
|
|
||||||
|
<directory name="moh/16000" path="$${sounds_dir}/music/16000">
|
||||||
|
<param name="rate" value="16000"/>
|
||||||
|
<param name="shuffle" value="true"/>
|
||||||
|
<param name="channels" value="1"/>
|
||||||
|
<param name="interval" value="20"/>
|
||||||
|
<param name="timer-name" value="soft"/>
|
||||||
|
</directory>
|
||||||
|
|
||||||
|
<directory name="moh/32000" path="$${sounds_dir}/music/32000">
|
||||||
|
<param name="rate" value="32000"/>
|
||||||
|
<param name="shuffle" value="true"/>
|
||||||
|
<param name="channels" value="1"/>
|
||||||
|
<param name="interval" value="20"/>
|
||||||
|
<param name="timer-name" value="soft"/>
|
||||||
|
</directory>
|
||||||
|
<!--
|
||||||
|
<directory name="moh/48000" path="$${sounds_dir}/music/48000">
|
||||||
|
<param name="rate" value="48000"/>
|
||||||
|
<param name="shuffle" value="true"/>
|
||||||
|
<param name="channels" value="1"/>
|
||||||
|
<param name="interval" value="10"/>
|
||||||
|
<param name="timer-name" value="soft"/>
|
||||||
|
</directory>
|
||||||
|
-->
|
||||||
|
</configuration>
|
@ -0,0 +1,29 @@
|
|||||||
|
<configuration name="logfile.conf" description="File Logging">
|
||||||
|
<settings>
|
||||||
|
<!-- true to auto rotate on HUP, false to open/close -->
|
||||||
|
<param name="rotate-on-hup" value="true"/>
|
||||||
|
</settings>
|
||||||
|
<profiles>
|
||||||
|
<profile name="default">
|
||||||
|
<settings>
|
||||||
|
<!-- File to log to -->
|
||||||
|
<!--<param name="logfile" value="/var/log/freeswitch.log"/>-->
|
||||||
|
<!-- At this length in bytes rotate the log file (0 for never) -->
|
||||||
|
<param name="rollover" value="10485760"/>
|
||||||
|
<!-- Maximum number of log files to keep before wrapping -->
|
||||||
|
<!-- If this parameter is enabled, the log filenames will not include a date stamp -->
|
||||||
|
<!-- <param name="maximum-rotate" value="32"/> -->
|
||||||
|
<!-- Uncomment to prefix all log lines by the session's uuid -->
|
||||||
|
<param name="uuid" value="true" />
|
||||||
|
</settings>
|
||||||
|
<mappings>
|
||||||
|
<!--
|
||||||
|
name can be a file name, function name or 'all'
|
||||||
|
value is one or more of debug,info,notice,warning,err,crit,alert,all
|
||||||
|
Please see comments in console.conf.xml for more information
|
||||||
|
-->
|
||||||
|
<map name="all" value="debug,info,notice,warning,err,crit,alert"/>
|
||||||
|
</mappings>
|
||||||
|
</profile>
|
||||||
|
</profiles>
|
||||||
|
</configuration>
|
@ -0,0 +1,30 @@
|
|||||||
|
<configuration name="lua.conf" description="LUA Configuration">
|
||||||
|
<settings>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Specify local directories that will be searched for LUA modules
|
||||||
|
These entries will be pre-pended to the LUA_CPATH environment variable
|
||||||
|
-->
|
||||||
|
<!-- <param name="module-directory" value="/usr/lib/lua/5.1/?.so"/> -->
|
||||||
|
<!-- <param name="module-directory" value="/usr/local/lib/lua/5.1/?.so"/> -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Specify local directories that will be searched for LUA scripts
|
||||||
|
These entries will be pre-pended to the LUA_PATH environment variable
|
||||||
|
-->
|
||||||
|
<!-- <param name="script-directory" value="/usr/local/lua/?.lua"/> -->
|
||||||
|
<!-- <param name="script-directory" value="$${base_dir}/scripts/?.lua"/> -->
|
||||||
|
|
||||||
|
<!--<param name="xml-handler-script" value="/dp.lua"/>-->
|
||||||
|
<!--<param name="xml-handler-bindings" value="dialplan"/>-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
The following options identifies a lua script that is launched
|
||||||
|
at startup and may live forever in the background.
|
||||||
|
You can define multiple lines, one for each script you
|
||||||
|
need to run.
|
||||||
|
-->
|
||||||
|
<!--<param name="startup-script" value="startup_script_1.lua"/>-->
|
||||||
|
<!--<param name="startup-script" value="startup_script_2.lua"/>-->
|
||||||
|
</settings>
|
||||||
|
</configuration>
|
@ -0,0 +1,6 @@
|
|||||||
|
<configuration name="memcache.conf" description="memcache Configuration">
|
||||||
|
<settings>
|
||||||
|
<!-- comma sep list of servers: eg: localhost,otherhost:port,anotherone -->
|
||||||
|
<param name="memcache-servers" value="localhost"/>
|
||||||
|
</settings>
|
||||||
|
</configuration>
|
@ -0,0 +1,74 @@
|
|||||||
|
<configuration name="modules.conf" description="Modules">
|
||||||
|
<modules>
|
||||||
|
<!-- Loggers -->
|
||||||
|
<load module="mod_console"/>
|
||||||
|
<load module="mod_logfile"/>
|
||||||
|
|
||||||
|
<!-- Event Handlers -->
|
||||||
|
<load module="mod_cdr_csv"/>
|
||||||
|
<load module="mod_event_socket"/>
|
||||||
|
<load module="mod_rayo"/>
|
||||||
|
|
||||||
|
<!-- Endpoints -->
|
||||||
|
<load module="mod_sofia"/>
|
||||||
|
<load module="mod_loopback"/>
|
||||||
|
|
||||||
|
<!-- Applications -->
|
||||||
|
<load module="mod_commands"/>
|
||||||
|
<load module="mod_conference"/>
|
||||||
|
<load module="mod_dptools"/>
|
||||||
|
<load module="mod_expr"/>
|
||||||
|
<load module="mod_hash"/>
|
||||||
|
<!--<load module="mod_distributor"/>-->
|
||||||
|
<load module="mod_esf"/>
|
||||||
|
<load module="mod_fsv"/>
|
||||||
|
<load module="mod_http_cache"/>
|
||||||
|
|
||||||
|
<!-- Dialplan Interfaces -->
|
||||||
|
<load module="mod_dialplan_xml"/>
|
||||||
|
|
||||||
|
<!-- Codec Interfaces -->
|
||||||
|
<load module="mod_spandsp"/>
|
||||||
|
<load module="mod_celt"/>
|
||||||
|
<load module="mod_speex"/>
|
||||||
|
<load module="mod_opus"/>
|
||||||
|
<load module="mod_ilbc"/>
|
||||||
|
|
||||||
|
<!-- File Format Interfaces -->
|
||||||
|
<load module="mod_sndfile"/>
|
||||||
|
<load module="mod_native_file"/>
|
||||||
|
<load module="mod_shell_stream"/>
|
||||||
|
<!--For icecast/mp3 streams/files-->
|
||||||
|
<load module="mod_shout"/>
|
||||||
|
<!--For local streams (play all the files in a directory)-->
|
||||||
|
<load module="mod_local_stream"/>
|
||||||
|
<load module="mod_tone_stream"/>
|
||||||
|
<load module="mod_ssml"/>
|
||||||
|
|
||||||
|
<!-- Languages -->
|
||||||
|
<load module="mod_lua"/>
|
||||||
|
|
||||||
|
<!-- ASR /TTS -->
|
||||||
|
<load module="mod_flite"/>
|
||||||
|
<load module="mod_pocketsphinx"/>
|
||||||
|
<!-- <load module="mod_tts_commandline"/> -->
|
||||||
|
|
||||||
|
<!-- Say -->
|
||||||
|
<!--load module="mod_say_de"/-->
|
||||||
|
<!--load module="mod_say_es"/-->
|
||||||
|
<!--load module="mod_say_fr"/-->
|
||||||
|
<!--load module="mod_say_hr"/-->
|
||||||
|
<!--load module="mod_say_it"/-->
|
||||||
|
<!--load module="mod_say_nl"/-->
|
||||||
|
<!--load module="mod_say_ru"/-->
|
||||||
|
<!--load module="mod_say_zh"/-->
|
||||||
|
<load module="mod_say_en"/>
|
||||||
|
<!--load module="mod_say_fa"/-->
|
||||||
|
<!--load module="mod_say_he"/-->
|
||||||
|
<!--load module="mod_say_hu"/-->
|
||||||
|
<!--load module="mod_say_ja"/-->
|
||||||
|
<!--load module="mod_say_pt"/-->
|
||||||
|
<!--load module="mod_say_th"/-->
|
||||||
|
|
||||||
|
</modules>
|
||||||
|
</configuration>
|
@ -0,0 +1,12 @@
|
|||||||
|
<configuration name="pocketsphinx.conf" description="PocketSphinx ASR Configuration">
|
||||||
|
<settings>
|
||||||
|
<param name="threshold" value="400"/>
|
||||||
|
<param name="silence-hits" value="25"/>
|
||||||
|
<param name="listen-hits" value="1"/>
|
||||||
|
<param name="auto-reload" value="true"/>
|
||||||
|
<!--<param name="language-weight" value="1"/>-->
|
||||||
|
<!--<param name="narrowband-model" value="communicator"/>-->
|
||||||
|
<!--<param name="wideband-model" value="wsj1"/>-->
|
||||||
|
<!--<param name="dictionary" value="default.dic"/>-->
|
||||||
|
</settings>
|
||||||
|
</configuration>
|
@ -0,0 +1,4 @@
|
|||||||
|
<configuration name="post_load_modules.conf" description="Modules">
|
||||||
|
<modules>
|
||||||
|
</modules>
|
||||||
|
</configuration>
|
@ -0,0 +1,7 @@
|
|||||||
|
<configuration name="presence_map.conf" description="PRESENCE MAP">
|
||||||
|
<domains>
|
||||||
|
<domain name="$${domain}">
|
||||||
|
<exten regex="3\d+" proto="conf"/>
|
||||||
|
</domain>
|
||||||
|
</domains>
|
||||||
|
</configuration>
|
@ -0,0 +1,43 @@
|
|||||||
|
<configuration name="rayo.conf" description="Rayo server config">
|
||||||
|
|
||||||
|
<!-- rayo params -->
|
||||||
|
<settings>
|
||||||
|
<param name="max-idle-sec" value="300"/>
|
||||||
|
<param name="mixer-conf-profile" value="sla"/>
|
||||||
|
</settings>
|
||||||
|
|
||||||
|
<!-- record component params -->
|
||||||
|
<record>
|
||||||
|
<param name="record-file-prefix" value="$${recordings_dir}/"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- domain to use in from attribute of client messages -->
|
||||||
|
<domain name="$${rayo_domain_name}" shared-secret="ClueCon">
|
||||||
|
|
||||||
|
<!-- Listeners for new Rayo client connections -->
|
||||||
|
<!--listen type="c2s" port="5222" address="$${local_ip_v4}" acl="rayo-clients"/-->
|
||||||
|
<listen type="c2s" port="5222" address="$${rayo_ip}" acl=""/>
|
||||||
|
|
||||||
|
<!-- Listeners for new server connections -->
|
||||||
|
<!--listen type="s2s" port="5269" address="$${local_ip_v4}" acl="rayo-servers"/-->
|
||||||
|
|
||||||
|
<!-- servers to connect to -->
|
||||||
|
<!--connect port="5269" address="node.example.com" domain="example.com"/-->
|
||||||
|
|
||||||
|
<!-- Authorized users -->
|
||||||
|
<users>
|
||||||
|
<user name="usera" password="1"/>
|
||||||
|
</users>
|
||||||
|
</domain>
|
||||||
|
|
||||||
|
<!-- URI mapping to endpoint / gateway -->
|
||||||
|
<dial-gateways>
|
||||||
|
<dial-gateway uriprefix="default" dialprefix="sofia/gateway/outbound/" strip="0"/>
|
||||||
|
<dial-gateway uriprefix="sip:" dialprefix="sofia/external/" strip="0"/>
|
||||||
|
<dial-gateway uriprefix="tel:" dialprefix="sofia/gateway/outbound/" strip="4"/>
|
||||||
|
<!-- pass through user and sofia unaltered -->
|
||||||
|
<dial-gateway uriprefix="user" dialprefix="" strip=""/>
|
||||||
|
<dial-gateway uriprefix="sofia" dialprefix="" strip=""/>
|
||||||
|
</dial-gateways>
|
||||||
|
|
||||||
|
</configuration>
|
@ -0,0 +1,8 @@
|
|||||||
|
<configuration name="shout.conf" description="mod shout config">
|
||||||
|
<settings>
|
||||||
|
<!-- Don't change these unless you are insane -->
|
||||||
|
<!--<param name="decoder" value="i586"/>-->
|
||||||
|
<!--<param name="volume" value=".1"/>-->
|
||||||
|
<!--<param name="outscale" value="8192"/>-->
|
||||||
|
</settings>
|
||||||
|
</configuration>
|
@ -0,0 +1,19 @@
|
|||||||
|
<configuration name="sofia.conf" description="sofia Endpoint">
|
||||||
|
|
||||||
|
<global_settings>
|
||||||
|
<param name="log-level" value="0"/>
|
||||||
|
<!-- <param name="auto-restart" value="false"/> -->
|
||||||
|
<param name="debug-presence" value="0"/>
|
||||||
|
<!-- <param name="capture-server" value="udp:homer.domain.com:5060"/> -->
|
||||||
|
</global_settings>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
The rabbit hole goes deep. This includes all the
|
||||||
|
profiles in the sip_profiles directory that is up
|
||||||
|
one level from this directory.
|
||||||
|
-->
|
||||||
|
<profiles>
|
||||||
|
<X-PRE-PROCESS cmd="include" data="../sip_profiles/*.xml"/>
|
||||||
|
</profiles>
|
||||||
|
|
||||||
|
</configuration>
|
@ -0,0 +1,113 @@
|
|||||||
|
<configuration name="spandsp.conf" description="SpanDSP config">
|
||||||
|
<modem-settings>
|
||||||
|
<!--
|
||||||
|
total-modems set to N will create that many soft-modems.
|
||||||
|
If you use them with Hylafax you need the following for each one numbered 0..N:
|
||||||
|
|
||||||
|
1) A line like this in /etc/inittab:
|
||||||
|
|
||||||
|
f0:2345:respawn:/usr/lib/fax/faxgetty /dev/FS0
|
||||||
|
|
||||||
|
2) copy conf/config.FS0 to /var/spool/hylafax/etc (or wherver the appropriate dir is on your system)
|
||||||
|
|
||||||
|
Subsequent modem configs would incrment the 0 to 1 and so on.
|
||||||
|
|
||||||
|
-->
|
||||||
|
<param name="total-modems" value="0"/>
|
||||||
|
|
||||||
|
<!-- Default context and dialplan to use on inbound calls from the modems -->
|
||||||
|
<param name="context" value="default"/>
|
||||||
|
<param name="dialplan" value="XML"/>
|
||||||
|
|
||||||
|
<!-- Extra tracing for debugging -->
|
||||||
|
<param name="verbose" value="false"/>
|
||||||
|
</modem-settings>
|
||||||
|
|
||||||
|
<fax-settings>
|
||||||
|
<param name="use-ecm" value="true"/>
|
||||||
|
<param name="verbose" value="false"/>
|
||||||
|
<param name="disable-v17" value="false"/>
|
||||||
|
<param name="ident" value="SpanDSP Fax Ident"/>
|
||||||
|
<param name="header" value="SpanDSP Fax Header"/>
|
||||||
|
|
||||||
|
<param name="spool-dir" value="/tmp"/>
|
||||||
|
<param name="file-prefix" value="faxrx"/>
|
||||||
|
</fax-settings>
|
||||||
|
|
||||||
|
<descriptors>
|
||||||
|
|
||||||
|
<!-- These tones are defined in Annex to ITU Operational Bulletin No. 781 - 1.II.2003 -->
|
||||||
|
<!-- Various Tones Used in National Networks (According to ITU-T Recommendation E.180)(03/1998) -->
|
||||||
|
|
||||||
|
<!-- North America -->
|
||||||
|
<descriptor name="1">
|
||||||
|
<tone name="CED_TONE">
|
||||||
|
<element freq1="2100" freq2="0" min="700" max="0"/>
|
||||||
|
</tone>
|
||||||
|
<tone name="SIT">
|
||||||
|
<element freq1="950" freq2="0" min="256" max="400"/>
|
||||||
|
<element freq1="1400" freq2="0" min="256" max="400"/>
|
||||||
|
<element freq1="1800" freq2="0" min="256" max="400"/>
|
||||||
|
</tone>
|
||||||
|
<tone name="RING_TONE" description="North America ring">
|
||||||
|
<element freq1="440" freq2="480" min="1200" max="0"/>
|
||||||
|
</tone>
|
||||||
|
<tone name="REORDER_TONE">
|
||||||
|
<element freq1="480" freq2="620" min="224" max="316"/>
|
||||||
|
<element freq1="0" freq2="0" min="168" max="352"/>
|
||||||
|
<element freq1="480" freq2="620" min="224" max="316"/>
|
||||||
|
</tone>
|
||||||
|
<tone name="BUSY_TONE">
|
||||||
|
<element freq1="480" freq2="620" min="464" max="536"/>
|
||||||
|
<element freq1="0" freq2="0" min="464" max="572"/>
|
||||||
|
<element freq1="480" freq2="620" min="464" max="536"/>
|
||||||
|
</tone>
|
||||||
|
</descriptor>
|
||||||
|
|
||||||
|
<!-- United Kingdom -->
|
||||||
|
<descriptor name="44">
|
||||||
|
<tone name="CED_TONE">
|
||||||
|
<element freq1="2100" freq2="0" min="500" max="0"/>
|
||||||
|
</tone>
|
||||||
|
<tone name="SIT">
|
||||||
|
<element freq1="950" freq2="0" min="256" max="400"/>
|
||||||
|
<element freq1="1400" freq2="0" min="256" max="400"/>
|
||||||
|
<element freq1="1800" freq2="0" min="256" max="400"/>
|
||||||
|
</tone>
|
||||||
|
<tone name="REORDER_TONE">
|
||||||
|
<element freq1="400" freq2="0" min="368" max="416"/>
|
||||||
|
<element freq1="0" freq2="0" min="336" max="368"/>
|
||||||
|
<element freq1="400" freq2="0" min="256" max="288"/>
|
||||||
|
<element freq1="0" freq2="0" min="512" max="544"/>
|
||||||
|
</tone>
|
||||||
|
<tone name="BUSY_TONE">
|
||||||
|
<element freq1="400" freq2="0" min="352" max="384"/>
|
||||||
|
<element freq1="0" freq2="0" min="352" max="384"/>
|
||||||
|
<element freq1="400" freq2="0" min="352" max="384"/>
|
||||||
|
<element freq1="0" freq2="0" min="352" max="384"/>
|
||||||
|
</tone>
|
||||||
|
</descriptor>
|
||||||
|
|
||||||
|
<!-- Germany -->
|
||||||
|
<descriptor name="49">
|
||||||
|
<tone name="CED_TONE">
|
||||||
|
<element freq1="2100" freq2="0" min="500" max="0"/>
|
||||||
|
</tone>
|
||||||
|
<tone name="SIT">
|
||||||
|
<element freq1="900" freq2="0" min="256" max="400"/>
|
||||||
|
<element freq1="1400" freq2="0" min="256" max="400"/>
|
||||||
|
<element freq1="1800" freq2="0" min="256" max="400"/>
|
||||||
|
</tone>
|
||||||
|
<tone name="REORDER_TONE">
|
||||||
|
<element freq1="425" freq2="0" min="224" max="272"/>
|
||||||
|
<element freq1="0" freq2="0" min="224" max="272"/>
|
||||||
|
</tone>
|
||||||
|
<tone name="BUSY_TONE">
|
||||||
|
<element freq1="425" freq2="0" min="464" max="516"/>
|
||||||
|
<element freq1="0" freq2="0" min="464" max="516"/>
|
||||||
|
</tone>
|
||||||
|
</descriptor>
|
||||||
|
</descriptors>
|
||||||
|
|
||||||
|
</configuration>
|
||||||
|
|
@ -0,0 +1,26 @@
|
|||||||
|
<configuration name="ssml.conf" description="SSML parser config">
|
||||||
|
|
||||||
|
<!-- voices in order of preference -->
|
||||||
|
<tts-voices>
|
||||||
|
<voice name="slt" language="en-US" gender="female" prefix="tts://flite|slt|"/>
|
||||||
|
<voice name="kal" language="en-US" gender="male" prefix="tts://flite|kal|"/>
|
||||||
|
<voice name="rms" language="en-US" gender="male" prefix="tts://flite|rms|"/>
|
||||||
|
<voice name="awb" language="en-US" gender="male" prefix="tts://flite|awb|"/>
|
||||||
|
</tts-voices>
|
||||||
|
|
||||||
|
<!-- maps ISO language to say module -->
|
||||||
|
<language-map>
|
||||||
|
<language iso="en-US" say-module="en" language="en"/>
|
||||||
|
</language-map>
|
||||||
|
|
||||||
|
<!-- say voices in order of preference -->
|
||||||
|
<say-voices>
|
||||||
|
<voice name="callie" language="en-US" gender="female" prefix="$${sounds_dir}/en/us/callie/"/>
|
||||||
|
</say-voices>
|
||||||
|
|
||||||
|
<!-- map interpret-as to say macros -->
|
||||||
|
<macros>
|
||||||
|
<macro name="cardinal" method="pronounced" type="number"/>
|
||||||
|
</macros>
|
||||||
|
|
||||||
|
</configuration>
|
@ -0,0 +1,168 @@
|
|||||||
|
<configuration name="switch.conf" description="Core Configuration">
|
||||||
|
|
||||||
|
<cli-keybindings>
|
||||||
|
<key name="1" value="help"/>
|
||||||
|
<key name="2" value="status"/>
|
||||||
|
<key name="3" value="show channels"/>
|
||||||
|
<key name="4" value="show calls"/>
|
||||||
|
<key name="5" value="sofia status"/>
|
||||||
|
<key name="6" value="reloadxml"/>
|
||||||
|
<key name="7" value="console loglevel 0"/>
|
||||||
|
<key name="8" value="console loglevel 7"/>
|
||||||
|
<key name="9" value="sofia status profile internal"/>
|
||||||
|
<key name="10" value="sofia profile internal siptrace on"/>
|
||||||
|
<key name="11" value="sofia profile internal siptrace off"/>
|
||||||
|
<key name="12" value="version"/>
|
||||||
|
</cli-keybindings>
|
||||||
|
|
||||||
|
<default-ptimes>
|
||||||
|
<!-- Set this to override the 20ms assumption of various codecs in the sdp with no ptime defined -->
|
||||||
|
<!-- <codec name="G729" ptime="40"/> -->
|
||||||
|
</default-ptimes>
|
||||||
|
|
||||||
|
<settings>
|
||||||
|
<!-- Colorize the Console -->
|
||||||
|
<param name="colorize-console" value="true"/>
|
||||||
|
|
||||||
|
<!-- Run the timer at 20ms by default and drop down as needed unless you set 1m-timer=true which was previous default -->
|
||||||
|
<!-- <param name="1ms-timer" value="true"/> -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Set the Switch Name for HA environments.
|
||||||
|
When setting the switch name, it will override the system hostname for all DB and CURL requests
|
||||||
|
allowing cluster environments such as RHCS to have identical FreeSWITCH configurations but run
|
||||||
|
as different hostnames.
|
||||||
|
-->
|
||||||
|
<!-- <param name="switchname" value="freeswitch"/> -->
|
||||||
|
|
||||||
|
<!-- Maximum number of simultaneous DB handles open -->
|
||||||
|
<param name="max-db-handles" value="50"/>
|
||||||
|
<!-- Maximum number of seconds to wait for a new DB handle before failing -->
|
||||||
|
<param name="db-handle-timeout" value="10"/>
|
||||||
|
|
||||||
|
<!-- Minimum idle CPU before refusing calls -->
|
||||||
|
<!-- <param name="min-idle-cpu" value="25"/> -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Max number of sessions to allow at any given time.
|
||||||
|
|
||||||
|
NOTICE: If you're driving 28 T1's in a single box you should set this to 644*2 or 1288
|
||||||
|
this will ensure you're able to use the entire DS3 without a problem. Otherwise you'll
|
||||||
|
be 144 channels short of always filling that DS3 up which can translate into waste.
|
||||||
|
-->
|
||||||
|
<param name="max-sessions" value="1000"/>
|
||||||
|
<!--Most channels to create per second -->
|
||||||
|
<param name="sessions-per-second" value="30"/>
|
||||||
|
<!-- Default Global Log Level - value is one of debug,info,notice,warning,err,crit,alert -->
|
||||||
|
<param name="loglevel" value="debug"/>
|
||||||
|
|
||||||
|
<!-- Set the core DEBUG level (0-10) -->
|
||||||
|
<!-- <param name="debug-level" value="10"/> -->
|
||||||
|
|
||||||
|
<!-- SQL Buffer length within rage of 32k to 10m -->
|
||||||
|
<!-- <param name="sql-buffer-len" value="1m"/> -->
|
||||||
|
<!-- Maximum SQL Buffer length must be greater than sql-buffer-len -->
|
||||||
|
<!-- <param name="max-sql-buffer-len" value="2m"/> -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
The min-dtmf-duration specifies the minimum DTMF duration to use on
|
||||||
|
outgoing events. Events shorter than this will be increased in duration
|
||||||
|
to match min_dtmf_duration. You cannot configure a dtmf duration on a
|
||||||
|
profile that is less than this setting. You may increase this value,
|
||||||
|
but cannot set it lower than 400. This value cannot exceed
|
||||||
|
max-dtmf-duration. -->
|
||||||
|
<!-- <param name="min-dtmf-duration" value="400"/> -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
The max-dtmf-duration caps the playout of a DTMF event at the specified
|
||||||
|
duration. Events exceeding this duration will be truncated to this
|
||||||
|
duration. You cannot configure a duration on a profile that exceeds
|
||||||
|
this setting. This setting can be lowered, but cannot exceed 192000.
|
||||||
|
This setting cannot be set lower than min_dtmf_duration. -->
|
||||||
|
<!-- <param name="max-dtmf-duration" value="192000"/> -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
The default_dtmf_duration specifies the DTMF duration to use on
|
||||||
|
originated DTMF events or on events that are received without a
|
||||||
|
duration specified. This value can be increased or lowered. This
|
||||||
|
value is lower-bounded by min_dtmf_duration and upper-bounded by
|
||||||
|
max-dtmf-duration\. -->
|
||||||
|
<!-- <param name="default-dtmf-duration" value="2000"/> -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
If you want to send out voicemail notifications via Windows you'll need to change the mailer-app
|
||||||
|
variable to the setting below:
|
||||||
|
|
||||||
|
<param name="mailer-app" value="msmtp"/>
|
||||||
|
|
||||||
|
Do not change mailer-app-args.
|
||||||
|
You will also need to download a sendmail clone for Windows (msmtp). This version works without issue:
|
||||||
|
http://msmtp.sourceforge.net/index.html. Download and copy the .exe to %winddir%\system32.
|
||||||
|
You'll need to create a small config file for smtp credentials (host name, authentication, tls, etc.) in
|
||||||
|
%USERPROFILE%\Application Data\ called "msmtprc.txt". Below is a sample copy of this file:
|
||||||
|
|
||||||
|
###################################
|
||||||
|
# The SMTP server of the provider.
|
||||||
|
account provider
|
||||||
|
host smtp.myisp.com
|
||||||
|
from john@myisp.com
|
||||||
|
auth login
|
||||||
|
user johndoe
|
||||||
|
password mypassword
|
||||||
|
|
||||||
|
# Set a default account
|
||||||
|
account default : provider
|
||||||
|
###################################
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<param name="mailer-app" value="sendmail"/>
|
||||||
|
<param name="mailer-app-args" value="-t"/>
|
||||||
|
<param name="dump-cores" value="yes"/>
|
||||||
|
|
||||||
|
<!-- Enable verbose channel events to include every detail about a channel on every event -->
|
||||||
|
<!-- <param name="verbose-channel-events" value="no"/> -->
|
||||||
|
|
||||||
|
<!-- Enable clock nanosleep -->
|
||||||
|
<!-- <param name="enable-clock-nanosleep" value="true"/> -->
|
||||||
|
|
||||||
|
<!-- Enable monotonic timing -->
|
||||||
|
<!-- <param name="enable-monotonic-timing" value="true"/> -->
|
||||||
|
|
||||||
|
<!-- NEEDS DOCUMENTATION -->
|
||||||
|
<!-- <param name="enable-softtimer-timerfd" value="true"/> -->
|
||||||
|
<!-- <param name="enable-cond-yield" value="true"/> -->
|
||||||
|
<!-- <param name="enable-timer-matrix" value="true"/> -->
|
||||||
|
<!-- <param name="threaded-system-exec" value="true"/> -->
|
||||||
|
<!-- <param name="tipping-point" value="0"/> -->
|
||||||
|
<!-- <param name="timer-affinity" value="disabled"/> -->
|
||||||
|
<!-- NEEDS DOCUMENTATION -->
|
||||||
|
|
||||||
|
<!-- RTP port range -->
|
||||||
|
<!-- <param name="rtp-start-port" value="16384"/> -->
|
||||||
|
<!-- <param name="rtp-end-port" value="32768"/> -->
|
||||||
|
|
||||||
|
<param name="rtp-enable-zrtp" value="true"/>
|
||||||
|
|
||||||
|
<!-- <param name="core-db-dsn" value="pgsql://hostaddr=127.0.0.1 dbname=freeswitch user=freeswitch password='' options='-c client_min_messages=NOTICE' application_name='freeswitch'" /> -->
|
||||||
|
<!-- <param name="core-db-dsn" value="dsn:username:password" /> -->
|
||||||
|
<!--
|
||||||
|
Allow to specify the sqlite db at a different location (In this example, move it to ramdrive for
|
||||||
|
better performance on most linux distro (note, you loose the data if you reboot))
|
||||||
|
-->
|
||||||
|
<!-- <param name="core-db-name" value="/dev/shm/core.db" /> -->
|
||||||
|
|
||||||
|
<!-- The system will create all the db schemas automatically, set this to false to avoid this behaviour -->
|
||||||
|
<!-- <param name="auto-create-schemas" value="true"/> -->
|
||||||
|
<!-- <param name="auto-clear-sql" value="true"/> -->
|
||||||
|
<!-- <param name="enable-early-hangup" value="true"/> -->
|
||||||
|
|
||||||
|
<!-- <param name="core-dbtype" value="MSSQL"/> -->
|
||||||
|
|
||||||
|
<!-- Allow multiple registrations to the same account in the central registration table -->
|
||||||
|
<!-- <param name="multiple-registrations" value="true"/> -->
|
||||||
|
|
||||||
|
</settings>
|
||||||
|
|
||||||
|
</configuration>
|
||||||
|
|
@ -0,0 +1,551 @@
|
|||||||
|
<configuration name="timezones.conf" description="Timezones">
|
||||||
|
<timezones>
|
||||||
|
<zone name="Africa/Abidjan" value="GMT0" />
|
||||||
|
<zone name="Africa/Accra" value="GMT0" />
|
||||||
|
<zone name="Africa/Addis_Ababa" value="EAT-3" />
|
||||||
|
<zone name="Africa/Algiers" value="CET-1" />
|
||||||
|
<zone name="Africa/Asmara" value="EAT-3" />
|
||||||
|
<zone name="Africa/Asmera" value="EAT-3" />
|
||||||
|
<zone name="Africa/Bamako" value="GMT0" />
|
||||||
|
<zone name="Africa/Bangui" value="WAT-1" />
|
||||||
|
<zone name="Africa/Banjul" value="GMT0" />
|
||||||
|
<zone name="Africa/Bissau" value="GMT0" />
|
||||||
|
<zone name="Africa/Blantyre" value="CAT-2" />
|
||||||
|
<zone name="Africa/Brazzaville" value="WAT-1" />
|
||||||
|
<zone name="Africa/Bujumbura" value="CAT-2" />
|
||||||
|
<zone name="Africa/Cairo" value="EET-2EEST,M4.5.5/1,M9.5.5/3" />
|
||||||
|
<zone name="Africa/Casablanca" value="WET0" />
|
||||||
|
<zone name="Africa/Ceuta" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Africa/Conakry" value="GMT0" />
|
||||||
|
<zone name="Africa/Dakar" value="GMT0" />
|
||||||
|
<zone name="Africa/Dar_es_Salaam" value="EAT-3" />
|
||||||
|
<zone name="Africa/Djibouti" value="EAT-3" />
|
||||||
|
<zone name="Africa/Douala" value="WAT-1" />
|
||||||
|
<zone name="Africa/El_Aaiun" value="WET0" />
|
||||||
|
<zone name="Africa/Freetown" value="GMT0" />
|
||||||
|
<zone name="Africa/Gaborone" value="CAT-2" />
|
||||||
|
<zone name="Africa/Harare" value="CAT-2" />
|
||||||
|
<zone name="Africa/Johannesburg" value="SAST-2" />
|
||||||
|
<zone name="Africa/Kampala" value="EAT-3" />
|
||||||
|
<zone name="Africa/Khartoum" value="EAT-3" />
|
||||||
|
<zone name="Africa/Kigali" value="CAT-2" />
|
||||||
|
<zone name="Africa/Kinshasa" value="WAT-1" />
|
||||||
|
<zone name="Africa/Lagos" value="WAT-1" />
|
||||||
|
<zone name="Africa/Libreville" value="WAT-1" />
|
||||||
|
<zone name="Africa/Lome" value="GMT0" />
|
||||||
|
<zone name="Africa/Luanda" value="WAT-1" />
|
||||||
|
<zone name="Africa/Lubumbashi" value="CAT-2" />
|
||||||
|
<zone name="Africa/Lusaka" value="CAT-2" />
|
||||||
|
<zone name="Africa/Malabo" value="WAT-1" />
|
||||||
|
<zone name="Africa/Maputo" value="CAT-2" />
|
||||||
|
<zone name="Africa/Maseru" value="SAST-2" />
|
||||||
|
<zone name="Africa/Mbabane" value="SAST-2" />
|
||||||
|
<zone name="Africa/Mogadishu" value="EAT-3" />
|
||||||
|
<zone name="Africa/Monrovia" value="GMT0" />
|
||||||
|
<zone name="Africa/Nairobi" value="EAT-3" />
|
||||||
|
<zone name="Africa/Ndjamena" value="WAT-1" />
|
||||||
|
<zone name="Africa/Niamey" value="WAT-1" />
|
||||||
|
<zone name="Africa/Nouakchott" value="GMT0" />
|
||||||
|
<zone name="Africa/Ouagadougou" value="GMT0" />
|
||||||
|
<zone name="Africa/Porto-Novo" value="WAT-1" />
|
||||||
|
<zone name="Africa/Sao_Tome" value="GMT0" />
|
||||||
|
<zone name="Africa/Timbuktu" value="GMT0" />
|
||||||
|
<zone name="Africa/Tripoli" value="EET-2" />
|
||||||
|
<zone name="Africa/Tunis" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Africa/Windhoek" value="WAT-1WAST,M9.1.0,M4.1.0" />
|
||||||
|
|
||||||
|
<zone name="America/Adak" value="HAST10HADT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Anchorage" value="AKST9AKDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Anguilla" value="AST4" />
|
||||||
|
<zone name="America/Antigua" value="AST4" />
|
||||||
|
<zone name="America/Araguaina" value="BRT3" />
|
||||||
|
<zone name="America/Argentina/Buenos_Aires" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||||
|
<zone name="America/Argentina/Catamarca" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||||
|
<zone name="America/Argentina/ComodRivadavia" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||||
|
<zone name="America/Argentina/Cordoba" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||||
|
<zone name="America/Argentina/Jujuy" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||||
|
<zone name="America/Argentina/La_Rioja" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||||
|
<zone name="America/Argentina/Mendoza" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||||
|
<zone name="America/Argentina/Rio_Gallegos" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||||
|
<zone name="America/Argentina/San_Juan" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||||
|
<zone name="America/Argentina/San_Luis" value="ART3" />
|
||||||
|
<zone name="America/Argentina/Tucuman" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||||
|
<zone name="America/Argentina/Ushuaia" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||||
|
<zone name="America/Aruba" value="AST4" />
|
||||||
|
<zone name="America/Asuncion" value="PYT4PYST,M10.3.0/0,M3.2.0/0" />
|
||||||
|
<zone name="America/Atikokan" value="EST5" />
|
||||||
|
<zone name="America/Atka" value="HAST10HADT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Bahia" value="BRT3" />
|
||||||
|
<zone name="America/Barbados" value="AST4" />
|
||||||
|
<zone name="America/Belem" value="BRT3" />
|
||||||
|
<zone name="America/Belize" value="CST6" />
|
||||||
|
<zone name="America/Blanc-Sablon" value="AST4" />
|
||||||
|
<zone name="America/Boa_Vista" value="AMT4" />
|
||||||
|
<zone name="America/Bogota" value="COT5" />
|
||||||
|
<zone name="America/Boise" value="MST7MDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Buenos_Aires" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||||
|
<zone name="America/Cambridge_Bay" value="MST7MDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Campo_Grande" value="AMT4AMST,M10.2.0/0,M2.3.0/0" />
|
||||||
|
<zone name="America/Cancun" value="CST6CDT,M4.1.0,M10.5.0" />
|
||||||
|
<zone name="America/Caracas" value="VET4:30" />
|
||||||
|
<zone name="America/Catamarca" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||||
|
<zone name="America/Cayenne" value="GFT3" />
|
||||||
|
<zone name="America/Cayman" value="EST5" />
|
||||||
|
<zone name="America/Chicago" value="CST6CDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Chihuahua" value="MST7MDT,M4.1.0,M10.5.0" />
|
||||||
|
<zone name="America/Coral_Harbour" value="EST5" />
|
||||||
|
<zone name="America/Cordoba" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||||
|
<zone name="America/Costa_Rica" value="CST6" />
|
||||||
|
<zone name="America/Cuiaba" value="AMT4AMST,M10.2.0/0,M2.3.0/0" />
|
||||||
|
<zone name="America/Curacao" value="AST4" />
|
||||||
|
<zone name="America/Danmarkshavn" value="GMT0" />
|
||||||
|
<zone name="America/Dawson" value="PST8PDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Dawson_Creek" value="MST7" />
|
||||||
|
<zone name="America/Denver" value="MST7MDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Detroit" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Dominica" value="AST4" />
|
||||||
|
<zone name="America/Edmonton" value="MST7MDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Eirunepe" value="ACT5" />
|
||||||
|
<zone name="America/El_Salvador" value="CST6" />
|
||||||
|
<zone name="America/Ensenada" value="PST8PDT,M4.1.0,M10.5.0" />
|
||||||
|
<zone name="America/Fortaleza" value="BRT3" />
|
||||||
|
<zone name="America/Fort_Wayne" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Glace_Bay" value="AST4ADT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Godthab" value="WGST" />
|
||||||
|
<zone name="America/Goose_Bay" value="AST4ADT,M3.2.0/0:01,M11.1.0/0:01" />
|
||||||
|
<zone name="America/Grand_Turk" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Grenada" value="AST4" />
|
||||||
|
<zone name="America/Guadeloupe" value="AST4" />
|
||||||
|
<zone name="America/Guatemala" value="CST6" />
|
||||||
|
<zone name="America/Guayaquil" value="ECT5" />
|
||||||
|
<zone name="America/Guyana" value="GYT4" />
|
||||||
|
<zone name="America/Halifax" value="AST4ADT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Havana" value="CST5CDT,M3.3.0/0,M10.5.0/1" />
|
||||||
|
<zone name="America/Hermosillo" value="MST7" />
|
||||||
|
<zone name="America/Indiana/Indianapolis" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Indiana/Knox" value="CST6CDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Indiana/Marengo" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Indiana/Petersburg" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Indianapolis" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Indiana/Tell_City" value="CST6CDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Indiana/Vevay" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Indiana/Vincennes" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Indiana/Winamac" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Inuvik" value="MST7MDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Iqaluit" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Jamaica" value="EST5" />
|
||||||
|
<zone name="America/Jujuy" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||||
|
<zone name="America/Juneau" value="AKST9AKDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Kentucky/Louisville" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Kentucky/Monticello" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Knox_IN" value="CST6CDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/La_Paz" value="BOT4" />
|
||||||
|
<zone name="America/Lima" value="PET5" />
|
||||||
|
<zone name="America/Los_Angeles" value="PST8PDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Louisville" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Maceio" value="BRT3" />
|
||||||
|
<zone name="America/Managua" value="CST6" />
|
||||||
|
<zone name="America/Manaus" value="AMT4" />
|
||||||
|
<zone name="America/Marigot" value="AST4" />
|
||||||
|
<zone name="America/Martinique" value="AST4" />
|
||||||
|
<zone name="America/Mazatlan" value="MST7MDT,M4.1.0,M10.5.0" />
|
||||||
|
<zone name="America/Mendoza" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||||
|
<zone name="America/Menominee" value="CST6CDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Merida" value="CST6CDT,M4.1.0,M10.5.0" />
|
||||||
|
<zone name="America/Mexico_City" value="CST6CDT,M4.1.0,M10.5.0" />
|
||||||
|
<zone name="America/Miquelon" value="PMST3PMDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Moncton" value="AST4ADT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Monterrey" value="CST6CDT,M4.1.0,M10.5.0" />
|
||||||
|
<zone name="America/Montevideo" value="UYT3UYST,M10.1.0,M3.2.0" />
|
||||||
|
<zone name="America/Montreal" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Montserrat" value="AST4" />
|
||||||
|
<zone name="America/Nassau" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/New_York" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Nipigon" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Nome" value="AKST9AKDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Noronha" value="FNT2" />
|
||||||
|
<zone name="America/North_Dakota/Center" value="CST6CDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/North_Dakota/New_Salem" value="CST6CDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Panama" value="EST5" />
|
||||||
|
<zone name="America/Pangnirtung" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Paramaribo" value="SRT3" />
|
||||||
|
<zone name="America/Phoenix" value="MST7" />
|
||||||
|
<zone name="America/Port-au-Prince" value="EST5" />
|
||||||
|
<zone name="America/Porto_Acre" value="ACT5" />
|
||||||
|
<zone name="America/Port_of_Spain" value="AST4" />
|
||||||
|
<zone name="America/Porto_Velho" value="AMT4" />
|
||||||
|
<zone name="America/Puerto_Rico" value="AST4" />
|
||||||
|
<zone name="America/Rainy_River" value="CST6CDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Rankin_Inlet" value="CST6CDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Recife" value="BRT3" />
|
||||||
|
<zone name="America/Regina" value="CST6" />
|
||||||
|
<zone name="America/Resolute" value="EST5" />
|
||||||
|
<zone name="America/Rio_Branco" value="ACT5" />
|
||||||
|
<zone name="America/Rosario" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||||
|
<zone name="America/Santiago" value="CLST" />
|
||||||
|
<zone name="America/Santo_Domingo" value="AST4" />
|
||||||
|
<zone name="America/Sao_Paulo" value="BRT3BRST,M10.2.0/0,M2.3.0/0" />
|
||||||
|
<zone name="America/Scoresbysund" value="EGT1EGST,M3.5.0/0,M10.5.0/1" />
|
||||||
|
<zone name="America/Shiprock" value="MST7MDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/St_Barthelemy" value="AST4" />
|
||||||
|
<zone name="America/St_Johns" value="NST3:30NDT,M3.2.0/0:01,M11.1.0/0:01" />
|
||||||
|
<zone name="America/St_Kitts" value="AST4" />
|
||||||
|
<zone name="America/St_Lucia" value="AST4" />
|
||||||
|
<zone name="America/St_Thomas" value="AST4" />
|
||||||
|
<zone name="America/St_Vincent" value="AST4" />
|
||||||
|
<zone name="America/Swift_Current" value="CST6" />
|
||||||
|
<zone name="America/Tegucigalpa" value="CST6" />
|
||||||
|
<zone name="America/Thule" value="AST4ADT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Thunder_Bay" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Tijuana" value="PST8PDT,M4.1.0,M10.5.0" />
|
||||||
|
<zone name="America/Toronto" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Tortola" value="AST4" />
|
||||||
|
<zone name="America/Vancouver" value="PST8PDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Virgin" value="AST4" />
|
||||||
|
<zone name="America/Whitehorse" value="PST8PDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Winnipeg" value="CST6CDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Yakutat" value="AKST9AKDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="America/Yellowknife" value="MST7MDT,M3.2.0,M11.1.0" />
|
||||||
|
|
||||||
|
<zone name="Antarctica/Casey" value="WST-8" />
|
||||||
|
<zone name="Antarctica/Davis" value="DAVT-7" />
|
||||||
|
<zone name="Antarctica/DumontDUrville" value="DDUT-10" />
|
||||||
|
<zone name="Antarctica/Mawson" value="MAWT-6" />
|
||||||
|
<zone name="Antarctica/McMurdo" value="NZST-12NZDT,M9.5.0,M4.1.0/3" />
|
||||||
|
<zone name="Antarctica/Palmer" value="CLST" />
|
||||||
|
<zone name="Antarctica/Rothera" value="ROTT3" />
|
||||||
|
<zone name="Antarctica/South_Pole" value="NZST-12NZDT,M9.5.0,M4.1.0/3" />
|
||||||
|
<zone name="Antarctica/Syowa" value="SYOT-3" />
|
||||||
|
<zone name="Antarctica/Vostok" value="VOST-6" />
|
||||||
|
|
||||||
|
<zone name="Arctic/Longyearbyen" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
|
||||||
|
<zone name="Asia/Aden" value="AST-3" />
|
||||||
|
<zone name="Asia/Almaty" value="ALMT-6" />
|
||||||
|
<zone name="Asia/Amman" value="EET-2EEST,M3.5.4/0,M10.5.5/1" />
|
||||||
|
<zone name="Asia/Anadyr" value="ANAT-12ANAST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Asia/Aqtau" value="AQTT-5" />
|
||||||
|
<zone name="Asia/Aqtobe" value="AQTT-5" />
|
||||||
|
<zone name="Asia/Ashgabat" value="TMT-5" />
|
||||||
|
<zone name="Asia/Ashkhabad" value="TMT-5" />
|
||||||
|
<zone name="Asia/Baghdad" value="AST-3" />
|
||||||
|
<zone name="Asia/Bahrain" value="AST-3" />
|
||||||
|
<zone name="Asia/Baku" value="AZT-4AZST,M3.5.0/4,M10.5.0/5" />
|
||||||
|
<zone name="Asia/Bangkok" value="ICT-7" />
|
||||||
|
<zone name="Asia/Beirut" value="EET-2EEST,M3.5.0/0,M10.5.0/0" />
|
||||||
|
<zone name="Asia/Bishkek" value="KGT-6" />
|
||||||
|
<zone name="Asia/Brunei" value="BNT-8" />
|
||||||
|
<zone name="Asia/Calcutta" value="IST-5:30" />
|
||||||
|
<zone name="Asia/Choibalsan" value="CHOT-9" />
|
||||||
|
<zone name="Asia/Chongqing" value="CST-8" />
|
||||||
|
<zone name="Asia/Chungking" value="CST-8" />
|
||||||
|
<zone name="Asia/Colombo" value="IST-5:30" />
|
||||||
|
<zone name="Asia/Dacca" value="BDT-6" />
|
||||||
|
<zone name="Asia/Damascus" value="EET-2EEST,M4.1.5/0,J274/0" />
|
||||||
|
<zone name="Asia/Dhaka" value="BDT-6" />
|
||||||
|
<zone name="Asia/Dili" value="TLT-9" />
|
||||||
|
<zone name="Asia/Dubai" value="GST-4" />
|
||||||
|
<zone name="Asia/Dushanbe" value="TJT-5" />
|
||||||
|
<zone name="Asia/Gaza" value="EET-2EEST,J91/0,M9.2.4" />
|
||||||
|
<zone name="Asia/Harbin" value="CST-8" />
|
||||||
|
<zone name="Asia/Ho_Chi_Minh" value="ICT-7" />
|
||||||
|
<zone name="Asia/Hong_Kong" value="HKT-8" />
|
||||||
|
<zone name="Asia/Hovd" value="HOVT-7" />
|
||||||
|
<zone name="Asia/Irkutsk" value="IRKT-8IRKST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Asia/Istanbul" value="EET-2EEST,M3.5.0/3,M10.5.0/4" />
|
||||||
|
<zone name="Asia/Jakarta" value="WIT-7" />
|
||||||
|
<zone name="Asia/Jayapura" value="EIT-9" />
|
||||||
|
<zone name="Asia/Jerusalem" value="IDDT" />
|
||||||
|
<zone name="Asia/Kabul" value="AFT-4:30" />
|
||||||
|
<zone name="Asia/Kamchatka" value="PETT-12PETST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Asia/Karachi" value="PKT-5" />
|
||||||
|
<zone name="Asia/Kashgar" value="CST-8" />
|
||||||
|
<zone name="Asia/Katmandu" value="NPT-5:45" />
|
||||||
|
<zone name="Asia/Kolkata" value="IST-5:30" />
|
||||||
|
<zone name="Asia/Krasnoyarsk" value="KRAT-7KRAST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Asia/Kuala_Lumpur" value="MYT-8" />
|
||||||
|
<zone name="Asia/Kuching" value="MYT-8" />
|
||||||
|
<zone name="Asia/Kuwait" value="AST-3" />
|
||||||
|
<zone name="Asia/Macao" value="CST-8" />
|
||||||
|
<zone name="Asia/Macau" value="CST-8" />
|
||||||
|
<zone name="Asia/Magadan" value="MAGT-11MAGST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Asia/Makassar" value="CIT-8" />
|
||||||
|
<zone name="Asia/Manila" value="PHT-8" />
|
||||||
|
<zone name="Asia/Muscat" value="GST-4" />
|
||||||
|
<zone name="Asia/Nicosia" value="EET-2EEST,M3.5.0/3,M10.5.0/4" />
|
||||||
|
<zone name="Asia/Novosibirsk" value="NOVT-6NOVST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Asia/Omsk" value="OMST-6OMSST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Asia/Oral" value="ORAT-5" />
|
||||||
|
<zone name="Asia/Phnom_Penh" value="ICT-7" />
|
||||||
|
<zone name="Asia/Pontianak" value="WIT-7" />
|
||||||
|
<zone name="Asia/Pyongyang" value="KST-9" />
|
||||||
|
<zone name="Asia/Qatar" value="AST-3" />
|
||||||
|
<zone name="Asia/Qyzylorda" value="QYZT-6" />
|
||||||
|
<zone name="Asia/Rangoon" value="MMT-6:30" />
|
||||||
|
<zone name="Asia/Riyadh" value="AST-3" />
|
||||||
|
<zone name="Asia/Riyadh87" value="zzz-3:07:04" />
|
||||||
|
<zone name="Asia/Riyadh88" value="zzz-3:07:04" />
|
||||||
|
<zone name="Asia/Riyadh89" value="zzz-3:07:04" />
|
||||||
|
<zone name="Asia/Saigon" value="ICT-7" />
|
||||||
|
<zone name="Asia/Sakhalin" value="SAKT-10SAKST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Asia/Samarkand" value="UZT-5" />
|
||||||
|
<zone name="Asia/Seoul" value="KST-9" />
|
||||||
|
<zone name="Asia/Shanghai" value="CST-8" />
|
||||||
|
<zone name="Asia/Singapore" value="SGT-8" />
|
||||||
|
<zone name="Asia/Taipei" value="CST-8" />
|
||||||
|
<zone name="Asia/Tashkent" value="UZT-5" />
|
||||||
|
<zone name="Asia/Tbilisi" value="GET-4" />
|
||||||
|
<zone name="Asia/Tehran" value="IRDT" />
|
||||||
|
<zone name="Asia/Tel_Aviv" value="IDDT" />
|
||||||
|
<zone name="Asia/Thimbu" value="BTT-6" />
|
||||||
|
<zone name="Asia/Thimphu" value="BTT-6" />
|
||||||
|
<zone name="Asia/Tokyo" value="JST-9" />
|
||||||
|
<zone name="Asia/Ujung_Pandang" value="CIT-8" />
|
||||||
|
<zone name="Asia/Ulaanbaatar" value="ULAT-8" />
|
||||||
|
<zone name="Asia/Ulan_Bator" value="ULAT-8" />
|
||||||
|
<zone name="Asia/Urumqi" value="CST-8" />
|
||||||
|
<zone name="Asia/Vientiane" value="ICT-7" />
|
||||||
|
<zone name="Asia/Vladivostok" value="VLAT-10VLAST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Asia/Yakutsk" value="YAKT-9YAKST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Asia/Yekaterinburg" value="YEKT-5YEKST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Asia/Yerevan" value="AMT-4AMST,M3.5.0,M10.5.0/3" />
|
||||||
|
|
||||||
|
<zone name="Atlantic/Azores" value="AZOT1AZOST,M3.5.0/0,M10.5.0/1" />
|
||||||
|
<zone name="Atlantic/Bermuda" value="AST4ADT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="Atlantic/Canary" value="WET0WEST,M3.5.0/1,M10.5.0" />
|
||||||
|
<zone name="Atlantic/Cape_Verde" value="CVT1" />
|
||||||
|
<zone name="Atlantic/Faeroe" value="WET0WEST,M3.5.0/1,M10.5.0" />
|
||||||
|
<zone name="Atlantic/Faroe" value="WET0WEST,M3.5.0/1,M10.5.0" />
|
||||||
|
<zone name="Atlantic/Jan_Mayen" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Atlantic/Madeira" value="WET0WEST,M3.5.0/1,M10.5.0" />
|
||||||
|
<zone name="Atlantic/Reykjavik" value="GMT0" />
|
||||||
|
<zone name="Atlantic/South_Georgia" value="GST2" />
|
||||||
|
<zone name="Atlantic/Stanley" value="FKT4FKST,M9.1.0,M4.3.0" />
|
||||||
|
<zone name="Atlantic/St_Helena" value="GMT0" />
|
||||||
|
|
||||||
|
<zone name="Australia/ACT" value="EST-10EST,M10.1.0,M4.1.0/3" />
|
||||||
|
<zone name="Australia/Adelaide" value="CST-9:30CST,M10.1.0,M4.1.0/3" />
|
||||||
|
<zone name="Australia/Brisbane" value="EST-10" />
|
||||||
|
<zone name="Australia/Broken_Hill" value="CST-9:30CST,M10.1.0,M4.1.0/3" />
|
||||||
|
<zone name="Australia/Canberra" value="EST-10EST,M10.1.0,M4.1.0/3" />
|
||||||
|
<zone name="Australia/Currie" value="EST-10EST,M10.1.0,M4.1.0/3" />
|
||||||
|
<zone name="Australia/Darwin" value="CST-9:30" />
|
||||||
|
<zone name="Australia/Eucla" value="CWST-8:45" />
|
||||||
|
<zone name="Australia/Hobart" value="EST-10EST,M10.1.0,M4.1.0/3" />
|
||||||
|
<zone name="Australia/LHI" value="LHST-10:30LHST-11,M10.1.0,M4.1.0" />
|
||||||
|
<zone name="Australia/Lindeman" value="EST-10" />
|
||||||
|
<zone name="Australia/Lord_Howe" value="LHST-10:30LHST-11,M10.1.0,M4.1.0" />
|
||||||
|
<zone name="Australia/Melbourne" value="EST-10EST,M10.1.0,M4.1.0/3" />
|
||||||
|
<zone name="Australia/North" value="CST-9:30" />
|
||||||
|
<zone name="Australia/NSW" value="EST-10EST,M10.1.0,M4.1.0/3" />
|
||||||
|
<zone name="Australia/Perth" value="WST-8" />
|
||||||
|
<zone name="Australia/Queensland" value="EST-10" />
|
||||||
|
<zone name="Australia/South" value="CST-9:30CST,M10.1.0,M4.1.0/3" />
|
||||||
|
<zone name="Australia/Sydney" value="EST-10EST,M10.1.0,M4.1.0/3" />
|
||||||
|
<zone name="Australia/Tasmania" value="EST-10EST,M10.1.0,M4.1.0/3" />
|
||||||
|
<zone name="Australia/Victoria" value="EST-10EST,M10.1.0,M4.1.0/3" />
|
||||||
|
<zone name="Australia/West" value="WST-8" />
|
||||||
|
<zone name="Australia/Yancowinna" value="CST-9:30CST,M10.1.0,M4.1.0/3" />
|
||||||
|
|
||||||
|
<zone name="Brazil/Acre" value="ACT5" />
|
||||||
|
<zone name="Brazil/DeNoronha" value="FNT2" />
|
||||||
|
<zone name="Brazil/East" value="BRT3BRST,M10.2.0/0,M2.3.0/0" />
|
||||||
|
<zone name="Brazil/West" value="AMT4" />
|
||||||
|
|
||||||
|
<zone name="Canada/Atlantic" value="AST4ADT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="Canada/Central" value="CST6CDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="Canada/Eastern" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="Canada/East-Saskatchewan" value="CST6" />
|
||||||
|
<zone name="Canada/Mountain" value="MST7MDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="Canada/Newfoundland" value="NST3:30NDT,M3.2.0/0:01,M11.1.0/0:01" />
|
||||||
|
<zone name="Canada/Pacific" value="PST8PDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="Canada/Saskatchewan" value="CST6" />
|
||||||
|
<zone name="Canada/Yukon" value="PST8PDT,M3.2.0,M11.1.0" />
|
||||||
|
|
||||||
|
<zone name="Chile/Continental" value="CLST" />
|
||||||
|
<zone name="Chile/EasterIsland" value="EASST" />
|
||||||
|
|
||||||
|
<zone name="Etc/GMT" value="GMT0" />
|
||||||
|
<zone name="Etc/GMT0" value="GMT0" />
|
||||||
|
<zone name="Etc/GMT-0" value="GMT0" />
|
||||||
|
<zone name="Etc/GMT+0" value="GMT0" />
|
||||||
|
<zone name="Etc/GMT-1" value="GMT-1" />
|
||||||
|
<zone name="Etc/GMT+1" value="GMT+1" />
|
||||||
|
<zone name="Etc/GMT-10" value="GMT-10" />
|
||||||
|
<zone name="Etc/GMT+10" value="GMT+10" />
|
||||||
|
<zone name="Etc/GMT-11" value="GMT-11" />
|
||||||
|
<zone name="Etc/GMT+11" value="GMT+11" />
|
||||||
|
<zone name="Etc/GMT-12" value="GMT-12" />
|
||||||
|
<zone name="Etc/GMT+12" value="GMT+12" />
|
||||||
|
<zone name="Etc/GMT-13" value="GMT-13" />
|
||||||
|
<zone name="Etc/GMT-14" value="GMT-14" />
|
||||||
|
<zone name="Etc/GMT-2" value="GMT-2" />
|
||||||
|
<zone name="Etc/GMT+2" value="GMT+2" />
|
||||||
|
<zone name="Etc/GMT-3" value="GMT-3" />
|
||||||
|
<zone name="Etc/GMT+3" value="GMT+3" />
|
||||||
|
<zone name="Etc/GMT-4" value="GMT-4" />
|
||||||
|
<zone name="Etc/GMT+4" value="GMT+4" />
|
||||||
|
<zone name="Etc/GMT-5" value="GMT-5" />
|
||||||
|
<zone name="Etc/GMT+5" value="GMT+5" />
|
||||||
|
<zone name="Etc/GMT-6" value="GMT-6" />
|
||||||
|
<zone name="Etc/GMT+6" value="GMT+6" />
|
||||||
|
<zone name="Etc/GMT-7" value="GMT-7" />
|
||||||
|
<zone name="Etc/GMT+7" value="GMT+7" />
|
||||||
|
<zone name="Etc/GMT-8" value="GMT-8" />
|
||||||
|
<zone name="Etc/GMT+8" value="GMT+8" />
|
||||||
|
<zone name="Etc/GMT-9" value="GMT-9" />
|
||||||
|
<zone name="Etc/GMT+9" value="GMT+9" />
|
||||||
|
<zone name="Etc/Greenwich" value="GMT0" />
|
||||||
|
<zone name="Etc/UCT" value="UCT0" />
|
||||||
|
<zone name="Etc/Universal" value="UTC0" />
|
||||||
|
<zone name="Etc/UTC" value="UTC0" />
|
||||||
|
<zone name="Etc/Zulu" value="UTC0" />
|
||||||
|
|
||||||
|
<zone name="Europe/Amsterdam" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Andorra" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Athens" value="EET-2EEST,M3.5.0/3,M10.5.0/4" />
|
||||||
|
<zone name="Europe/Belfast" value="GMT0BST,M3.5.0/1,M10.5.0" />
|
||||||
|
<zone name="Europe/Belgrade" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Berlin" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Bratislava" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Brussels" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Bucharest" value="EET-2EEST,M3.5.0/3,M10.5.0/4" />
|
||||||
|
<zone name="Europe/Budapest" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Chisinau" value="EET-2EEST,M3.5.0/3,M10.5.0/4" />
|
||||||
|
<zone name="Europe/Copenhagen" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Dublin" value="GMT0IST,M3.5.0/1,M10.5.0" />
|
||||||
|
<zone name="Europe/Gibraltar" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Guernsey" value="GMT0BST,M3.5.0/1,M10.5.0" />
|
||||||
|
<zone name="Europe/Helsinki" value="EET-2EEST,M3.5.0/3,M10.5.0/4" />
|
||||||
|
<zone name="Europe/Isle_of_Man" value="GMT0BST,M3.5.0/1,M10.5.0" />
|
||||||
|
<zone name="Europe/Istanbul" value="EET-2EEST,M3.5.0/3,M10.5.0/4" />
|
||||||
|
<zone name="Europe/Jersey" value="GMT0BST,M3.5.0/1,M10.5.0" />
|
||||||
|
<zone name="Europe/Kaliningrad" value="EET-2EEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Kiev" value="EET-2EEST,M3.5.0/3,M10.5.0/4" />
|
||||||
|
<zone name="Europe/Lisbon" value="WET0WEST,M3.5.0/1,M10.5.0" />
|
||||||
|
<zone name="Europe/Ljubljana" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/London" value="GMT0BST,M3.5.0/1,M10.5.0" />
|
||||||
|
<zone name="Europe/Luxembourg" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Madrid" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Malta" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Mariehamn" value="EET-2EEST,M3.5.0/3,M10.5.0/4" />
|
||||||
|
<zone name="Europe/Minsk" value="EET-2EEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Monaco" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Moscow" value="MSK-3MSD,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Nicosia" value="EET-2EEST,M3.5.0/3,M10.5.0/4" />
|
||||||
|
<zone name="Europe/Oslo" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Paris" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Podgorica" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Prague" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Riga" value="EET-2EEST,M3.5.0/3,M10.5.0/4" />
|
||||||
|
<zone name="Europe/Rome" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Samara" value="SAMT-4SAMST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/San_Marino" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Sarajevo" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Simferopol" value="EET-2EEST,M3.5.0/3,M10.5.0/4" />
|
||||||
|
<zone name="Europe/Skopje" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Sofia" value="EET-2EEST,M3.5.0/3,M10.5.0/4" />
|
||||||
|
<zone name="Europe/Stockholm" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Tallinn" value="EET-2EEST,M3.5.0/3,M10.5.0/4" />
|
||||||
|
<zone name="Europe/Tirane" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Tiraspol" value="EET-2EEST,M3.5.0/3,M10.5.0/4" />
|
||||||
|
<zone name="Europe/Uzhgorod" value="EET-2EEST,M3.5.0/3,M10.5.0/4" />
|
||||||
|
<zone name="Europe/Vaduz" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Vatican" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Vienna" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Vilnius" value="EET-2EEST,M3.5.0/3,M10.5.0/4" />
|
||||||
|
<zone name="Europe/Volgograd" value="VOLT-3VOLST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Warsaw" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Zagreb" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
<zone name="Europe/Zaporozhye" value="EET-2EEST,M3.5.0/3,M10.5.0/4" />
|
||||||
|
<zone name="Europe/Zurich" value="CET-1CEST,M3.5.0,M10.5.0/3" />
|
||||||
|
|
||||||
|
<zone name="Indian/Antananarivo" value="EAT-3" />
|
||||||
|
<zone name="Indian/Chagos" value="IOT-6" />
|
||||||
|
<zone name="Indian/Christmas" value="CXT-7" />
|
||||||
|
<zone name="Indian/Cocos" value="CCT-6:30" />
|
||||||
|
<zone name="Indian/Comoro" value="EAT-3" />
|
||||||
|
<zone name="Indian/Kerguelen" value="TFT-5" />
|
||||||
|
<zone name="Indian/Mahe" value="SCT-4" />
|
||||||
|
<zone name="Indian/Maldives" value="MVT-5" />
|
||||||
|
<zone name="Indian/Mauritius" value="MUT-4" />
|
||||||
|
<zone name="Indian/Mayotte" value="EAT-3" />
|
||||||
|
<zone name="Indian/Reunion" value="RET-4" />
|
||||||
|
|
||||||
|
<zone name="Mexico/BajaNorte" value="PST8PDT,M4.1.0,M10.5.0" />
|
||||||
|
<zone name="Mexico/BajaSur" value="MST7MDT,M4.1.0,M10.5.0" />
|
||||||
|
<zone name="Mexico/General" value="CST6CDT,M4.1.0,M10.5.0" />
|
||||||
|
|
||||||
|
<zone name="Mideast/Riyadh87" value="zzz-3:07:04" />
|
||||||
|
<zone name="Mideast/Riyadh88" value="zzz-3:07:04" />
|
||||||
|
<zone name="Mideast/Riyadh89" value="zzz-3:07:04" />
|
||||||
|
|
||||||
|
<zone name="Pacific/Apia" value="WST11" />
|
||||||
|
<zone name="Pacific/Auckland" value="NZST-12NZDT,M9.5.0,M4.1.0/3" />
|
||||||
|
<zone name="Pacific/Chatham" value="CHAST-12:45CHADT,M9.5.0/2:45,M4.1.0/3:45" />
|
||||||
|
<zone name="Pacific/Easter" value="EASST" />
|
||||||
|
<zone name="Pacific/Efate" value="VUT-11" />
|
||||||
|
<zone name="Pacific/Enderbury" value="PHOT-13" />
|
||||||
|
<zone name="Pacific/Fakaofo" value="TKT10" />
|
||||||
|
<zone name="Pacific/Fiji" value="FJT-12" />
|
||||||
|
<zone name="Pacific/Funafuti" value="TVT-12" />
|
||||||
|
<zone name="Pacific/Galapagos" value="GALT6" />
|
||||||
|
<zone name="Pacific/Gambier" value="GAMT9" />
|
||||||
|
<zone name="Pacific/Guadalcanal" value="SBT-11" />
|
||||||
|
<zone name="Pacific/Guam" value="ChST-10" />
|
||||||
|
<zone name="Pacific/Honolulu" value="HST10" />
|
||||||
|
<zone name="Pacific/Johnston" value="HST10" />
|
||||||
|
<zone name="Pacific/Kiritimati" value="LINT-14" />
|
||||||
|
<zone name="Pacific/Kosrae" value="KOST-11" />
|
||||||
|
<zone name="Pacific/Kwajalein" value="MHT-12" />
|
||||||
|
<zone name="Pacific/Majuro" value="MHT-12" />
|
||||||
|
<zone name="Pacific/Marquesas" value="MART9:30" />
|
||||||
|
<zone name="Pacific/Midway" value="SST11" />
|
||||||
|
<zone name="Pacific/Nauru" value="NRT-12" />
|
||||||
|
<zone name="Pacific/Niue" value="NUT11" />
|
||||||
|
<zone name="Pacific/Norfolk" value="NFT-11:30" />
|
||||||
|
<zone name="Pacific/Noumea" value="NCT-11" />
|
||||||
|
<zone name="Pacific/Pago_Pago" value="SST11" />
|
||||||
|
<zone name="Pacific/Palau" value="PWT-9" />
|
||||||
|
<zone name="Pacific/Pitcairn" value="PST8" />
|
||||||
|
<zone name="Pacific/Ponape" value="PONT-11" />
|
||||||
|
<zone name="Pacific/Port_Moresby" value="PGT-10" />
|
||||||
|
<zone name="Pacific/Rarotonga" value="CKT10" />
|
||||||
|
<zone name="Pacific/Saipan" value="ChST-10" />
|
||||||
|
<zone name="Pacific/Samoa" value="SST11" />
|
||||||
|
<zone name="Pacific/Tahiti" value="TAHT10" />
|
||||||
|
<zone name="Pacific/Tarawa" value="GILT-12" />
|
||||||
|
<zone name="Pacific/Tongatapu" value="TOT-13" />
|
||||||
|
<zone name="Pacific/Truk" value="TRUT-10" />
|
||||||
|
<zone name="Pacific/Wake" value="WAKT-12" />
|
||||||
|
<zone name="Pacific/Wallis" value="WFT-12" />
|
||||||
|
<zone name="Pacific/Yap" value="TRUT-10" />
|
||||||
|
|
||||||
|
<zone name="SystemV/AST4" value="AST4" />
|
||||||
|
<zone name="SystemV/AST4ADT" value="AST4ADT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="SystemV/CST6" value="CST6" />
|
||||||
|
<zone name="SystemV/CST6CDT" value="CST6CDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="SystemV/EST5" value="EST5" />
|
||||||
|
<zone name="SystemV/EST5EDT" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="SystemV/HST10" value="HST10" />
|
||||||
|
<zone name="SystemV/MST7" value="MST7" />
|
||||||
|
<zone name="SystemV/MST7MDT" value="MST7MDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="SystemV/PST8" value="PST8" />
|
||||||
|
<zone name="SystemV/PST8PDT" value="PST8PDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="SystemV/YST9" value="GAMT9" />
|
||||||
|
<zone name="SystemV/YST9YDT" value="AKST9AKDT,M3.2.0,M11.1.0" />
|
||||||
|
|
||||||
|
<zone name="US/Alaska" value="AKST9AKDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="US/Aleutian" value="HAST10HADT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="US/Arizona" value="MST7" />
|
||||||
|
<zone name="US/Central" value="CST6CDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="US/Eastern" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="US/East-Indiana" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="US/Hawaii" value="HST10" />
|
||||||
|
<zone name="US/Indiana-Starke" value="CST6CDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="US/Michigan" value="EST5EDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="US/Mountain" value="MST7MDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="US/Pacific" value="PST8PDT,M3.2.0,M11.1.0" />
|
||||||
|
<zone name="US/Samoa" value="SST11" />
|
||||||
|
</timezones>
|
||||||
|
</configuration>
|
3366
src/mod/event_handlers/mod_rayo/conf/cacert.pem
Normal file
3366
src/mod/event_handlers/mod_rayo/conf/cacert.pem
Normal file
File diff suppressed because it is too large
Load Diff
36
src/mod/event_handlers/mod_rayo/conf/dialplan/public.xml
Normal file
36
src/mod/event_handlers/mod_rayo/conf/dialplan/public.xml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<include>
|
||||||
|
<context name="public">
|
||||||
|
|
||||||
|
<extension name="unloop">
|
||||||
|
<condition field="${unroll_loops}" expression="^true$"/>
|
||||||
|
<condition field="${sip_looped_call}" expression="^true$">
|
||||||
|
<action application="deflect" data="${destination_number}"/>
|
||||||
|
</condition>
|
||||||
|
</extension>
|
||||||
|
<!--
|
||||||
|
Tag anything pass thru here as an outside_call so you can make sure not
|
||||||
|
to create any routing loops based on the conditions that it came from
|
||||||
|
the outside of the switch.
|
||||||
|
-->
|
||||||
|
<extension name="outside_call" continue="true">
|
||||||
|
<condition>
|
||||||
|
<action application="set" data="outside_call=true"/>
|
||||||
|
<action application="export" data="RFC2822_DATE=${strftime(%a, %d %b %Y %T %z)}"/>
|
||||||
|
</condition>
|
||||||
|
</extension>
|
||||||
|
|
||||||
|
<extension name="call_debug" continue="true">
|
||||||
|
<condition field="${call_debug}" expression="^true$" break="never">
|
||||||
|
<action application="info"/>
|
||||||
|
</condition>
|
||||||
|
</extension>
|
||||||
|
|
||||||
|
<extension name="adhearsion">
|
||||||
|
<condition>
|
||||||
|
<action application="rayo" data=""/>
|
||||||
|
</condition>
|
||||||
|
</extension>
|
||||||
|
|
||||||
|
</context>
|
||||||
|
</include>
|
||||||
|
|
39
src/mod/event_handlers/mod_rayo/conf/directory/default.xml
Normal file
39
src/mod/event_handlers/mod_rayo/conf/directory/default.xml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<!--
|
||||||
|
NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE
|
||||||
|
|
||||||
|
FreeSWITCH works off the concept of users and domains just like email.
|
||||||
|
You have users that are in domains for example 1000@domain.com.
|
||||||
|
|
||||||
|
When freeswitch gets a register packet it looks for the user in the directory
|
||||||
|
based on the from or to domain in the packet depending on how your sofia profile
|
||||||
|
is configured. Out of the box the default domain will be the IP address of the
|
||||||
|
machine running FreeSWITCH. This IP can be found by typing "sofia status" at the
|
||||||
|
CLI. You will register your phones to the IP and not the hostname by default.
|
||||||
|
If you wish to register using the domain please open vars.xml in the root conf
|
||||||
|
directory and set the default domain to the hostname you desire. Then you would
|
||||||
|
use the domain name in the client instead of the IP address to register
|
||||||
|
with FreeSWITCH.
|
||||||
|
|
||||||
|
NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE
|
||||||
|
-->
|
||||||
|
|
||||||
|
<include>
|
||||||
|
<!--the domain or ip (the right hand side of the @ in the addr-->
|
||||||
|
<domain name="$${domain}">
|
||||||
|
<params>
|
||||||
|
<param name="dial-string" value="{^^:sip_invite_domain=${dialed_domain}:presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(*/${dialed_user}@${dialed_domain})}"/>
|
||||||
|
</params>
|
||||||
|
|
||||||
|
<variables>
|
||||||
|
</variables>
|
||||||
|
|
||||||
|
<groups>
|
||||||
|
<group name="default">
|
||||||
|
<users>
|
||||||
|
<X-PRE-PROCESS cmd="include" data="default/*.xml"/>
|
||||||
|
</users>
|
||||||
|
</group>
|
||||||
|
</groups>
|
||||||
|
|
||||||
|
</domain>
|
||||||
|
</include>
|
@ -0,0 +1,21 @@
|
|||||||
|
<include>
|
||||||
|
<user id="usera">
|
||||||
|
<!-- Outbound Registrations Related to this user -->
|
||||||
|
<gateways>
|
||||||
|
</gateways>
|
||||||
|
<params>
|
||||||
|
<!-- omit password for authless registration -->
|
||||||
|
<param name="password" value="1"/>
|
||||||
|
</params>
|
||||||
|
<variables>
|
||||||
|
<!--all variables here will be set on all inbound calls that originate from this user -->
|
||||||
|
<variable name="user_context" value="public"/>
|
||||||
|
<variable name="effective_caller_id_name" value="User A"/>
|
||||||
|
<variable name="effective_caller_id_number" value="9009095333"/>
|
||||||
|
</variables>
|
||||||
|
|
||||||
|
<vcard>
|
||||||
|
<!-- insert optional compliant vcard xml here-->
|
||||||
|
</vcard>
|
||||||
|
</user>
|
||||||
|
</include>
|
@ -0,0 +1,21 @@
|
|||||||
|
<include>
|
||||||
|
<user id="userb">
|
||||||
|
<!-- Outbound Registrations Related to this user -->
|
||||||
|
<gateways>
|
||||||
|
</gateways>
|
||||||
|
<params>
|
||||||
|
<!-- omit password for authless registration -->
|
||||||
|
<param name="password" value="1"/>
|
||||||
|
</params>
|
||||||
|
<variables>
|
||||||
|
<!--all variables here will be set on all inbound calls that originate from this user -->
|
||||||
|
<variable name="user_context" value="public"/>
|
||||||
|
<variable name="effective_caller_id_name" value="User B"/>
|
||||||
|
<variable name="effective_caller_id_number" value="9009093733"/>
|
||||||
|
</variables>
|
||||||
|
|
||||||
|
<vcard>
|
||||||
|
<!-- insert optional compliant vcard xml here-->
|
||||||
|
</vcard>
|
||||||
|
</user>
|
||||||
|
</include>
|
@ -0,0 +1,21 @@
|
|||||||
|
<include>
|
||||||
|
<user id="userc">
|
||||||
|
<!-- Outbound Registrations Related to this user -->
|
||||||
|
<gateways>
|
||||||
|
</gateways>
|
||||||
|
<params>
|
||||||
|
<!-- omit password for authless registration -->
|
||||||
|
<param name="password" value="1"/>
|
||||||
|
</params>
|
||||||
|
<variables>
|
||||||
|
<!--all variables here will be set on all inbound calls that originate from this user -->
|
||||||
|
<variable name="user_context" value="public"/>
|
||||||
|
<variable name="effective_caller_id_name" value="User C"/>
|
||||||
|
<variable name="effective_caller_id_number" value="8006492568"/>
|
||||||
|
</variables>
|
||||||
|
|
||||||
|
<vcard>
|
||||||
|
<!-- insert optional compliant vcard xml here-->
|
||||||
|
</vcard>
|
||||||
|
</user>
|
||||||
|
</include>
|
@ -0,0 +1,21 @@
|
|||||||
|
<include>
|
||||||
|
<user id="userd">
|
||||||
|
<!-- Outbound Registrations Related to this user -->
|
||||||
|
<gateways>
|
||||||
|
</gateways>
|
||||||
|
<params>
|
||||||
|
<!-- omit password for authless registration -->
|
||||||
|
<param name="password" value="1"/>
|
||||||
|
</params>
|
||||||
|
<variables>
|
||||||
|
<!--all variables here will be set on all inbound calls that originate from this user -->
|
||||||
|
<variable name="user_context" value="public"/>
|
||||||
|
<variable name="effective_caller_id_name" value="Jenny"/>
|
||||||
|
<variable name="effective_caller_id_number" value="2128675309"/>
|
||||||
|
</variables>
|
||||||
|
|
||||||
|
<vcard>
|
||||||
|
<!-- insert optional compliant vcard xml here-->
|
||||||
|
</vcard>
|
||||||
|
</user>
|
||||||
|
</include>
|
68
src/mod/event_handlers/mod_rayo/conf/freeswitch.xml
Normal file
68
src/mod/event_handlers/mod_rayo/conf/freeswitch.xml
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!--
|
||||||
|
NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE
|
||||||
|
|
||||||
|
This is the FreeSWITCH default config. Everything you see before you now traverses
|
||||||
|
down into all the directories including files which include more files. The default
|
||||||
|
config comes out of the box already working in most situations as a PBX. This will
|
||||||
|
allow you to get started testing and playing with various things in FreeSWITCH.
|
||||||
|
|
||||||
|
Before you start to modify this default please visit this wiki page:
|
||||||
|
|
||||||
|
http://wiki.freeswitch.org/wiki/Getting_Started_Guide#Some_stuff_to_try_out.21
|
||||||
|
|
||||||
|
If all else fails you can read our FAQ located at:
|
||||||
|
|
||||||
|
http://wiki.freeswitch.org/wiki/FreeSwitch_FAQ
|
||||||
|
|
||||||
|
NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE
|
||||||
|
-->
|
||||||
|
<document type="freeswitch/xml">
|
||||||
|
<!--#comment
|
||||||
|
All comments starting with #command will be preprocessed and never sent to the xml parser
|
||||||
|
Valid instructions:
|
||||||
|
#include ==> Include another file to this exact point
|
||||||
|
(partial xml should be encased in <include></include> tags)
|
||||||
|
#set ==> Set a global variable (can be expanded during preprocessing with $$ variables)
|
||||||
|
(note the double $$ which denotes preprocessor variables)
|
||||||
|
#comment ==> A general comment such as this
|
||||||
|
|
||||||
|
The preprocessor will compile the full xml document to ${prefix}/log/freeswitch.xml.fsxml
|
||||||
|
Don't modify it while freeswitch is running cos it is mem mapped in most cases =D
|
||||||
|
|
||||||
|
The same can be achieved with the <X-PRE-PROCESS> tag where the attrs 'cmd' and 'data' are
|
||||||
|
parsed in the same way.
|
||||||
|
-->
|
||||||
|
<!--#comment
|
||||||
|
vars.xml contains all the #set directives for the preprocessor.
|
||||||
|
-->
|
||||||
|
<X-PRE-PROCESS cmd="include" data="vars.xml"/>
|
||||||
|
|
||||||
|
<section name="configuration" description="Various Configuration">
|
||||||
|
<X-PRE-PROCESS cmd="include" data="autoload_configs/*.xml"/>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section name="dialplan" description="Regex/XML Dialplan">
|
||||||
|
<X-PRE-PROCESS cmd="include" data="dialplan/*.xml"/>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- mod_dingaling is reliant on the vcard data in the "directory" section. -->
|
||||||
|
<!-- mod_sofia is reliant on the user data for authorization -->
|
||||||
|
<section name="directory" description="User Directory">
|
||||||
|
<X-PRE-PROCESS cmd="include" data="directory/*.xml"/>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- languages section (under development still) -->
|
||||||
|
<section name="languages" description="Language Management">
|
||||||
|
<X-PRE-PROCESS cmd="include" data="lang/de/*.xml"/>
|
||||||
|
<X-PRE-PROCESS cmd="include" data="lang/en/*.xml"/>
|
||||||
|
<X-PRE-PROCESS cmd="include" data="lang/fr/*.xml"/>
|
||||||
|
<X-PRE-PROCESS cmd="include" data="lang/ru/*.xml"/>
|
||||||
|
<X-PRE-PROCESS cmd="include" data="lang/he/*.xml"/>
|
||||||
|
<X-PRE-PROCESS cmd="include" data="lang/es/es_ES.xml"/>
|
||||||
|
<X-NO-PRE-PROCESS cmd="include" data="lang/es/es_MX.xml"/>
|
||||||
|
<X-PRE-PROCESS cmd="include" data="lang/pt/pt_BR.xml"/>
|
||||||
|
<X-NO-PRE-PROCESS cmd="include" data="lang/pt/pt_PT.xml"/>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</document>
|
22
src/mod/event_handlers/mod_rayo/conf/lang/de/de.xml
Normal file
22
src/mod/event_handlers/mod_rayo/conf/lang/de/de.xml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<include>
|
||||||
|
<language name="de" sound-prefix="/snds" tts-engine="cepstral" tts-voice="david">
|
||||||
|
<phrases>
|
||||||
|
<macros>
|
||||||
|
<X-PRE-PROCESS cmd="include" data="demo/demo.xml"/>
|
||||||
|
<!--voicemail_de_tts is purely implemented with tts, we need a files based implementation too -->
|
||||||
|
<X-PRE-PROCESS cmd="include" data="vm/tts.xml"/>
|
||||||
|
</macros>
|
||||||
|
</phrases>
|
||||||
|
</language>
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
82
src/mod/event_handlers/mod_rayo/conf/lang/de/demo/demo.xml
Normal file
82
src/mod/event_handlers/mod_rayo/conf/lang/de/demo/demo.xml
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
<include>
|
||||||
|
<macro name="msgcount">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="execute" data="sleep(1000)"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
<!-- or -->
|
||||||
|
<!--<action function="speak-text" data="Sie haben $1 Nachrichten"/>-->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="saydate">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="timespec">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="time_measurement"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="ip-addr">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="iterated" type="ip_address"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="ip_address"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="spell">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="spell-phonetic">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_phonetic"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="tts-timeleft">
|
||||||
|
<!-- The parser will visit each <input> tag and execute the actions in <match> or <nomatch> depending on the pattern param -->
|
||||||
|
<!-- If the function "break" is encountered all parsing will cease -->
|
||||||
|
<input pattern="(\d+):(\d+)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Sie haben $1 Minuten, $2 Sekunden übrig $strftime(%Y-%m-%d)"/>
|
||||||
|
<action function="break"/>
|
||||||
|
</match>
|
||||||
|
<nomatch>
|
||||||
|
<action function="speak-text" data="Die Eingabe war ungültig."/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
<input pattern="(\d+) min (\d+) sek">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Sie haben $1 Minuten, $2 Sekunden übrig $strftime(%Y-%m-%d)"/>
|
||||||
|
</match>
|
||||||
|
<nomatch>
|
||||||
|
<action function="speak-text" data="Die Eingabe war ungültig."/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
413
src/mod/event_handlers/mod_rayo/conf/lang/de/vm/sounds.xml
Normal file
413
src/mod/event_handlers/mod_rayo/conf/lang/de/vm/sounds.xml
Normal file
@ -0,0 +1,413 @@
|
|||||||
|
<include>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_id">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_pass">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_fail_auth">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-fail_auth.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_hello">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!--<action function="play-file" data="voicemail/vm-hello.wav"/> -->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_goodbye">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-goodbye.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_abort">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-abort.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_message_count">
|
||||||
|
<input pattern="^(1):(.*)$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action application="log" data="INFO $1 $2"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items" gender="feminine"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$2.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(\d+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items" gender="feminine"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$2.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<!-- To listen to new messages -->
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_new.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
<!-- To listen to saved messages -->
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_saved.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
<!-- For advanced options -->
|
||||||
|
<action function="play-file" data="voicemail/vm-advanced.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
<!-- To exit -->
|
||||||
|
<action function="play-file" data="voicemail/vm-to_exit.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_phonetic"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_config_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<!-- To record a greeting -->
|
||||||
|
<action function="play-file" data="voicemail/vm-to_record_greeting.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
<!-- To choose greeting -->
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
<!-- To record your name -->
|
||||||
|
<action function="play-file" data="voicemail/vm-record_name2.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
<!-- To change password -->
|
||||||
|
<action function="play-file" data="voicemail/vm-change_password.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
<!-- To return to main menu -->
|
||||||
|
<action function="play-file" data="voicemail/vm-main_menu.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_name1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-rerecord.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_urgent_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-mark-urgent.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-continue.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_prepend">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_add_intro.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-send_message_now.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_message_enter_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-followed_by.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_invalid_extension">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_listen_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_to_email.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-return_call.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-return_call.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting_fail">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_greeting.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_message">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_message.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_greeting_selected">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-greeting.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-selected.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_play_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-person.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-not_available.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_number">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_message_number">
|
||||||
|
<input pattern="^([a-z]+):(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-message_number.wav"/>
|
||||||
|
<action application="log" data="INFO $1 $2"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_phone_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<!-- Note: Update this to marked-urgent,emailed and saved once new sound files are recorded -->
|
||||||
|
<macro name="voicemail_ack">
|
||||||
|
<input pattern="^(too-small)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-too-small.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(deleted)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(saved)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(emailed)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(marked-urgent)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_date">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action application="log" data="INFO $1"/>
|
||||||
|
<action function="say" data="$1" method="counted" type="current_date_time"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_disk_quota_exceeded">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-mailbox_full.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_announce_ext">
|
||||||
|
<input pattern="^([^\:]+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_lot_full">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="tone_stream://%(275,10,600);%(275,100,300)"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_lot_empty">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="tone_stream://%(275,10,600);%(275,100,300)"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
224
src/mod/event_handlers/mod_rayo/conf/lang/de/vm/tts.xml
Normal file
224
src/mod/event_handlers/mod_rayo/conf/lang/de/vm/tts.xml
Normal file
@ -0,0 +1,224 @@
|
|||||||
|
<include>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_id">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Bitte geben Sie Ihren Benutzernamen ein, gefolgt von $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_pass">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Bitte geben Sie Ihr Passwort ein, gefolgt von $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_fail_auth">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Falsche Benutzerdaten."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_hello">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Willkommen in Ihrem Postfach."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_goodbye">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Auf Wiedersehen."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_abort">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Zu viele Fehlversuche."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_message_count">
|
||||||
|
<input pattern="^1:(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Sie haben 1 $2 Nachricht im Ordner ${voicemail_current_folder}."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^([0,2-9]+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Sie haben $1 $2 Nachrichten im Ordner ${voicemail_current_folder}."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Um neue Nachrichten zu hören, drücken Sie $1. Um gespeicherte Nachrichten zu hören, drücken Sie $2, Für erweiterte Optionen, drücken Sie $3. Zum beenden drücken Sie $4."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_config_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Um eine Ansage aufzunehmen, drücken Sie $1. Um eine Ansage auszuwählen, drücken Sie $2. Um ihren Namen aufzunehmen, drücken Sie $3. Um zum Hauptmenü zurückzukehren, drücken Sie $4."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Sprechen Sie Ihren Namen nach dem Ton, drücken Sie eine beliebige Taste oder hören Sie auf zu sprechen um die Aufnahme zu beenden."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Um die Aufzeichnung anzuhören, drücken Sie $1. Um die Aufzeichnung zu speichern, drücken Sie $2. Für eine erneute Aufnahme drücken Sie $3."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_urgent_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Drücken Sie $1 um diese Nachricht als wichtig zu markieren. Um fortzufahren drücken Sie $2."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_listen_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Drücken Sie $1 um die Nachricht erneut zu hören. Um die Nachricht zu speichern, drücken Sie $2. Zum löschen der Nachricht drücken Sie $3. Für die Weiterleitung als Email, drücken Sie $4."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Wählen Sie eine Ansage zwischen 1 und 3."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting_fail">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Ungültige Eingabe."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Zeichnen Sie Ihre Ansage nach dem Ton auf. Drücken Sie eine beliebige Taste oder hören Sie auf zu sprechen um die Aufnahme zu beenden."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_message">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Sprechen Sie nach dem Ton. Drücken Sie eine beliebige Taste oder hören Sie auf zu sprechen um die Aufnahme zu beenden."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_greeting_selected">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Ansage $1 ausgewählt."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_play_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 ist nicht verfügbar."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_message_number">
|
||||||
|
<input pattern="^([a-z]+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 Nachricht Nummer $2."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_phone_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_ack">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Nachricht $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_date">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$strftime($1|%A, %B %d %Y, %I %M %p)"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
156
src/mod/event_handlers/mod_rayo/conf/lang/en/demo/demo-ivr.xml
Normal file
156
src/mod/event_handlers/mod_rayo/conf/lang/en/demo/demo-ivr.xml
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
<include>
|
||||||
|
|
||||||
|
<macro name="demo_ivr_count">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="demo_ivr_main_menu" pause="100"> <!-- See conf/autoload_config/ivr.conf.xml for an example on how to use this macro in an IVR -->
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- string together several existing sound files to create one long greeting -->
|
||||||
|
<action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-this_ivr_will_let_you_test_features.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-you_may_exit_by_hanging_up.wav"/>
|
||||||
|
<!-- note that you can do more than just play files, e.g. have pauses and do TTS -->
|
||||||
|
|
||||||
|
<!-- Menu option 1: Call FreeSWITCH conference-->
|
||||||
|
<action function="play-file" data="ivr/ivr-enter_ext_pound.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://1500"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/1.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 2: Do FreeSWITCH echo test -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/2.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 3: Listen to Music on Hold -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/3.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 4: Register for ClueCon -->
|
||||||
|
<action function="play-file" data="ivr/ivr-register_for_cluecon.wav"/>
|
||||||
|
<action function="play-file" data="digits/4.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 5: Listen to screaming monkeys -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/5.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 6: Hear a sample submenu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/6.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 9: Repeat these options -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/9.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://2000"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the same as demo_ivr_main_menu except it is the "short" version -->
|
||||||
|
<!-- The short version has all the options but not the initial greeting -->
|
||||||
|
<macro name="demo_ivr_main_menu_short" pause="100">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- Menu option 1: Call FreeSWITCH conference-->
|
||||||
|
<action function="play-file" data="silence_stream://1000"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/1.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 2: Do FreeSWITCH echo test -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/2.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 3: Listen to Music on Hold -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/3.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 4: Hear a sample submenu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/4.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 5: Listen to screaming monkeys -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/5.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 9: Repeat these options -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/9.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://2000"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the "long" greeting for the demo_ivr_sub_menu -->
|
||||||
|
<macro name="demo_ivr_sub_menu">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-sample_submenu.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option *: Return to top menu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/star.wav"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the same as demo_ivr_sub_menu except it is the "short" version -->
|
||||||
|
<!-- The short version has all the options but not the initial greeting -->
|
||||||
|
<macro name="demo_ivr_sub_menu_short">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- Menu option *: Return to top menu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/star.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
82
src/mod/event_handlers/mod_rayo/conf/lang/en/demo/demo.xml
Normal file
82
src/mod/event_handlers/mod_rayo/conf/lang/en/demo/demo.xml
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
<include>
|
||||||
|
<macro name="msgcount">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="execute" data="sleep(1000)"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
<!-- or -->
|
||||||
|
<!--<action function="speak-text" data="you have $1 messages"/>-->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="saydate">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="timespec">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="time_measurement"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="ip-addr">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="iterated" type="ip_address"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="ip_address"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="spell">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="spell-phonetic">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_phonetic"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="tts-timeleft">
|
||||||
|
<!-- The parser will visit each <input> tag and execute the actions in <match> or <nomatch> depending on the pattern param -->
|
||||||
|
<!-- If the function "break" is encountered all parsing will cease -->
|
||||||
|
<input pattern="(\d+):(\d+)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
|
||||||
|
<action function="break"/>
|
||||||
|
</match>
|
||||||
|
<nomatch>
|
||||||
|
<action function="speak-text" data="That input was invalid."/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
<input pattern="(\d+) min (\d+) sec">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
|
||||||
|
</match>
|
||||||
|
<nomatch>
|
||||||
|
<action function="speak-text" data="That input was invalid."/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
@ -0,0 +1,35 @@
|
|||||||
|
<include>
|
||||||
|
<macro name="funny_prompts" pause="750">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="ivr/ivr-wakey_wakey_sunshine.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-no_no_no.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-did_you_mean_to_press_key.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-seriously_mean_to_press_key.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-oh_whatever.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-one_more_mistake.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-congratulations_you_pressed_star.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-engineers_busy_assisting_other_sales.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-message_self_destruct.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-all_your_call_are_belong_to_us.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-love_those_touch_tones.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-yes_we_have_no_bananas.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-dude_you_suck.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-on_hold_indefinitely.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-youre_doing_it_wrong.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-were_asterisk_free.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-douche_telecom.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-asterisk_like_syphilis.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-freeguipy.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-terribly_wrong_awkward.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-it_was_that_bug.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-concentrate.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-founder_of_freesource.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-cold_foolish.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-trollover_minutes.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-yuno_silent_drill.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-beacuase.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
</include>
|
@ -0,0 +1,171 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
|
||||||
|
<macro name="new_demo_ivr_main_menu" pause="100"> <!-- See conf/ivr_menus/ivr.conf.xml for an example on how to use this macro in an IVR -->
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://500"/>
|
||||||
|
|
||||||
|
<!-- Menu option 1: For information about FreeSWITCH... -->
|
||||||
|
<action function="play-file" data="misc/misc-information_about_freeswitch.wav"/>
|
||||||
|
<action function="play-file" data="digits/1.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 2: To learn more about FreeSWITCH Solutions... -->
|
||||||
|
<action function="play-file" data="misc/misc-learn_more_about_freeswitch_solutions.wav"/>
|
||||||
|
<action function="play-file" data="digits/2.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 3: To hear about ClueCon -->
|
||||||
|
<action function="play-file" data="misc/misc-to_hear_about_cluecon.wav"/>
|
||||||
|
<action function="play-file" data="digits/3.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 4: For other options -->
|
||||||
|
<action function="play-file" data="ivr/ivr-for_other_options.wav"/>
|
||||||
|
<action function="play-file" data="digits/4.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 9: Repeat these options -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/9.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://2000"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the same as new_demo_ivr_main_menu except it is the "short" version -->
|
||||||
|
<!-- The short version has all the options but not the initial greeting -->
|
||||||
|
<macro name="new_demo_ivr_main_menu_short" pause="100">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- Menu option 1: For information about FreeSWITCH... -->
|
||||||
|
<action function="play-file" data="misc/misc-information_about_freeswitch.wav"/>
|
||||||
|
<action function="play-file" data="digits/1.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 2: To learn more about FreeSWITCH Solutions... -->
|
||||||
|
<action function="play-file" data="misc/misc-learn_more_about_freeswitch_solutions.wav"/>
|
||||||
|
<action function="play-file" data="digits/2.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 3: To hear about ClueCon -->
|
||||||
|
<action function="play-file" data="misc/misc-to_hear_about_cluecon.wav"/>
|
||||||
|
<action function="play-file" data="digits/3.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 4: For other options -->
|
||||||
|
<action function="play-file" data="ivr/ivr-for_other_options.wav"/>
|
||||||
|
<action function="play-file" data="digits/4.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 9: Repeat these options -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/9.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://2000"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- More information about FreeSWITCH... -->
|
||||||
|
<macro name="learn_about_freeswitch_sub_menu">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- Information about FreeSWITCH and OSTAG... -->
|
||||||
|
<action function="play-file" data="misc-freeswitch_is_state_of_the_art.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://50"/>
|
||||||
|
<action function="play-file" data="misc-it_is_stable_scalable_extensible.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://50"/>
|
||||||
|
<action function="play-file" data="misc-free_to_download.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://50"/>
|
||||||
|
<action function="play-file" data="misc-freeswitch_sponsored_by_ostag.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://50"/>
|
||||||
|
<action function="play-file" data="misc-ostag_learn_more.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://50"/>
|
||||||
|
|
||||||
|
<!-- Menu option 9: Repeat this information -->
|
||||||
|
<action function="play-file" data="ivr/ivr-repeat_this_information.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/9.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://2000"/>
|
||||||
|
|
||||||
|
<!-- Menu option *: Return to top menu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/star.wav"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- More information about FreeSWITCH Solutions... -->
|
||||||
|
<macro name="learn_about_freeswitch_solutions_sub_menu">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- Information about FreeSWITCH Solutions... -->
|
||||||
|
<action function="play-file" data="[[sounds from tony/brian]]"/>
|
||||||
|
<action function="play-file" data="silence_stream://50"/>
|
||||||
|
<action function="play-file" data="[[sounds from tony/brian]]"/>
|
||||||
|
<action function="play-file" data="silence_stream://50"/>
|
||||||
|
<action function="play-file" data="[[sounds from tony/brian]]"/>
|
||||||
|
<action function="play-file" data="silence_stream://50"/>
|
||||||
|
<action function="play-file" data="[[sounds from tony/brian]]"/>
|
||||||
|
<action function="play-file" data="silence_stream://50"/>
|
||||||
|
<action function="play-file" data="[[sounds from tony/brian]]"/>
|
||||||
|
<action function="play-file" data="silence_stream://50"/>
|
||||||
|
|
||||||
|
<!-- Menu option 9: Repeat this information -->
|
||||||
|
<action function="play-file" data="ivr/ivr-repeat_this_information.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/9.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://2000"/>
|
||||||
|
|
||||||
|
<!-- Menu option *: Return to top menu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/star.wav"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- More information about ClueCon -->
|
||||||
|
<macro name="learn_about_cluecon_sub_menu">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- Information about ClueCon... -->
|
||||||
|
<action function="play-file" data="misc-cluecon_is_premier_conference.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://50"/>
|
||||||
|
<action function="play-file" data="misc-chicago_each_summer.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://50"/>
|
||||||
|
<action function="play-file" data="misc-wide_range_of_persons.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://50"/>
|
||||||
|
<action function="play-file" data="misc-support_open_source_by_attending.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://500"/>
|
||||||
|
<action function="play-file" data="ivr-register_for_cluecon.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/1.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://500"/>
|
||||||
|
|
||||||
|
<!-- Menu option 9: Repeat this information -->
|
||||||
|
<action function="play-file" data="ivr/ivr-repeat_this_information.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/9.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://2000"/>
|
||||||
|
|
||||||
|
<!-- Menu option *: Return to top menu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/star.wav"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
130
src/mod/event_handlers/mod_rayo/conf/lang/en/dir/sounds.xml
Normal file
130
src/mod/event_handlers/mod_rayo/conf/lang/en/dir/sounds.xml
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
<include>
|
||||||
|
|
||||||
|
<macro name="directory_intro">
|
||||||
|
<input pattern="^(last_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-enter_person.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-last_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-enter_person.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-first_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_search_by.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-first_name.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_search_by.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-last_name.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_min_search_digits">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-specify_mininum.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="directory/dir-letters_of_person_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count">
|
||||||
|
<input pattern="^0$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-no_matching_results.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="directory/dir-result_match.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count_too_large">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-too_many_result.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_last">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-no_more_results.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_item">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-result_number.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_at">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-at_extension.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_menu">
|
||||||
|
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_select_entry.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-for_next.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-for_prev.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-start_new_search.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
106
src/mod/event_handlers/mod_rayo/conf/lang/en/dir/tts.xml
Normal file
106
src/mod/event_handlers/mod_rayo/conf/lang/en/dir/tts.xml
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
<include>
|
||||||
|
|
||||||
|
<macro name="directory_intro">
|
||||||
|
<input pattern="^(last_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Please enter the first few digit of the person last name"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Please enter the first few digit of the person first name"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="to search by first name, press $2"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="to search by last name, press $2"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_min_search_digits">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="You need to specify a minimum the first $1 letters of the person name, try again."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count">
|
||||||
|
<input pattern="^0$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Your search match no user on this system, try again."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 result match your search"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count_too_large">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Your search returned too many result, please try again"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_last">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="No more result"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_item">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Result number $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_menu">
|
||||||
|
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="To select this entry press $1, for the next entry press $2, for the previous entry press $3, to make a new search press $4"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_at">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="at extension $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
25
src/mod/event_handlers/mod_rayo/conf/lang/en/en.xml
Normal file
25
src/mod/event_handlers/mod_rayo/conf/lang/en/en.xml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<include>
|
||||||
|
<language name="en" say-module="en" sound-prefix="$${sounds_dir}/en/us/callie" tts-engine="cepstral" tts-voice="callie">
|
||||||
|
<phrases>
|
||||||
|
<macros>
|
||||||
|
<X-PRE-PROCESS cmd="include" data="demo/*.xml"/> <!-- Note: this now grabs whole subdir, previously grabbed only demo.xml -->
|
||||||
|
<!-- voicemail_en_tts is purely implemented with tts, we have the files based one that is the default. -->
|
||||||
|
<X-PRE-PROCESS cmd="include" data="vm/sounds.xml"/> <!-- vm/tts.xml if you want to use tts and have cepstral -->
|
||||||
|
<X-PRE-PROCESS cmd="include" data="dir/sounds.xml"/> <!-- dir/tts.xml if you want to use tts and have cepstral -->
|
||||||
|
<X-PRE-PROCESS cmd="include" data="ivr/*.xml"/> <!-- IVR and custom phrases go here -->
|
||||||
|
</macros>
|
||||||
|
<X-PRE-PROCESS cmd="include" data="vm/voicemail_ivr.xml"/>
|
||||||
|
</phrases>
|
||||||
|
</language>
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
153
src/mod/event_handlers/mod_rayo/conf/lang/en/ivr/sounds.xml
Normal file
153
src/mod/event_handlers/mod_rayo/conf/lang/en/ivr/sounds.xml
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
<include>
|
||||||
|
<macro name="queue_position">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="ivr/ivr-you_are_number.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-in_line.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="has_called_conf">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="$1"/>
|
||||||
|
<action function="sleep" data="100"/>
|
||||||
|
<action function="play-file" data="conference/conf-has_joined.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="has_left_conf">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="$1"/>
|
||||||
|
<action function="sleep" data="100"/>
|
||||||
|
<action function="play-file" data="conference/conf-has_left.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="callers_in_conf">
|
||||||
|
<input pattern="^1$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="sleep" data="500"/>
|
||||||
|
<!--<action function="play-file" data="ivr/ivr-there_is.wav"/>-->
|
||||||
|
<action function="play-file" data="digits/1.wav"/>
|
||||||
|
<action function="sleep" data="100"/>
|
||||||
|
<action function="play-file" data="conference/conf-listener_in_conference.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="sleep" data="500"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-there_are.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="sleep" data="100"/>
|
||||||
|
<action function="play-file" data="conference/conf-members_in_conference.wav"/>
|
||||||
|
</match>
|
||||||
|
<nomatch>
|
||||||
|
<action function="sleep" data="500"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-there_are.wav"/>
|
||||||
|
<action function="play-file" data="digits/0.wav"/>
|
||||||
|
<action function="sleep" data="100"/>
|
||||||
|
<action function="play-file" data="conference/conf-members_in_conference.wav"/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="enter_dest_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="sleep" data="1000"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-enter_destination_telephone_number.wav"/>
|
||||||
|
<action function="sleep" data="1000"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="enter_src_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="sleep" data="1000"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-enter_source_telephone_number.wav"/>
|
||||||
|
<action function="sleep" data="1000"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="call_forward_set">
|
||||||
|
<input pattern="^(\d+):(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="sleep" data="1000"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-extension_number.wav"/>
|
||||||
|
<action function="sleep" data="400"/>
|
||||||
|
<action function="say" data="$1" method="iterated" type="number"/>
|
||||||
|
<action function="sleep" data="400"/>
|
||||||
|
<action function="play-file" data="digits/2.wav"/>
|
||||||
|
<action function="sleep" data="1000"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-extension_number.wav"/>
|
||||||
|
<action function="sleep" data="400"/>
|
||||||
|
<action function="say" data="$2" method="iterated" type="number"/>
|
||||||
|
<action function="sleep" data="1000"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-call_forwarding_has_been_set.wav"/>
|
||||||
|
<action function="sleep" data="1500"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="call_forward_cancel">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="sleep" data="1000"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-extension_number.wav"/>
|
||||||
|
<action function="sleep" data="400"/>
|
||||||
|
<action function="say" data="$1" method="iterated" type="number"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-call_forwarding_has_been_cancelled.wav"/>
|
||||||
|
<action function="sleep" data="1500"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="screen_confirm">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="sleep" data="500"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-call_from.wav"/>
|
||||||
|
<action function="sleep" data="250"/>
|
||||||
|
<!-- Note, be sure to pass in the full path to the file or else!! -->
|
||||||
|
<action function="play-file" data="$1"/>
|
||||||
|
<action function="sleep" data="500"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-to_accept_press_one.wav"/>
|
||||||
|
<action function="sleep" data="500"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-to_reject.wav"/>
|
||||||
|
<action function="sleep" data="50"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-hang_up.wav"/>
|
||||||
|
<action function="sleep" data="1500"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-call_from.wav"/>
|
||||||
|
<action function="sleep" data="250"/>
|
||||||
|
<action function="play-file" data="$1"/>
|
||||||
|
<action function="sleep" data="500"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-to_accept_press_one.wav"/>
|
||||||
|
<action function="sleep" data="500"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-to_reject.wav"/>
|
||||||
|
<action function="sleep" data="50"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-hang_up.wav"/>
|
||||||
|
<action function="sleep" data="1500"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
441
src/mod/event_handlers/mod_rayo/conf/lang/en/vm/sounds.xml
Normal file
441
src/mod/event_handlers/mod_rayo/conf/lang/en/vm/sounds.xml
Normal file
@ -0,0 +1,441 @@
|
|||||||
|
<include>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_id">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_pass">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_fail_auth">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-fail_auth.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_change_pass_success">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-password_has_been_changed.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_change_pass_fail">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-password_not_valid.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_hello">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!--<action function="play-file" data="voicemail/vm-hello.wav"/> -->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_goodbye">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-goodbye.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_abort">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-abort.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_message_count">
|
||||||
|
<input pattern="^(1):(.*)$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$2.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(\d+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$2.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<!-- To listen to new messages -->
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_new.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To listen to saved messages -->
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_saved.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- For advanced options -->
|
||||||
|
<action function="play-file" data="voicemail/vm-advanced.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To exit -->
|
||||||
|
<action function="play-file" data="voicemail/vm-to_exit.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_phonetic"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_config_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<!-- To record a greeting -->
|
||||||
|
<action function="play-file" data="voicemail/vm-to_record_greeting.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To choose greeting -->
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To record your name -->
|
||||||
|
<action function="play-file" data="voicemail/vm-record_name2.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To change password -->
|
||||||
|
<action function="play-file" data="voicemail/vm-change_password.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To return to main menu -->
|
||||||
|
<action function="play-file" data="voicemail/vm-main_menu.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_name1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-rerecord.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_urgent_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-mark-urgent.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-continue.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_prepend">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_add_intro.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-send_message_now.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_message_enter_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-followed_by.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_invalid_extension">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_listen_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_to_email.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-return_call.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-return_call.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting_fail">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_greeting.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_message">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_message.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_greeting_selected">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-greeting.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-selected.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_play_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-person.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-not_available.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_number">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_message_number">
|
||||||
|
<input pattern="^([a-z]+):(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-message_number.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_phone_number">
|
||||||
|
<input pattern="^000|^$|^[Aa]non|^[Pp]rivate" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<!-- add 'anonymous caller' sound here -->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="ivr/ivr-this_is_a_call_from.wav"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(500)"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<!-- Note: Update this to marked-urgent,emailed and saved once new sound files are recorded -->
|
||||||
|
<macro name="voicemail_ack">
|
||||||
|
<input pattern="^(too-small)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-too-small.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(deleted)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(saved)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(emailed)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(marked-urgent)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_date">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="short_date_time"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_disk_quota_exceeded">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-mailbox_full.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_announce_ext">
|
||||||
|
<input pattern="^([^\:]+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_lot_full">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="tone_stream://%(275,10,600);%(275,100,300)"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_lot_empty">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="tone_stream://%(275,10,600);%(275,100,300)"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
249
src/mod/event_handlers/mod_rayo/conf/lang/en/vm/tts.xml
Normal file
249
src/mod/event_handlers/mod_rayo/conf/lang/en/vm/tts.xml
Normal file
@ -0,0 +1,249 @@
|
|||||||
|
<include>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_id">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="please enter your i d, followed by $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_pass">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="please enter your password, followed by $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_fail_auth">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="login incorrect."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_hello">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="welcome to your voicemail."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_goodbye">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="goodbye."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_abort">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="too many failed attempts."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_message_count">
|
||||||
|
<input pattern="^1:(.*)$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="you have 1 $1 message in folder ${voicemail_current_folder}."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(\d+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="you have $1 $2 messages in folder ${voicemail_current_folder}."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="To listen to new messages, press $1, To listen to saved messages, press $2, For advanced options, press $3, to exit, press $4."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_config_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="To record a greeting, press $1, To choose a greeting, press $2, To record your name, press $3, to change your password, press $5, to return to the main menu, press $5."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="at the tone, please record your name, press any key or stop talking to end the recording."/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="To listen to the recording, press $1, To save the recording, press $2, To re record, press $3."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_urgent_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="To mark this message urgent, press $1, To continue, press $2."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_invalid_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 is not a valid extension."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_message_enter_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="enter the extension you wish to forward to, then press $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_prepend">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="To record an announcement, press $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_listen_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="To listen to the recording again, press $1, To save the recording, press $2, To delete the recording, press $3, to forward the recording to your email, press $4, to call the caller now, press $5, To forward this message to another extension, press $6."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="choose a greeting between 1 and 3."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting_fail">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="invalid value."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="record your greeting at the tone, press any key or stop talking to end the recording."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_message">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="record your message at the tone, press any key or stop talking to end the recording."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_greeting_selected">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="greeting $1 selected."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_play_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 is not available."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_message_number">
|
||||||
|
<input pattern="^([a-z]+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 message number $2."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_phone_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_ack">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="message $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_date">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="${strftime($1|%A, %B %d %Y, %I:%M %p)}"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
@ -0,0 +1,417 @@
|
|||||||
|
<include>
|
||||||
|
|
||||||
|
<macros name="voicemail_ivr">
|
||||||
|
<macro name="press_key">
|
||||||
|
<input pattern="^(.*):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="$2"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="plural_msg">
|
||||||
|
<input pattern="^[1]:(.*):(.*)$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="$1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^.*:(.*):(.*)$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="$2"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="enter_id">
|
||||||
|
<input pattern="(.+)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
<nomatch>
|
||||||
|
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
|
||||||
|
<action function="say" data="${VM-Key-Terminator}" method="pronounced" type="name_spelled"/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="enter_pass">
|
||||||
|
<input pattern="(.+)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
<nomatch>
|
||||||
|
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
|
||||||
|
<action function="say" data="${VM-Key-Terminator}" method="pronounced" type="name_spelled"/>
|
||||||
|
</nomatch>
|
||||||
|
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="fail_auth">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-fail_auth.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="hello">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<!--<action function="play-file" data="voicemail/vm-hello.wav"/> -->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="goodbye">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-goodbye.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="abort">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-abort.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="message_count">
|
||||||
|
<input field="${VM-Total-New-Urgent-Messages}" pattern="^(0)$">
|
||||||
|
<nomatch>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="${VM-Total-New-Urgent-Messages}" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-urgent-new.wav"/>
|
||||||
|
<action function="phrase" phrase="plural_msg@voicemail_ivr" data="${VM-Total-New-Urgent-Messages}:voicemail/vm-message.wav:voicemail/vm-messages.wav"/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
<input field="${VM-Total-New-Messages}" pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="${VM-Total-New-Messages}" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-new.wav"/>
|
||||||
|
<action function="phrase" phrase="plural_msg@voicemail_ivr" data="${VM-Total-New-Messages}:voicemail/vm-message.wav:voicemail/vm-messages.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input field="${VM-Total-Saved-Messages}" pattern="^(0)$">
|
||||||
|
<nomatch>
|
||||||
|
<action function="play-file" data="currency/and.wav"/>
|
||||||
|
<action function="say" data="${VM-Total-Saved-Messages}" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-saved.wav"/>
|
||||||
|
<action function="phrase" phrase="plural_msg@voicemail_ivr" data="${VM-Total-Saved-Messages}:voicemail/vm-message.wav:voicemail/vm-messages.wav"/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="menu">
|
||||||
|
<input field="${VM-Total-New-Messages}" pattern="^(0)$">
|
||||||
|
<nomatch>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Play-New-Messages}:voicemail/vm-listen_new.wav"/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
<input field="${VM-Total-Saved-Messages}" pattern="^(0)$">
|
||||||
|
<nomatch>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Play-Saved-Messages}:voicemail/vm-listen_saved.wav"/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Config-Menu}:voicemail/vm-advanced.wav"/>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Terminator}:voicemail/vm-to_exit.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="config_menu">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Record-Greeting}:voicemail/vm-to_record_greeting.wav"/>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Choose-Greeting}:voicemail/vm-choose_greeting.wav"/>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Record-Name}:voicemail/vm-record_name2.wav"/>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Change-Password}:voicemail/vm-change_password.wav"/>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Menu}:voicemail/vm-main_menu.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="record_name">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_name1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="forward_ask_prepend">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Prepend}:voicemail/vm-forward_add_intro.wav"/>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Forward}:voicemail/vm-send_message_now.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="forward_ask_extension">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
|
||||||
|
<!--<action function="phrase" phrase="play-file" data="voicemail/vm-followed_by.wav"/>-->
|
||||||
|
<!--<action function="say" data="${VM-Key-Terminate}" method="pronounced" type="name_spelled"/>-->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="record_file_check">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Listen-File}:voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Save-File}:voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Record-File}:voicemail/vm-rerecord.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="record_urgent_check">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Urgent}:voicemail/vm-mark-urgent.wav"/>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Terminator}:voicemail/vm-continue.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="forward_prepend">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Prepend}:voicemail/vm-forward_add_intro.wav"/>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Forward}:voicemail/vm-send_message_now.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="forward_message_enter_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-followed_by.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="invalid_extension">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="listen_file_check">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<!--<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Next-Msg}:voicemail/vm-for_next_msg.wav"/>--> <!-- Not existant in callie recordings -->
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Listen-File}:voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Save-File}:voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Delete-File}:voicemail/vm-delete_recording.wav"/>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Forward}:voicemail/vm-to_forward.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input field="${VM-Message-Email}" pattern="^$">
|
||||||
|
<nomatch>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Email}:voicemail/vm-forward_to_email.wav"/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Callback}:voicemail/vm-return_call.wav"/>
|
||||||
|
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Forward}:voicemail/vm-to_forward.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="choose_greeting">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="choose_greeting_fail">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="record_greeting">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_greeting.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="record_message">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_message.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="greeting_selected">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="${VM-Preference-Greeting-File-Path}"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-greeting.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-selected.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="play_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-person.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-not_available.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="say_number">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="say_message_number">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-${VM-Message-Type}.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-message_number.wav"/>
|
||||||
|
<action function="say" data="${VM-Message-Number}" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="say_phone_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<!-- Note: Update this to marked-urgent,emailed and saved once new sound files are recorded -->
|
||||||
|
<macro name="ack">
|
||||||
|
<input pattern="^(too-small)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-too-small.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(undeleted)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(deleted)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(saved)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(emailed)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(marked-urgent)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="say_date">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="short_date_time"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="say_date_event">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="say" data="${VM-Message-Received-Epoch}" method="pronounced" type="short_date_time"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="play_message">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="${VM-Message-File-Path}"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="play_recording">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="${VM-Record-File-Path}"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="disk_quota_exceeded">
|
||||||
|
<input>
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-mailbox_full.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
</macros>
|
||||||
|
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
@ -0,0 +1,71 @@
|
|||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
<macro name="msgcount">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="execute" data="sleep(1000)"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
<!-- or -->
|
||||||
|
<!--<action function="speak-text" data="Usted tiene $1 mensajes"/>-->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="saydate">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="timespec">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="time_measurement"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="ip-addr">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="iterated" type="ip_address"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="ip_address"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="spell">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="spell-phonetic">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_phonetic"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="tts-timeleft">
|
||||||
|
<!-- The parser will visit each <input> tag and execute the actions in <match> or <nomatch> depending on the pattern param -->
|
||||||
|
<!-- If the function "break" is encountered all parsing will cease -->
|
||||||
|
<input pattern="(\d+):(\d+)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Quedan $1 minutos y $2 segundos $strftime(%Y-%m-%d)"/>
|
||||||
|
<action function="break"/>
|
||||||
|
</match>
|
||||||
|
<nomatch>
|
||||||
|
<action function="speak-text" data="Esa fue una entrada inválida."/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
<input pattern="(\d+) min (\d+) sec">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Quedan $1 minutos y $2 segundos $strftime(%Y-%m-%d)"/>
|
||||||
|
</match>
|
||||||
|
<nomatch>
|
||||||
|
<action function="speak-text" data="Esa fue una entrada inválida."/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
@ -0,0 +1,71 @@
|
|||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
<macro name="msgcount">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="execute" data="sleep(1000)"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
<!-- or -->
|
||||||
|
<!--<action function="speak-text" data="Usted tiene $1 mensajes"/>-->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="saydate">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="timespec">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="time_measurement"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="ip-addr">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="iterated" type="ip_address"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="ip_address"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="spell">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="spell-phonetic">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_phonetic"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="tts-timeleft">
|
||||||
|
<!-- The parser will visit each <input> tag and execute the actions in <match> or <nomatch> depending on the pattern param -->
|
||||||
|
<!-- If the function "break" is encountered all parsing will cease -->
|
||||||
|
<input pattern="(\d+):(\d+)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Quedan $1 minutos y $2 segundos $strftime(%Y-%m-%d)"/>
|
||||||
|
<action function="break"/>
|
||||||
|
</match>
|
||||||
|
<nomatch>
|
||||||
|
<action function="speak-text" data="Esa fue una entrada inválida."/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
<input pattern="(\d+) min (\d+) sec">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Quedan $1 minutos y $2 segundos $strftime(%Y-%m-%d)"/>
|
||||||
|
</match>
|
||||||
|
<nomatch>
|
||||||
|
<action function="speak-text" data="Esa fue una entrada inválida."/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
@ -0,0 +1,148 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
|
||||||
|
|
||||||
|
<macro name="demo_ivr_count">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="demo_ivr_main_menu" pause="100"> <!-- See conf/autoload_config/ivr.conf.xml for an example on how to use this macro in an IVR -->
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- string together several existing sound files to create one long greeting -->
|
||||||
|
<action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-this_ivr_will_let_you_test_features.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-you_may_exit_by_hanging_up.wav"/>
|
||||||
|
<!-- note that you can do more than just play files, e.g. have pauses and do TTS -->
|
||||||
|
|
||||||
|
<!-- Menu option 1: Call FreeSWITCH conference-->
|
||||||
|
<action function="play-file" data="ivr/ivr-enter_ext_pound.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://1500"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/1.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 2: Do FreeSWITCH echo test -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/2.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 3: Listen to Music on Hold -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/3.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 4: Register for ClueCon -->
|
||||||
|
<action function="play-file" data="ivr/ivr-register_for_cluecon.wav"/>
|
||||||
|
<action function="play-file" data="digits/4.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 5: Listen to screaming monkeys -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/5.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 6: Hear a sample submenu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/6.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 9: Repeat these options -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/9.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://2000"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the same as demo_ivr_main_menu except it is the "short" version -->
|
||||||
|
<!-- The short version has all the options but not the initial greeting -->
|
||||||
|
<macro name="demo_ivr_main_menu_short" pause="100">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- Menu option 1: Call FreeSWITCH conference-->
|
||||||
|
<action function="play-file" data="silence_stream://1000"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/1.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 2: Do FreeSWITCH echo test -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/2.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 3: Listen to Music on Hold -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/3.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 4: Hear a sample submenu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/4.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 5: Listen to screaming monkeys -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/5.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 9: Repeat these options -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/9.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://2000"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the "long" greeting for the demo_ivr_sub_menu -->
|
||||||
|
<macro name="demo_ivr_sub_menu">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-sample_submenu.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option *: Return to top menu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/star.wav"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the same as demo_ivr_sub_menu except it is the "short" version -->
|
||||||
|
<!-- The short version has all the options but not the initial greeting -->
|
||||||
|
<macro name="demo_ivr_sub_menu_short">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- Menu option *: Return to top menu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/star.wav"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
@ -0,0 +1,148 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
|
||||||
|
|
||||||
|
<macro name="demo_ivr_count">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="demo_ivr_main_menu" pause="100"> <!-- See conf/autoload_config/ivr.conf.xml for an example on how to use this macro in an IVR -->
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- string together several existing sound files to create one long greeting -->
|
||||||
|
<action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-this_ivr_will_let_you_test_features.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-you_may_exit_by_hanging_up.wav"/>
|
||||||
|
<!-- note that you can do more than just play files, e.g. have pauses and do TTS -->
|
||||||
|
|
||||||
|
<!-- Menu option 1: Call FreeSWITCH conference-->
|
||||||
|
<action function="play-file" data="ivr/ivr-enter_ext_pound.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://1500"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/1.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 2: Do FreeSWITCH echo test -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/2.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 3: Listen to Music on Hold -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/3.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 4: Register for ClueCon -->
|
||||||
|
<action function="play-file" data="ivr/ivr-register_for_cluecon.wav"/>
|
||||||
|
<action function="play-file" data="digits/4.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 5: Listen to screaming monkeys -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/5.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 6: Hear a sample submenu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/6.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 9: Repeat these options -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/9.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://2000"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the same as demo_ivr_main_menu except it is the "short" version -->
|
||||||
|
<!-- The short version has all the options but not the initial greeting -->
|
||||||
|
<macro name="demo_ivr_main_menu_short" pause="100">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- Menu option 1: Call FreeSWITCH conference-->
|
||||||
|
<action function="play-file" data="silence_stream://1000"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/1.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 2: Do FreeSWITCH echo test -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/2.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 3: Listen to Music on Hold -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/3.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 4: Hear a sample submenu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/4.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 5: Listen to screaming monkeys -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/5.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 9: Repeat these options -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/9.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://2000"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the "long" greeting for the demo_ivr_sub_menu -->
|
||||||
|
<macro name="demo_ivr_sub_menu">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-sample_submenu.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option *: Return to top menu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/star.wav"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the same as demo_ivr_sub_menu except it is the "short" version -->
|
||||||
|
<!-- The short version has all the options but not the initial greeting -->
|
||||||
|
<macro name="demo_ivr_sub_menu_short">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- Menu option *: Return to top menu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/star.wav"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
@ -0,0 +1,121 @@
|
|||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
<macro name="directory_intro">
|
||||||
|
<input pattern="^(last_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-enter_person.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-last_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-enter_person.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-first_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_search_by.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-first_name.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_search_by.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-last_name.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_min_search_digits">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-specify_mininum.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="directory/dir-letters_of_person_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count">
|
||||||
|
<input pattern="^0$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-no_matching_results.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="directory/dir-result_match.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count_too_large">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-too_many_result.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_last">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-no_more_results.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_item">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-result_number.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_at">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-at_extension.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_menu">
|
||||||
|
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_select_entry.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-for_next.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-for_prev.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-start_new_search.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
@ -0,0 +1,121 @@
|
|||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
<macro name="directory_intro">
|
||||||
|
<input pattern="^(last_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-enter_person.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-last_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-enter_person.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-first_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_search_by.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-first_name.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_search_by.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-last_name.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_min_search_digits">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-specify_mininum.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="directory/dir-letters_of_person_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count">
|
||||||
|
<input pattern="^0$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-no_matching_results.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="directory/dir-result_match.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count_too_large">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-too_many_result.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_last">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-no_more_results.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_item">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-result_number.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_at">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-at_extension.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_menu">
|
||||||
|
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_select_entry.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-for_next.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-for_prev.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-start_new_search.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
@ -0,0 +1,96 @@
|
|||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
|
||||||
|
<macro name="directory_intro">
|
||||||
|
<input pattern="^(last_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Introduzca las primeras letras del apellido de la persona."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Introduzca las primeras letras del nombre de la persona."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Para buscar por apellido, pulse $2"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Para buscar por nombre, pulse $2"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_min_search_digits">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Necesita especificar un mínimo de $1 letras del nombre buscado. Por favor intente de nuevo."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count">
|
||||||
|
<input pattern="^0$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="No hay resultados que coincidan con su busqueda. Por favor intente de nuevo."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 resultados coinciden con su busqueda."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count_too_large">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Su busqueda genera demasiados resultados. Por favor intente de nuevo."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_last">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="No hay más resultados."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_item">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Resultado número $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_menu">
|
||||||
|
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Para seleccionar este resultado pulse $1, para el resultado siguiente pulse $2, para el resultado previo pulse $3, para empezar una nueva busqueda pulse $4"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_at">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="en la extensión $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="directory_result_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
@ -0,0 +1,96 @@
|
|||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
|
||||||
|
<macro name="directory_intro">
|
||||||
|
<input pattern="^(last_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Ingrese las primeras letras del apellido de la persona."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Ingrese las primeras letras del nombre de la persona."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Para buscar por apellido, pulse $2"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Para buscar por nombre, pulse $2"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_min_search_digits">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Necesita especificar un mínimo de $1 letras del nombre buscado. Por favor intente de nuevo."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count">
|
||||||
|
<input pattern="^0$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="No hay resultados que coincidan con su busqueda. Por favor intente de nuevo."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 resultados coinciden con su busqueda."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count_too_large">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Su busqueda genera demasiados resultados. Por favor intente de nuevo."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_last">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="No hay más resultados."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_item">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Resultado número $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_menu">
|
||||||
|
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Para seleccionar este resultado pulse $1, para el resultado siguiente pulse $2, para el resultado previo pulse $3, para empezar una nueva busqueda pulse $4"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_at">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="en la extensión $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="directory_result_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
8
src/mod/event_handlers/mod_rayo/conf/lang/es/es_ES.xml
Normal file
8
src/mod/event_handlers/mod_rayo/conf/lang/es/es_ES.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<include>
|
||||||
|
<language name="es" sound-path="$${sounds_dir}/es/ES/cristina" tts-engine="cepstral" tts-voice="marta">
|
||||||
|
<X-PRE-PROCESS cmd="include" data="demo/*-es-ES.xml"/> <!-- Note: this now grabs whole subdir, previously grabbed only demo.xml -->
|
||||||
|
<!--voicemail_es_ES_tts is purely implemented with tts, we have the files based one that is the default. -->
|
||||||
|
<X-PRE-PROCESS cmd="include" data="vm/sounds-es-ES.xml"/> <!-- vm/tts.xml if you want to use tts and have cepstral -->
|
||||||
|
<X-PRE-PROCESS cmd="include" data="dir/sounds-es-ES.xml"/> <!-- dir/tts.xml if you want to use tts and have cepstral -->
|
||||||
|
</language>
|
||||||
|
</include>
|
8
src/mod/event_handlers/mod_rayo/conf/lang/es/es_MX.xml
Normal file
8
src/mod/event_handlers/mod_rayo/conf/lang/es/es_MX.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<include>
|
||||||
|
<language name="es" sound-path="$${sounds_dir}/es/mx/maria" tts-engine="cepstral" tts-voice="marta">
|
||||||
|
<X-PRE-PROCESS cmd="include" data="demo/*-es-MX.xml"/> <!-- Note: this now grabs whole subdir, previously grabbed only demo.xml -->
|
||||||
|
<!--voicemail_es_MX_tts is purely implemented with tts, we have the files based one that is the default. -->
|
||||||
|
<X-PRE-PROCESS cmd="include" data="vm/sounds-es-MX.xml"/> <!-- vm/tts.xml if you want to use tts and have cepstral -->
|
||||||
|
<X-PRE-PROCESS cmd="include" data="dir/sounds-es-MX.xml"/> <!-- dir/tts.xml if you want to use tts and have cepstral -->
|
||||||
|
</language>
|
||||||
|
</include>
|
404
src/mod/event_handlers/mod_rayo/conf/lang/es/vm/sounds-es-ES.xml
Normal file
404
src/mod/event_handlers/mod_rayo/conf/lang/es/vm/sounds-es-ES.xml
Normal file
@ -0,0 +1,404 @@
|
|||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
<macro name="voicemail_enter_id">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_pass">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_fail_auth">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-fail_auth.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_hello">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!--<action function="play-file" data="voicemail/vm-hello.wav"/> -->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_goodbye">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-goodbye.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_abort">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-abort.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_message_count">
|
||||||
|
<input pattern="^(1):(.*)$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="play-file" data="digits/un.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$2.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(\d+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$2_s.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<!-- To listen to new messages -->
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_new.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To listen to saved messages -->
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_saved.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- For advanced options -->
|
||||||
|
<action function="play-file" data="voicemail/vm-advanced.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To exit -->
|
||||||
|
<action function="play-file" data="voicemail/vm-to_exit.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_phonetic"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_config_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<!-- To record a greeting -->
|
||||||
|
<action function="play-file" data="voicemail/vm-to_record_greeting.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To choose greeting -->
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To record your name -->
|
||||||
|
<action function="play-file" data="voicemail/vm-record_name2.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To change password -->
|
||||||
|
<action function="play-file" data="voicemail/vm-change_password.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To return to main menu -->
|
||||||
|
<action function="play-file" data="voicemail/vm-main_menu.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_name1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-rerecord.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_urgent_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-mark-urgent.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-continue.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_prepend">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_add_intro.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-send_message_now.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_message_enter_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-followed_by.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_invalid_extension">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_listen_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_to_email.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-return_call.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-return_call.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting_fail">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_greeting.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_message">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_message.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_greeting_selected">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-greeting.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-selected.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_play_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-person.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-not_available.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_number">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_message_number">
|
||||||
|
<input pattern="^([a-z]+):(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-message_number.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_phone_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<!-- Note: Update this to marked-urgent,emailed and saved once new sound files are recorded -->
|
||||||
|
<macro name="voicemail_ack">
|
||||||
|
<input pattern="^(too-small)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-too-small.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(deleted)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(saved)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(emailed)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(marked-urgent)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_date">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_disk_quota_exceeded">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-mailbox_full.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_announce_ext">
|
||||||
|
<input pattern="^([^\:]+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_lot_full">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="tone_stream://%(275,10,600);%(275,100,300)"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_lot_empty">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="tone_stream://%(275,10,600);%(275,100,300)"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
404
src/mod/event_handlers/mod_rayo/conf/lang/es/vm/sounds-es-MX.xml
Normal file
404
src/mod/event_handlers/mod_rayo/conf/lang/es/vm/sounds-es-MX.xml
Normal file
@ -0,0 +1,404 @@
|
|||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
<macro name="voicemail_enter_id">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_pass">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_fail_auth">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-fail_auth.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_hello">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!--<action function="play-file" data="voicemail/vm-hello.wav"/> -->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_goodbye">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-goodbye.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_abort">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-abort.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_message_count">
|
||||||
|
<input pattern="^(1):(.*)$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="play-file" data="digits/un.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$2.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(\d+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$2.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<!-- To listen to new messages -->
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_new.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To listen to saved messages -->
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_saved.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- For advanced options -->
|
||||||
|
<action function="play-file" data="voicemail/vm-advanced.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To exit -->
|
||||||
|
<action function="play-file" data="voicemail/vm-to_exit.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_phonetic"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_config_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<!-- To record a greeting -->
|
||||||
|
<action function="play-file" data="voicemail/vm-to_record_greeting.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To choose greeting -->
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To record your name -->
|
||||||
|
<action function="play-file" data="voicemail/vm-record_name2.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To change password -->
|
||||||
|
<action function="play-file" data="voicemail/vm-change_password.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To return to main menu -->
|
||||||
|
<action function="play-file" data="voicemail/vm-main_menu.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_name1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-rerecord.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_urgent_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-mark-urgent.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-continue.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_prepend">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_add_intro.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-send_message_now.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_message_enter_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-followed_by.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_invalid_extension">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_listen_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_to_email.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-return_call.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-return_call.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting_fail">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_greeting.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_message">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_message.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_greeting_selected">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-greeting.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-selected.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_play_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-person.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-not_available.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_number">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_message_number">
|
||||||
|
<input pattern="^([a-z]+):(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-message_number.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_phone_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<!-- Note: Update this to marked-urgent,emailed and saved once new sound files are recorded -->
|
||||||
|
<macro name="voicemail_ack">
|
||||||
|
<input pattern="^(too-small)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-too-small.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(deleted)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(saved)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(emailed)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(marked-urgent)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_date">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_disk_quota_exceeded">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-mailbox_full.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_announce_ext">
|
||||||
|
<input pattern="^([^\:]+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_lot_full">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="tone_stream://%(275,10,600);%(275,100,300)"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_lot_empty">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="tone_stream://%(275,10,600);%(275,100,300)"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
238
src/mod/event_handlers/mod_rayo/conf/lang/es/vm/tts-es-ES.xml
Normal file
238
src/mod/event_handlers/mod_rayo/conf/lang/es/vm/tts-es-ES.xml
Normal file
@ -0,0 +1,238 @@
|
|||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
<macro name="voicemail_enter_id">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Por favor introduzca su número de usuario, seguido por $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_pass">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Por favor introduzca su contraseña, seguido por $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_fail_auth">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Inicio de sesión incorrecto."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_hello">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Bienvenido a su buzón de voz."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_goodbye">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Adiós."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_abort">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Demasiados intentos fallidos."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_message_count">
|
||||||
|
<input pattern="^1:(.*)$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Usted tiene 1 $1 mensaje en la bandeja de entrada ${voicemail_current_folder}."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(\d+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Usted tiene $1 $2 mensajes en la bandeja de entrada ${voicemail_current_folder}."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Para escuchar mensajes nuevos, pulse $1. Para escuchar mensajes guardados, pulse $2. Para opciones avanzadas, pulse $3. Para salir, pulse $4."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
|
||||||
|
<macro name="voicemail_config_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Para grabar un saludo, pulse $1. Para elegir un saludo, pulse $2. Para grabar su nombre, pulse $3. Para cambiar su contraseña, pulse $5. Para el menú principal, pulse $5."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
|
||||||
|
<macro name="voicemail_record_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Por favor grabe su nombre después de la señal, pulse cualquier tecla o deje de hablar para poner fin a la grabación."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Para escuchar la grabación, pulse $1. Para guardar la grabación, pulse $2. Para regrabar, pulse $3."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_urgent_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Para marcar este mensaje como urgente, pulse $1. Para continuar, pulse $2."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_invalid_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 no es una extensión válida."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_message_enter_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Introduzca la extensión a la cual quiere enviar este mensaje, seguido de $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_prepend">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Para grabar un saludo, pulse $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_listen_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Para escuchar la grabación, pulse $1. Para guardar la grabación, pulse $2. Para eliminar la grabación, pulse $3. Para enviar la grabación a su e-mail, pulse $4. Para devolver la llamada, pulse $5. Para enviar este mensaje a otra extensión, pulse $6."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Elija un saludo entre 1 y 9."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting_fail">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Valor inválido."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Grabe su saludo después de la señal, pulse cualquier tecla o deje de hablar para poner fin a la grabación."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_message">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Grabe su mensaje después de la señal, pulse cualquier tecla o deje de hablar para poner fin a la grabación."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_greeting_selected">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Saludo $1 seleccionado."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_play_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 no está disponible."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_message_number">
|
||||||
|
<input pattern="^([a-z]+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 mensaje número $2."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_phone_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_ack">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="mensaje $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_date">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="${strftime($1|%A, %B %d %Y, %I:%M %p)}"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
238
src/mod/event_handlers/mod_rayo/conf/lang/es/vm/tts-es-MX.xml
Normal file
238
src/mod/event_handlers/mod_rayo/conf/lang/es/vm/tts-es-MX.xml
Normal file
@ -0,0 +1,238 @@
|
|||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
<macro name="voicemail_enter_id">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Por favor ingrese su número de usuario, seguido por $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_pass">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Por favor ingrese su contraseña, seguido por $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_fail_auth">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Inicio de sesión incorrecto."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_hello">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Bienvenido a su buzón de voz."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_goodbye">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Adiós."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_abort">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Demasiados intentos fallidos."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_message_count">
|
||||||
|
<input pattern="^1:(.*)$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Usted tiene 1 $1 mensaje en la bandeja de entrada ${voicemail_current_folder}."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(\d+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Usted tiene $1 $2 mensajes en la bandeja de entrada ${voicemail_current_folder}."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Para escuchar mensajes nuevos, pulse $1. Para escuchar mensajes guardados, pulse $2. Para opciones avanzadas, pulse $3. Para salir, pulse $4."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
|
||||||
|
<macro name="voicemail_config_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Para grabar un saludo, pulse $1. Para elegir un saludo, pulse $2. Para grabar su nombre, pulse $3. Para cambiar su contraseña, pulse $5. Para el menú principal, pulse $5."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
|
||||||
|
<macro name="voicemail_record_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Después del tono, por favor anote su nombre, pulse cualquier tecla o deje de hablar para poner fin a la grabación."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Para escuchar la grabación, pulse $1. Para guardar la grabación, pulse $2. Para regrabar, pulse $3."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_urgent_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Para marcar este mensaje como urgente, pulse $1. Para continuar, pulse $2."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_invalid_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 no es una extensión válida."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_message_enter_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Introduzca la extensión a la cual quiere enviar este mensaje, seguido de $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_prepend">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Para grabar un saludo, pulse $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_listen_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Para escuchar la grabación, pulse $1. Para guardar la grabación, pulse $2. Para eliminar la grabación, pulse $3. Para enviar la grabación a su e-mail, pulse $4. Para devolver la llamada, pulse $5. Para enviar este mensaje a otra extensión, pulse $6."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Elija un saludo entre 1 y 9."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting_fail">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Valor inválido."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Grabe su saludo después del tono, pulse cualquier tecla o deje de hablar para poner fin a la grabación."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_message">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Grabe su mensaje después del tono, pulse cualquier tecla o deje de hablar para poner fin a la grabación."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_greeting_selected">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Saludo $1 seleccionado."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_play_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 no está disponible."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_message_number">
|
||||||
|
<input pattern="^([a-z]+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 mensaje número $2."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_phone_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_ack">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="mensaje $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_date">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="${strftime($1|%A, %B %d %Y, %I:%M %p)}"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
29
src/mod/event_handlers/mod_rayo/conf/lang/fr/demo/demo.xml
Normal file
29
src/mod/event_handlers/mod_rayo/conf/lang/fr/demo/demo.xml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<include>
|
||||||
|
<macro name="msgcount">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="tuas.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="messages.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="timeleft">
|
||||||
|
<input pattern="(\d+):(\d+)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="il reste $1 minutes et $2 secondes"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
130
src/mod/event_handlers/mod_rayo/conf/lang/fr/dir/sounds.xml
Normal file
130
src/mod/event_handlers/mod_rayo/conf/lang/fr/dir/sounds.xml
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
<include>
|
||||||
|
|
||||||
|
<macro name="directory_intro">
|
||||||
|
<input pattern="^(last_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-enter-person.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-last_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-enter-person.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-first_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_search_by.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-first_name.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_search_by.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-last_name.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_min_search_digits">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-specify_mininum_first.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="directory/dir-letters_of_person_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count">
|
||||||
|
<input pattern="^0$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-no_match_entry.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="directory/dir-result_match.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count_too_large">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_many_result.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_last">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-no_more_result.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_item">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-result_number.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_at">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-at_extension.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_menu">
|
||||||
|
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_select_entry.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-for_next.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-for_prev.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-to_make_new_search.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
110
src/mod/event_handlers/mod_rayo/conf/lang/fr/dir/tts.xml
Normal file
110
src/mod/event_handlers/mod_rayo/conf/lang/fr/dir/tts.xml
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
<include>
|
||||||
|
|
||||||
|
<macro name="directory_intro">
|
||||||
|
<input pattern="^(last_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Veuillez entrer les premières lettres du nom de famille"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Veuillez entrer les premières lettres du prénom"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="pour chercher par prénom, tapez $2"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="pour chercher par nom de famille, tapez $2"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_min_search_digits">
|
||||||
|
<input pattern="^(1)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Vous devez entrer au minimum une lettre du nom de la personne, essayez encore"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Vous devez entrer au minimum $1 lettres du nom de la personne, essayer encore"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count">
|
||||||
|
<input pattern="^0$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Votre recherche n'a retournée aucun résultat, essayez encore"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 résultats correspondent à votre recherche"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count_too_large">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Votre recherche retourne trop de résultats, essayer encore"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_last">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Fin des résultats."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_item">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Résultat numéro $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_menu">
|
||||||
|
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Pour sélectionner ce nom, tapez $1, pour le nom suivant tapez $2, pour le nom précédent, tapez $3, pour faire une nouvelle recherche, tapez $4"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_at">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="au poste $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="directory_result_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
23
src/mod/event_handlers/mod_rayo/conf/lang/fr/fr.xml
Normal file
23
src/mod/event_handlers/mod_rayo/conf/lang/fr/fr.xml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<include>
|
||||||
|
<language name="fr" say-module="fr" sound-prefix="$${sounds_dir}/fr/ca/june" tts-engine="cepstral" tts-voice="david">
|
||||||
|
<phrases>
|
||||||
|
<macros>
|
||||||
|
<X-PRE-PROCESS cmd="include" data="demo/demo.xml"/>
|
||||||
|
<!-- voicemail_fr_tts is purely implemented with tts, we need a files based implementation too -->
|
||||||
|
<X-PRE-PROCESS cmd="include" data="vm/sounds.xml"/>
|
||||||
|
<X-PRE-PROCESS cmd="include" data="dir/sounds.xml"/> <!-- dir/tts.xml if you want to use tts and have cepstral -->
|
||||||
|
</macros>
|
||||||
|
</phrases>
|
||||||
|
</language>
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
255
src/mod/event_handlers/mod_rayo/conf/lang/fr/vm/sounds.xml
Normal file
255
src/mod/event_handlers/mod_rayo/conf/lang/fr/vm/sounds.xml
Normal file
@ -0,0 +1,255 @@
|
|||||||
|
<include>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_id">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Entrez votre Identification, suivi par $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_pass">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Entrez votre code, suivi par $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_fail_auth">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Identification incorrecte."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_hello">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Bienvenue sur votre répondeur."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_goodbye">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Au revoir."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_abort">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Trop de tentatives ont échouées."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_message_count">
|
||||||
|
<input pattern="^([^:]+):urgent-new">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Vous avez $1 nouveaux messages urgents dans le répertoire ${voicemail_current_folder}."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^([^:]+):new">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Vous avez $1 nouveaux messages dans le répertoire ${voicemail_current_folder}."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^([^:]+):saved">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Vous avez $1 messages sauvegardés dans le répertoire ${voicemail_current_folder}."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Pour écouter les nouveaux messages, tapez $1, Pour écouter les messages enregistrés, tapez $2, Pour les options avancées, tapez $3, pour sortir, tapez $4."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_config_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="pour enregistrer un message d'accueil, tapez $1, Pour choisir votre message d'accueil, tapez $2, Pour enregistrer votre nom, tapez $3, Pour changer votre mot de passe, tapez $4, Pour retourner au menu principal, tapez $5."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="enregistrez votre nom après le bip, puis tapez une touche, ou arrêtez de parler pour arrêter l'enregistrement."/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Pour écouter l'enregistrement, tapez $1, pour sauvegarder l'enregistrement, tapez $2, Pour réenregistrer, tapez $3."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_urgent_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Pour indiquer que ce message est urgent, tapez $1, Pour continuer, tapez $2."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_listen_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])(:(.*))?$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Pour réécouter l'enregistrement à nouveau, tapez $1, Pour sauvegarder l'enregistrement, tapez $2, Pour supprimer l'enregistrement, tapez $3, pour transférer l'enregistrement à votre email $8, tapez $4, Pour appeler l'auteur du message, tapez $5, Pour transférer ce message à un autre numéro, tapez $6."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="choisissez un message d'accueil entre 1 et 3."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting_fail">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="valeur incorrecte."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="enregistrez votre message d'accueil après le bip, puis tapez une touche ou arrêtez de parler pour arrêter l'enregistrement."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_message">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="enregistrez votre message après le bip, puis tapez une touche ou arrêtez de parler pour arrêter l'enregistrement."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_greeting_selected">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="message d'accueil numéro $1 sélectionné."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_play_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 n'est pas disponible."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_message_number">
|
||||||
|
<input pattern="^new:(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="nouveau message numéro $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^saved:(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="message sauvegardé numéro $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_phone_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_ack">
|
||||||
|
<input pattern="^(too-small)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="message trop court"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(deleted)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="message supprimé"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(saved)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="message sauvegardé"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(emailed)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="message envoyé"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(marked-urgent)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="message marqué urgent"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_date">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="${strftime($1|%e/%m/%Y, %H heures %M)}"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
157
src/mod/event_handlers/mod_rayo/conf/lang/he/demo/demo-ivr.xml
Normal file
157
src/mod/event_handlers/mod_rayo/conf/lang/he/demo/demo-ivr.xml
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
<include>
|
||||||
|
|
||||||
|
<macro name="demo_ivr_count">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="demo_ivr_main_menu" pause="100"> <!-- See conf/autoload_config/ivr.conf.xml for an example on how to use this macro in an IVR -->
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- string together several existing sound files to create one long greeting -->
|
||||||
|
<action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-this_ivr_will_let_you_test_features.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-you_may_exit_by_hanging_up.wav"/>
|
||||||
|
<!-- note that you can do more than just play files, e.g. have pauses and do TTS -->
|
||||||
|
|
||||||
|
<!-- Menu option 1: Call FreeSWITCH conference-->
|
||||||
|
<action function="play-file" data="ivr/ivr-enter_ext_pound.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://1500"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/1.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 2: Do FreeSWITCH echo test -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/2.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 3: Listen to Music on Hold -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/3.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 4: Register for ClueCon -->
|
||||||
|
<action function="play-file" data="ivr/ivr-register_for_cluecon.wav"/>
|
||||||
|
<action function="play-file" data="digits/4.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 5: Listen to screaming monkeys -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/5.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 6: Hear a sample submenu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/6.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 9: Repeat these options -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/9.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://2000"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the same as demo_ivr_main_menu except it is the "short" version -->
|
||||||
|
<!-- The short version has all the options but not the initial greeting -->
|
||||||
|
<macro name="demo_ivr_main_menu_short" pause="100">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- Menu option 1: Call FreeSWITCH conference-->
|
||||||
|
<action function="play-file" data="silence_stream://1000"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/1.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 2: Do FreeSWITCH echo test -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/2.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 3: Listen to Music on Hold -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/3.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 4: Hear a sample submenu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/4.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 5: Listen to screaming monkeys -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/5.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 9: Repeat these options -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/9.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://2000"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the "long" greeting for the demo_ivr_sub_menu -->
|
||||||
|
<macro name="demo_ivr_sub_menu">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-sample_submenu.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option *: Return to top menu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/star.wav"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the same as demo_ivr_sub_menu except it is the "short" version -->
|
||||||
|
<!-- The short version has all the options but not the initial greeting -->
|
||||||
|
<macro name="demo_ivr_sub_menu_short">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- Menu option *: Return to top menu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/star.wav"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
82
src/mod/event_handlers/mod_rayo/conf/lang/he/demo/demo.xml
Normal file
82
src/mod/event_handlers/mod_rayo/conf/lang/he/demo/demo.xml
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
<include>
|
||||||
|
<macro name="msgcount">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="execute" data="sleep(1000)"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
<!-- or -->
|
||||||
|
<!--<action function="speak-text" data="you have $1 messages"/>-->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="saydate">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="timespec">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="time_measurement"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="ip-addr">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="iterated" type="ip_address"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="ip_address"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="spell">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="spell-phonetic">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_phonetic"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="tts-timeleft">
|
||||||
|
<!-- The parser will visit each <input> tag and execute the actions in <match> or <nomatch> depending on the pattern param -->
|
||||||
|
<!-- If the function "break" is encountered all parsing will cease -->
|
||||||
|
<input pattern="(\d+):(\d+)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
|
||||||
|
<action function="break"/>
|
||||||
|
</match>
|
||||||
|
<nomatch>
|
||||||
|
<action function="speak-text" data="That input was invalid."/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
<input pattern="(\d+) min (\d+) sec">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
|
||||||
|
</match>
|
||||||
|
<nomatch>
|
||||||
|
<action function="speak-text" data="That input was invalid."/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
130
src/mod/event_handlers/mod_rayo/conf/lang/he/dir/sounds.xml
Normal file
130
src/mod/event_handlers/mod_rayo/conf/lang/he/dir/sounds.xml
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
<include>
|
||||||
|
|
||||||
|
<macro name="directory_intro">
|
||||||
|
<input pattern="^(last_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-enter_person.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-last_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-enter_person.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-first_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_search_by.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-first_name.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_search_by.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-last_name.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_min_search_digits">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-specify_mininum.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="directory/dir-letters_of_person_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count">
|
||||||
|
<input pattern="^0$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-no_matching_results.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="directory/dir-result_match.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count_too_large">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-too_many_result.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_last">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-no_more_results.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_item">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-result_number.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_at">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-at_extension.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_menu">
|
||||||
|
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_select_entry.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-for_next.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-for_prev.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-start_new_search.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
22
src/mod/event_handlers/mod_rayo/conf/lang/he/he.xml
Normal file
22
src/mod/event_handlers/mod_rayo/conf/lang/he/he.xml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<include>
|
||||||
|
<language name="he" sound-prefix="$${sounds_dir}/he/daniel" tts-engine="cepstral" tts-voice="daniel">
|
||||||
|
<phrases>
|
||||||
|
<macros>
|
||||||
|
<X-PRE-PROCESS cmd="include" data="demo/*.xml"/> <!-- Note: this now grabs whole subdir, previously grabbed only demo.xml -->
|
||||||
|
<X-PRE-PROCESS cmd="include" data="vm/sounds.xml"/>
|
||||||
|
<X-PRE-PROCESS cmd="include" data="dir/sounds.xml"/>
|
||||||
|
</macros>
|
||||||
|
</phrases>
|
||||||
|
</language>
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
417
src/mod/event_handlers/mod_rayo/conf/lang/he/vm/sounds.xml
Normal file
417
src/mod/event_handlers/mod_rayo/conf/lang/he/vm/sounds.xml
Normal file
@ -0,0 +1,417 @@
|
|||||||
|
<include>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_id">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_pass">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_fail_auth">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-fail_auth.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_hello">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!--<action function="play-file" data="voicemail/vm-hello.wav"/> -->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_goodbye">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-goodbye.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_abort">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-abort.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_message_count">
|
||||||
|
<input pattern="^(1):(.*)$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$2.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(\d+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$2.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<!-- To listen to new messages -->
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_new.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To listen to saved messages -->
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_saved.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- For advanced options -->
|
||||||
|
<action function="play-file" data="voicemail/vm-advanced.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To exit -->
|
||||||
|
<action function="play-file" data="voicemail/vm-to_exit.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_phonetic"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_config_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<!-- To record a greeting -->
|
||||||
|
<action function="play-file" data="voicemail/vm-to_record_greeting.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To choose greeting -->
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To record your name -->
|
||||||
|
<action function="play-file" data="voicemail/vm-record_name2.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To change password -->
|
||||||
|
<action function="play-file" data="voicemail/vm-change_password.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To return to main menu -->
|
||||||
|
<action function="play-file" data="voicemail/vm-main_menu.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_name1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-rerecord.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_urgent_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-mark-urgent.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-continue.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_prepend">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_add_intro.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-send_message_now.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_message_enter_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-followed_by.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_invalid_extension">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_listen_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_to_email.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-return_call.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-return_call.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting_fail">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_greeting.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_message">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_message.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_greeting_selected">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-greeting.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-selected.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_play_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-person.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-not_available.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_number">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_message_number">
|
||||||
|
<input pattern="^([a-z]+):(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-message_number.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_phone_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<!-- Note: Update this to marked-urgent,emailed and saved once new sound files are recorded -->
|
||||||
|
<macro name="voicemail_ack">
|
||||||
|
<input pattern="^(too-small)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-too-small.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(deleted)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(saved)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(emailed)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(marked-urgent)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_date">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_disk_quota_exceeded">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-mailbox_full.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_announce_ext">
|
||||||
|
<input pattern="^([^\:]+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_lot_full">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="tone_stream://%(275,10,600);%(275,100,300)"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_lot_empty">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="tone_stream://%(275,10,600);%(275,100,300)"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
@ -0,0 +1,148 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
|
||||||
|
|
||||||
|
<macro name="demo_ivr_count">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="demo_ivr_main_menu" pause="100"> <!-- See conf/autoload_config/ivr.conf.xml for an example on how to use this macro in an IVR -->
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- string together several existing sound files to create one long greeting -->
|
||||||
|
<action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-this_ivr_will_let_you_test_features.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-you_may_exit_by_hanging_up.wav"/>
|
||||||
|
<!-- note that you can do more than just play files, e.g. have pauses and do TTS -->
|
||||||
|
|
||||||
|
<!-- Menu option 1: Call FreeSWITCH conference-->
|
||||||
|
<action function="play-file" data="ivr/ivr-enter_ext_pound.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://1500"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/1.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 2: Do FreeSWITCH echo test -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/2.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 3: Listen to Music on Hold -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/3.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 4: Register for ClueCon -->
|
||||||
|
<action function="play-file" data="ivr/ivr-register_for_cluecon.wav"/>
|
||||||
|
<action function="play-file" data="digits/4.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 5: Listen to screaming monkeys -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/5.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 6: Hear a sample submenu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/6.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 9: Repeat these options -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/9.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://2000"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the same as demo_ivr_main_menu except it is the "short" version -->
|
||||||
|
<!-- The short version has all the options but not the initial greeting -->
|
||||||
|
<macro name="demo_ivr_main_menu_short" pause="100">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- Menu option 1: Call FreeSWITCH conference-->
|
||||||
|
<action function="play-file" data="silence_stream://1000"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/1.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 2: Do FreeSWITCH echo test -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/2.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 3: Listen to Music on Hold -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/3.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 4: Hear a sample submenu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/4.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 5: Listen to screaming monkeys -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/5.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 9: Repeat these options -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/9.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://2000"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the "long" greeting for the demo_ivr_sub_menu -->
|
||||||
|
<macro name="demo_ivr_sub_menu">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-sample_submenu.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option *: Return to top menu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/star.wav"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the same as demo_ivr_sub_menu except it is the "short" version -->
|
||||||
|
<!-- The short version has all the options but not the initial greeting -->
|
||||||
|
<macro name="demo_ivr_sub_menu_short">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- Menu option *: Return to top menu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/star.wav"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
@ -0,0 +1,148 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
|
||||||
|
|
||||||
|
<macro name="demo_ivr_count">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="demo_ivr_main_menu" pause="100"> <!-- See conf/autoload_config/ivr.conf.xml for an example on how to use this macro in an IVR -->
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- string together several existing sound files to create one long greeting -->
|
||||||
|
<action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-this_ivr_will_let_you_test_features.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-you_may_exit_by_hanging_up.wav"/>
|
||||||
|
<!-- note that you can do more than just play files, e.g. have pauses and do TTS -->
|
||||||
|
|
||||||
|
<!-- Menu option 1: Call FreeSWITCH conference-->
|
||||||
|
<action function="play-file" data="ivr/ivr-enter_ext_pound.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://1500"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/1.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 2: Do FreeSWITCH echo test -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/2.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 3: Listen to Music on Hold -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/3.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 4: Register for ClueCon -->
|
||||||
|
<action function="play-file" data="ivr/ivr-register_for_cluecon.wav"/>
|
||||||
|
<action function="play-file" data="digits/4.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 5: Listen to screaming monkeys -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/5.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 6: Hear a sample submenu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/6.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 9: Repeat these options -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/9.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://2000"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the same as demo_ivr_main_menu except it is the "short" version -->
|
||||||
|
<!-- The short version has all the options but not the initial greeting -->
|
||||||
|
<macro name="demo_ivr_main_menu_short" pause="100">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- Menu option 1: Call FreeSWITCH conference-->
|
||||||
|
<action function="play-file" data="silence_stream://1000"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/1.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 2: Do FreeSWITCH echo test -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/2.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 3: Listen to Music on Hold -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/3.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 4: Hear a sample submenu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/4.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 5: Listen to screaming monkeys -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/5.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 9: Repeat these options -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/9.wav"/>
|
||||||
|
<action function="play-file" data="silence_stream://2000"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the "long" greeting for the demo_ivr_sub_menu -->
|
||||||
|
<macro name="demo_ivr_sub_menu">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-sample_submenu.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option *: Return to top menu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/star.wav"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the same as demo_ivr_sub_menu except it is the "short" version -->
|
||||||
|
<!-- The short version has all the options but not the initial greeting -->
|
||||||
|
<macro name="demo_ivr_sub_menu_short">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- Menu option *: Return to top menu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/star.wav"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
@ -0,0 +1,71 @@
|
|||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
<macro name="msgcount">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="execute" data="sleep(1000)"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
<!-- or -->
|
||||||
|
<!--<action function="speak-text" data="you have $1 messages"/>-->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="saydate">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="timespec">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="time_measurement"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="ip-addr">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="iterated" type="ip_address"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="ip_address"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="spell">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="spell-phonetic">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_phonetic"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="tts-timeleft">
|
||||||
|
<!-- The parser will visit each <input> tag and execute the actions in <match> or <nomatch> depending on the pattern param -->
|
||||||
|
<!-- If the function "break" is encountered all parsing will cease -->
|
||||||
|
<input pattern="(\d+):(\d+)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Faltam $1 minutos, $2 segundos $strftime(%Y-%m-%d)"/>
|
||||||
|
<action function="break"/>
|
||||||
|
</match>
|
||||||
|
<nomatch>
|
||||||
|
<action function="speak-text" data="Essa opção não é valida."/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
<input pattern="(\d+) min (\d+) sec">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Faltam $1 minutos, $2 segundos $strftime(%Y-%m-%d)"/>
|
||||||
|
</match>
|
||||||
|
<nomatch>
|
||||||
|
<action function="speak-text" data="Essa opção não é valida."/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
@ -0,0 +1,71 @@
|
|||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
<macro name="msgcount">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="execute" data="sleep(1000)"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
<!-- or -->
|
||||||
|
<!--<action function="speak-text" data="Você tem $1 mensagens"/>-->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="saydate">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="timespec">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="time_measurement"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="ip-addr">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="iterated" type="ip_address"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="ip_address"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="spell">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="spell-phonetic">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_phonetic"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="tts-timeleft">
|
||||||
|
<!-- The parser will visit each <input> tag and execute the actions in <match> or <nomatch> depending on the pattern param -->
|
||||||
|
<!-- If the function "break" is encountered all parsing will cease -->
|
||||||
|
<input pattern="(\d+):(\d+)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Faltam $1 minutos, $2 segundos $strftime(%Y-%m-%d)"/>
|
||||||
|
<action function="break"/>
|
||||||
|
</match>
|
||||||
|
<nomatch>
|
||||||
|
<action function="speak-text" data="Essa era uma entrada inválida."/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
<input pattern="(\d+) min (\d+) sec">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Faltam $1 minutos, $2 segundos $strftime(%Y-%m-%d)"/>
|
||||||
|
</match>
|
||||||
|
<nomatch>
|
||||||
|
<action function="speak-text" data="Essa era uma entrada inválida."/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
@ -0,0 +1,121 @@
|
|||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
<macro name="directory_intro">
|
||||||
|
<input pattern="^(last_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-enter_person.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-last_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-enter_person.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-first_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_search_by.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-first_name.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_search_by.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-last_name.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_min_search_digits">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-specify_mininum.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="directory/dir-letters_of_person_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count">
|
||||||
|
<input pattern="^0$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-no_matching_results.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="directory/dir-result_match.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count_too_large">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-too_many_result.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_last">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-no_more_results.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_item">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-result_number.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_at">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-at_extension.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_menu">
|
||||||
|
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_select_entry.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-for_next.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-for_prev.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-start_new_search.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
@ -0,0 +1,121 @@
|
|||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
<macro name="directory_intro">
|
||||||
|
<input pattern="^(last_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-enter_person.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-last_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-enter_person.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-first_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_search_by.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-first_name.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_search_by.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-last_name.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_min_search_digits">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-specify_mininum.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="directory/dir-letters_of_person_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count">
|
||||||
|
<input pattern="^0$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-no_matching_results.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="directory/dir-result_match.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count_too_large">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-too_many_result.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_last">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-no_more_results.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_item">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-result_number.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_at">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-at_extension.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_menu">
|
||||||
|
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_select_entry.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-for_next.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-for_prev.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-start_new_search.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
@ -0,0 +1,96 @@
|
|||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
|
||||||
|
<macro name="directory_intro">
|
||||||
|
<input pattern="^(last_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Por favor marque as primeiras letras do apelido da pessoa"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Por favor marque as primeiras letras do nome da pessoa"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Para buscar por primeiro nome, digite $2"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Para buscar por apelido, digite $2"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_min_search_digits">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Você precisa dizer um mínimo de $1 letras do nome da pessoa, tente novamente."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count">
|
||||||
|
<input pattern="^0$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Não foram encontrados resultados, tente novamente."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 resultados encontrados para a sua busca."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count_too_large">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="A sua busca devolveu muitos resultados, por favor tente novamente."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_last">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Não há mais resultados."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_item">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Resultado número $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_menu">
|
||||||
|
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Para escolher este resultado digite $1, Para o resultado seguinte digite $2, Para o resultado anterior digite $3, Para uma nova busca digite $4"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_at">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="No ramal $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="directory_result_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
@ -0,0 +1,96 @@
|
|||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
|
||||||
|
<macro name="directory_intro">
|
||||||
|
<input pattern="^(last_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Por favor introduza os primeiras letras do apelido da pessoa"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Por favor introduza os primeiros dígitos do primeiro nome da pessoa"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Para pesquisar por primeiro nome, marque $2"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Para pesquisar por apelido, marque $2"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_min_search_digits">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Você necessita de especificar um mínimo de $1 letras do nome da pessoa, tente novamente."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count">
|
||||||
|
<input pattern="^0$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Não foram encontrados resultados, tente novamente."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 resultados encontrados para a sua pesquisa."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count_too_large">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="A sua pesquisa devolveu demasiados resultados, por favor tente novamente."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_last">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Não há mais resultados"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_item">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Resultado número $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_menu">
|
||||||
|
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Para seleccionar este resultado marque $1, Para o resultado seguinte marque $2, Para o resultado anterior marque $3, Para iniciar uma nova pesquisa marque $4"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_at">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Na extensão $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="directory_result_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
8
src/mod/event_handlers/mod_rayo/conf/lang/pt/pt_BR.xml
Normal file
8
src/mod/event_handlers/mod_rayo/conf/lang/pt/pt_BR.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<include>
|
||||||
|
<language name="pt" sound-path="$${sounds_dir}/pt/BR/karina" tts-engine="cepstral" tts-voice="marta">
|
||||||
|
<X-PRE-PROCESS cmd="include" data="demo/*-pt-BR.xml"/> <!-- Note: this now grabs whole subdir, previously grabbed only demo.xml -->
|
||||||
|
<!--voicemail_pt_BR_tts is purely implemented with tts, we have the files based one that is the default. -->
|
||||||
|
<X-PRE-PROCESS cmd="include" data="vm/sounds-pt-BR.xml"/> <!-- vm/tts.xml if you want to use tts and have cepstral -->
|
||||||
|
<X-PRE-PROCESS cmd="include" data="dir/sounds-pt-BR.xml"/> <!-- dir/tts.xml if you want to use tts and have cepstral -->
|
||||||
|
</language>
|
||||||
|
</include>
|
8
src/mod/event_handlers/mod_rayo/conf/lang/pt/pt_PT.xml
Normal file
8
src/mod/event_handlers/mod_rayo/conf/lang/pt/pt_PT.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<include>
|
||||||
|
<language name="pt" sound-path="$${sounds_dir}/pt/PT/karina" tts-engine="cepstral" tts-voice="marta">
|
||||||
|
<X-PRE-PROCESS cmd="include" data="demo/*-pt-PT.xml"/> <!-- Note: this now grabs whole subdir, previously grabbed only demo.xml -->
|
||||||
|
<!--voicemail_pt_PT_tts is purely implemented with tts, we have the files based one that is the default. -->
|
||||||
|
<X-PRE-PROCESS cmd="include" data="vm/sounds-pt-PT.xml"/> <!-- vm/tts.xml if you want to use tts and have cepstral -->
|
||||||
|
<X-PRE-PROCESS cmd="include" data="dir/sounds-pt-PT.xml"/> <!-- dir/tts.xml if you want to use tts and have cepstral -->
|
||||||
|
</language>
|
||||||
|
</include>
|
404
src/mod/event_handlers/mod_rayo/conf/lang/pt/vm/sounds-pt-BR.xml
Normal file
404
src/mod/event_handlers/mod_rayo/conf/lang/pt/vm/sounds-pt-BR.xml
Normal file
@ -0,0 +1,404 @@
|
|||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
<macro name="voicemail_enter_id">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_pass">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_fail_auth">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-fail_auth.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_hello">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!--<action function="play-file" data="voicemail/vm-hello.wav"/> -->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_goodbye">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-goodbye.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_abort">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-abort.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_message_count">
|
||||||
|
<input pattern="^(1):(.*)$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="play-file" data="digits/uma.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$2.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(\d+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$2_s.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<!-- To listen to new messages -->
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_new.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To listen to saved messages -->
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_saved.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- For advanced options -->
|
||||||
|
<action function="play-file" data="voicemail/vm-advanced.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To exit -->
|
||||||
|
<action function="play-file" data="voicemail/vm-to_exit.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_phonetic"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_config_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<!-- To record a greeting -->
|
||||||
|
<action function="play-file" data="voicemail/vm-to_record_greeting.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To choose greeting -->
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To record your name -->
|
||||||
|
<action function="play-file" data="voicemail/vm-record_name2.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To change password -->
|
||||||
|
<action function="play-file" data="voicemail/vm-change_password.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To return to main menu -->
|
||||||
|
<action function="play-file" data="voicemail/vm-main_menu.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_name1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-rerecord.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_urgent_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-mark-urgent.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-continue.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_prepend">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_add_intro.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-send_message_now.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_message_enter_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-followed_by.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_invalid_extension">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_listen_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_to_email.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-return_call.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-return_call.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting_fail">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_greeting.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_message">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_message.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_greeting_selected">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-greeting.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-selected.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_play_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-person.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-not_available.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_number">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_message_number">
|
||||||
|
<input pattern="^([a-z]+):(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-message_number.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_phone_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<!-- Note: Update this to marked-urgent,emailed and saved once new sound files are recorded -->
|
||||||
|
<macro name="voicemail_ack">
|
||||||
|
<input pattern="^(too-small)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-too-small.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(deleted)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(saved)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(emailed)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(marked-urgent)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_date">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_disk_quota_exceeded">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-mailbox_full.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_announce_ext">
|
||||||
|
<input pattern="^([^\:]+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_lot_full">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="tone_stream://%(275,10,600);%(275,100,300)"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_lot_empty">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="tone_stream://%(275,10,600);%(275,100,300)"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
404
src/mod/event_handlers/mod_rayo/conf/lang/pt/vm/sounds-pt-PT.xml
Normal file
404
src/mod/event_handlers/mod_rayo/conf/lang/pt/vm/sounds-pt-PT.xml
Normal file
@ -0,0 +1,404 @@
|
|||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
<macro name="voicemail_enter_id">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_pass">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_fail_auth">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-fail_auth.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_hello">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!--<action function="play-file" data="voicemail/vm-hello.wav"/> -->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_goodbye">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-goodbye.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_abort">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-abort.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_message_count">
|
||||||
|
<input pattern="^(1):(.*)$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="play-file" data="digits/uma.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$2.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(\d+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$2_s.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<!-- To listen to new messages -->
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_new.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To listen to saved messages -->
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_saved.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- For advanced options -->
|
||||||
|
<action function="play-file" data="voicemail/vm-advanced.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To exit -->
|
||||||
|
<action function="play-file" data="voicemail/vm-to_exit.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_phonetic"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_config_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<!-- To record a greeting -->
|
||||||
|
<action function="play-file" data="voicemail/vm-to_record_greeting.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To choose greeting -->
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To record your name -->
|
||||||
|
<action function="play-file" data="voicemail/vm-record_name2.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To change password -->
|
||||||
|
<action function="play-file" data="voicemail/vm-change_password.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="execute" data="sleep(100)"/>
|
||||||
|
|
||||||
|
<!-- To return to main menu -->
|
||||||
|
<action function="play-file" data="voicemail/vm-main_menu.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_name1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-rerecord.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_urgent_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-mark-urgent.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-continue.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_prepend">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_add_intro.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-send_message_now.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_message_enter_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-followed_by.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_invalid_extension">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_listen_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_to_email.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-return_call.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-return_call.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting_fail">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_greeting.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_message">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_message.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_greeting_selected">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-greeting.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-selected.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_play_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-person.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-not_available.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_number">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_message_number">
|
||||||
|
<input pattern="^([a-z]+):(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-message_number.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_phone_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<!-- Note: Update this to marked-urgent,emailed and saved once new sound files are recorded -->
|
||||||
|
<macro name="voicemail_ack">
|
||||||
|
<input pattern="^(too-small)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-too-small.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(deleted)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(saved)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(emailed)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(marked-urgent)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_date">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_disk_quota_exceeded">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-mailbox_full.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_announce_ext">
|
||||||
|
<input pattern="^([^\:]+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_lot_full">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="tone_stream://%(275,10,600);%(275,100,300)"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="valet_lot_empty">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="tone_stream://%(275,10,600);%(275,100,300)"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
239
src/mod/event_handlers/mod_rayo/conf/lang/pt/vm/tts-pt-BR.xml
Normal file
239
src/mod/event_handlers/mod_rayo/conf/lang/pt/vm/tts-pt-BR.xml
Normal file
@ -0,0 +1,239 @@
|
|||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
<macro name="voicemail_enter_id">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Por favor digite o seu número de usuario, e depois $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_pass">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Por favor digite a sua contrasenha, e depois $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_fail_auth">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Inicio incorreto da sessão."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_hello">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Bem-vindo ao seu correio de voz."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_goodbye">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Até logo."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_abort">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Muitas tentativas fracassadas."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_message_count">
|
||||||
|
<input pattern="^1:(.*)$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Você tem 1 $1 mensagem no directório ${voicemail_current_folder}."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(\d+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Você tem $1 $2 mensagens no directório ${voicemail_current_folder}."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Para ouvir as mensagens novas, digite $1, Para ouvir as mensagens armazenadas, digite $2, Para opções avançadas, digite $3, Para sair, digite $4."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
|
||||||
|
<macro name="voicemail_config_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Para gravar a sua saudação, digite $1, Para escolher a sua saudação, digite $2, Para gravar o seu nome, digite $3, Para mudar a sua senha, digite $5, Para o menu principal, digite $5."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
|
||||||
|
<macro name="voicemail_record_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Após o sinal grave o seu nome, digite qualquer tecla ou deixe de falar para finalizar a gravação."/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Para ouvir a gravação, digite $1, Para guardar a gravação, digite $2, Para gravar novamente, digite $3."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_urgent_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Para marcar esta mensagem como urgente, digite $1, Para continuar, digite $2."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_invalid_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 não é um ramal válido."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_message_enter_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Marque o ramal para o qual pretende encaminhar esta mensagem, e depois $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_prepend">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Para gravar um anúncio, digite $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_listen_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Para ouvir a gravação novamente, press $1, Para guardar a gravação, press $2, Para borrar a gravação, press $3, Para enviar a gravação para o seu email, press $4, Para devolver a ligação agora, press $5, Para encaminhar esta mensagem para outro ramal, press $6."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Escolha uma saudação entre as opções 1 e 3."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting_fail">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Valor inválido."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Após o sinal grave a sua saudação, digite qualquer tecla ou deixe de falar para finalizar a gravação."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_message">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Após o sinal grave a sua mensagem, digite qualquer tecla ou deixe de falar para finalizar a gravação."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_greeting_selected">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Saudação $1 selecionada."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_play_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 não está disponível."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_message_number">
|
||||||
|
<input pattern="^([a-z]+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 mensagem número $2."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_phone_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_ack">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Mensagem $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_date">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="${strftime($1|%A, %B %d %Y, %I:%M %p)}"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
238
src/mod/event_handlers/mod_rayo/conf/lang/pt/vm/tts-pt-PT.xml
Normal file
238
src/mod/event_handlers/mod_rayo/conf/lang/pt/vm/tts-pt-PT.xml
Normal file
@ -0,0 +1,238 @@
|
|||||||
|
<include><!--This line will be ignored it's here to validate the xml and is optional -->
|
||||||
|
<macro name="voicemail_enter_id">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Por favor introduza o seu número de utilizador, seguido de $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_pass">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Por favor introduza a sua palavra passe, seguida de $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_fail_auth">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Falha na autenticação."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_hello">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Bem-vindo ao seu correio de voz."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_goodbye">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Até breve."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_abort">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Demasiadas tentativas falhadas."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_message_count">
|
||||||
|
<input pattern="^1:(.*)$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Você tem 1 $1 mensagen no directório ${voicemail_current_folder}."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(\d+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Você tem $1 $2 mensagens no directório ${voicemail_current_folder}."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Para ouvir as mensagens novas, marque $1, Para ouvir as mensagens guardadas, marque $2, Para opções avançadas, marque $3, Para sair, marque $4."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
|
||||||
|
<macro name="voicemail_config_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Para gravar a sua saudação, marque $1, Para escolher a sua saudação, marque $2, Para gravar o seu nome, marque $3, Para alterar a sua palavra passe, marque $5, Para o menu principal, marque $5."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
|
||||||
|
<macro name="voicemail_record_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Após o sinal grave o seu nome, pressione qualquer tecla ou deixe de falar para parar a gravação."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Para ouvir a gravação, marque $1, Para guardar a gravação, marque $2, Para gravar novamente, marque $3."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_urgent_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Para marcar esta mensagem como urgente, marque $1, Para continuar, marque $2."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_invalid_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 não é uma extensão válida."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_message_enter_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Introduza a extensão para a qual pretende encaminhar esta mensagem, seguido de $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_prepend">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Para gravar um anúncio, marque $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_listen_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="Para ouvir a gravação novamente, marque $1, Para guardar a gravação, marque $2, Para apagar a gravação, marque $3, Para encaminhar a gravação para o seu email, marque $4, Para devolver a chamada agora, marque $5, Para encaminhar esta mensagem para outra extensão, marque $6."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Seleccione uma saudação entre 1 e 3."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting_fail">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="valor inválido."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Após o sinal grave a sua saudação, pressione qualquer tecla ou deixe de falar para parar a gravação."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_message">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Após o sinal grave a sua mensagem, pressione qualquer tecla ou deixe de falar para parar a gravação."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_greeting_selected">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Saudação $1 seleccionada."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_play_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 não está disponível."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_message_number">
|
||||||
|
<input pattern="^([a-z]+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 mensagem número $2."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_phone_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_ack">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Mensagem $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_date">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="${strftime($1|%A, %B %d %Y, %I:%M %p)}"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include><!--This line will be ignored it's here to validate the xml and is optional -->
|
154
src/mod/event_handlers/mod_rayo/conf/lang/ru/demo/demo-ivr.xml
Normal file
154
src/mod/event_handlers/mod_rayo/conf/lang/ru/demo/demo-ivr.xml
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
<include>
|
||||||
|
|
||||||
|
<macro name="demo_ivr_count">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="demo_ivr_main_menu" pause="250"> <!-- See conf/autoload_config/ivr.conf.xml for an example on how to use this macro in an IVR -->
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- string together several existing sound files to create one long greeting -->
|
||||||
|
<action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-this_ivr_will_let_you_test_features.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-you_may_exit_by_hanging_up.wav"/>
|
||||||
|
<!-- note that you can do more than just play files, e.g. have pauses and do TTS -->
|
||||||
|
|
||||||
|
<!-- Menu option 1: Call FreeSWITCH conference-->
|
||||||
|
<action function="play-file" data="ivr/ivr-enter_ext_pound.wav"/>
|
||||||
|
<action function="execute" data="sleep(1500)"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/1.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 2: Do FreeSWITCH echo test -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/2.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 3: Listen to Music on Hold -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/3.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 4: Hear a sample submenu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/4.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 5: Listen to screaming monkeys -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
|
||||||
|
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/5.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 9: Repeat these options -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/9.wav"/>
|
||||||
|
<action function="execute" data="sleep(2000)"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the same as demo_ivr_main_menu except it is the "short" version -->
|
||||||
|
<!-- The short version has all the options but not the initial greeting -->
|
||||||
|
<macro name="demo_ivr_main_menu_short" pause="250">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- Menu option 1: Call FreeSWITCH conference-->
|
||||||
|
<action function="execute" data="sleep(1000)"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/1.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 2: Do FreeSWITCH echo test -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/2.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 3: Listen to Music on Hold -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/3.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 4: Hear a sample submenu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/4.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 5: Listen to screaming monkeys -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/5.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option 9: Repeat these options -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/9.wav"/>
|
||||||
|
<action function="execute" data="sleep(2000)"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the "long" greeting for the demo_ivr_sub_menu -->
|
||||||
|
<macro name="demo_ivr_sub_menu">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-sample_submenu.wav"/>
|
||||||
|
|
||||||
|
<!-- Menu option *: Return to top menu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/star.wav"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<!-- The following macro is the same as demo_ivr_sub_menu except it is the "short" version -->
|
||||||
|
<!-- The short version has all the options but not the initial greeting -->
|
||||||
|
<macro name="demo_ivr_sub_menu_short">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<!-- Menu option *: Return to top menu -->
|
||||||
|
<action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
|
||||||
|
<action function="play-file" data="ivr/ivr-please.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="play-file" data="digits/star.wav"/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
109
src/mod/event_handlers/mod_rayo/conf/lang/ru/demo/demo.xml
Normal file
109
src/mod/event_handlers/mod_rayo/conf/lang/ru/demo/demo.xml
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
<include>
|
||||||
|
<macro name="saymoney">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="currency"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="msgcount">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="execute" data="sleep(1000)"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
<!-- or -->
|
||||||
|
<!--<action function="speak-text" data="you have $1 messages"/>-->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="saydate">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="saydatetime">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="timespec">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="time_measurement"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="timespec2">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="CURRENT_DATE_TIME"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="ip-addr-interated">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="iterated" type="ip_address"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="ip-addr">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="ip_address"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="spell">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="spell-phonetic">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_phonetic"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="tts-timeleft">
|
||||||
|
<!-- The parser will visit each <input> tag and execute the actions in <match> or <nomatch> depending on the pattern param -->
|
||||||
|
<!-- If the function "break" is encountered all parsing will cease -->
|
||||||
|
<input pattern="(\d+):(\d+)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
|
||||||
|
<action function="break"/>
|
||||||
|
</match>
|
||||||
|
<nomatch>
|
||||||
|
<action function="speak-text" data="That input was invalid."/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
<input pattern="(\d+) min (\d+) sec">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
|
||||||
|
</match>
|
||||||
|
<nomatch>
|
||||||
|
<action function="speak-text" data="That input was invalid."/>
|
||||||
|
</nomatch>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
130
src/mod/event_handlers/mod_rayo/conf/lang/ru/dir/sounds.xml
Normal file
130
src/mod/event_handlers/mod_rayo/conf/lang/ru/dir/sounds.xml
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
<include>
|
||||||
|
|
||||||
|
<macro name="directory_intro">
|
||||||
|
<input pattern="^(last_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-enter-person.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-last_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-enter-person.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-first_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_search_by.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-first_name.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_search_by.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-last_name.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_min_search_digits">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-specify_mininum_first.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="directory/dir-letters_of_person_name.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count">
|
||||||
|
<input pattern="^0$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-no_match_entry.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="directory/dir-result_match.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count_too_large">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_many_result.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_last">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-no_more_result.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_item">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-result_number.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_at">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-at_extension.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_menu">
|
||||||
|
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="directory/dir-to_select_entry.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-for_next.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-for_prev.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="directory/dir-to_make_new_search.wav"/>
|
||||||
|
<action function="play-file" data="directory/dir-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
105
src/mod/event_handlers/mod_rayo/conf/lang/ru/dir/tts.xml
Normal file
105
src/mod/event_handlers/mod_rayo/conf/lang/ru/dir/tts.xml
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
<include>
|
||||||
|
|
||||||
|
<macro name="directory_intro">
|
||||||
|
<input pattern="^(last_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Please enter the first few digit of the person last name"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name)" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Please enter the first few digit of the person first name"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="to search by first name, press $2"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="to search by last name, press $2"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_min_search_digits">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="You need to specify a minimum the first $1 letters of the person name, try again."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count">
|
||||||
|
<input pattern="^0$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Your search match no user on this system, try again."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 result match your search"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_count_too_large">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Your search returned too many result, please try again"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_last">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="No more result"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_item">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="Result number $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_menu">
|
||||||
|
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="To select this entry press $1, for the next entry press $2, for the previous entry press $3, to make a new search press $4"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="directory_result_at">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="at extension $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<macro name="directory_result_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
23
src/mod/event_handlers/mod_rayo/conf/lang/ru/ru.xml
Normal file
23
src/mod/event_handlers/mod_rayo/conf/lang/ru/ru.xml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<!--тестовые файлы Вы звуковые файлы можно взять тут svn co http://svn.freeswitch.ru/bbv/mod_say_ru/ru/ -->
|
||||||
|
<include>
|
||||||
|
<language name="ru" sound-prefix="$${sounds_dir}/ru/RU/elena" tts-engine="cepstral" tts-voice="elena">
|
||||||
|
<phrases>
|
||||||
|
<macros>
|
||||||
|
<X-PRE-PROCESS cmd="include" data="demo/*.xml"/> <!-- Note: this now grabs whole subdir, previously grabbed only demo.xml -->
|
||||||
|
<!--voicemail_en_tts is purely implemented with tts, we have the files based one that is the default. -->
|
||||||
|
<X-PRE-PROCESS cmd="include" data="vm/sounds.xml"/> <!-- vm/tts.xml if you want to use tts and have cepstral -->
|
||||||
|
</macros>
|
||||||
|
</phrases>
|
||||||
|
</language>
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
374
src/mod/event_handlers/mod_rayo/conf/lang/ru/vm/sounds.xml
Normal file
374
src/mod/event_handlers/mod_rayo/conf/lang/ru/vm/sounds.xml
Normal file
@ -0,0 +1,374 @@
|
|||||||
|
<include>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_id">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
|
||||||
|
<!--<action function="say" data="$1" method="pronounced" type="name_spelled"/>-->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_pass">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
|
||||||
|
<!-- лишнее и так долго <action function="say" data="$1" method="pronounced" type="name_spelled"/>-->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_fail_auth">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-fail_auth.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_hello">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-hello.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_goodbye">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-goodbye.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_abort">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-abort.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_message_count">
|
||||||
|
<input pattern="^(\d+[0,2-9]1|[2-9]1|1):(.*)$"> <!--1, и всё что больше 20-ти 21,31,41 .. -->
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="MESSAGES"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$2.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<!--<action function="play-file" data="voicemail/vm-in_folder.wav"/>-->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<!-- от 10 до 19 и ноль --> <!-- от 5до 9 и больше 20-ти 25-29 -->
|
||||||
|
<input pattern="^(\d+1[0-9]|1[0-9]|0|\d+[0-9][0,5-9]|[2-9][0,5-9]|[0,5-9]):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="MESSAGES"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$2x.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messagex.wav"/>
|
||||||
|
<!--<action function="play-file" data="voicemail/vm-in_folder.wav"/>-->
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(\d+[0,2-9][2-4]|[2-9][2-4]|[2-4]):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-you_have.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="MESSAGES"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$2x.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-messages.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-in_folder.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_new.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_saved.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-advanced.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_phonetic"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-to_exit.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_config_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-to_record_greeting.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_name2.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-change_password.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-main_menu.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_name1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-rerecord.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_urgent_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-mark-urgent.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-continue.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_prepend">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_add_intro.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-send_message_now.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_message_enter_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-followed_by.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_invalid_extension">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_listen_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-forward_to_email.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-return_call.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-return_call.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-press.wav"/>
|
||||||
|
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting_fail">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_greeting.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_message">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-record_message.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_greeting_selected">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-greeting.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-selected.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_play_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-person.wav"/>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-not_available.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_number">
|
||||||
|
<input pattern="^(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_message_number">
|
||||||
|
<input pattern="^([a-z]+):(\d+)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-message_number.wav"/>
|
||||||
|
<action function="say" data="$2" method="pronounced" type="items"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_phone_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
<!-- Note: Update this to marked-urgent,emailed and saved once new sound files are recorded -->
|
||||||
|
<macro name="voicemail_ack">
|
||||||
|
<input pattern="^(too-small)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-too-small.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(deleted)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(saved)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(emailed)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(marked-urgent)$">
|
||||||
|
<match>
|
||||||
|
<action function="play-file" data="voicemail/vm-message.wav"/>
|
||||||
|
<action function="play-file" data="voicemail/vm-$1.wav"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_date">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
249
src/mod/event_handlers/mod_rayo/conf/lang/ru/vm/tts.xml
Normal file
249
src/mod/event_handlers/mod_rayo/conf/lang/ru/vm/tts.xml
Normal file
@ -0,0 +1,249 @@
|
|||||||
|
<include>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_id">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="please enter your i d, followed by $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_enter_pass">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="please enter your password, followed by $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_fail_auth">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="login incorrect."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_hello">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="welcome to your voicemail."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_goodbye">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="goodbye."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_abort">
|
||||||
|
<input pattern="(.*)">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="too many failed attempts."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_message_count">
|
||||||
|
<input pattern="^1:(.*)$" break_on_match="true">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="you have 1 $1 message in folder ${voicemail_current_folder}."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
<input pattern="^(\d+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="you have $1 $2 messages in folder ${voicemail_current_folder}."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="To listen to new messages, press $1, To listen to saved messages, press $2, For advanced options, press $3, to exit, press $4."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_config_menu">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="To record a greeting, press $1, To choose a greeting, press $2, To record your name, press $3, to change your password, press $5, to return to the main menu, press $5."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="at the tone, please record your name, press any key or stop talking to end the recording."/>
|
||||||
|
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="To listen to the recording, press $1, To save the recording, press $2, To re record, press $3."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_urgent_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="To mark this message urgent, press $1, To continue, press $2."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_invalid_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 is not a valid extension."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_message_enter_extension">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="enter the extension you wish to forward to, then press $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_forward_prepend">
|
||||||
|
<input pattern="^([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="To record an announcement, press $1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_listen_file_check">
|
||||||
|
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text"
|
||||||
|
data="To listen to the recording again, press $1, To save the recording, press $2, To delete the recording, press $3, to forward the recording to your email, press $4, to call the caller now, press $5, To forward this message to another extension, press $6."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="choose a greeting between 1 and 3."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_choose_greeting_fail">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="invalid value."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="record your greeting at the tone, press any key or stop talking to end the recording."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_record_message">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="record your message at the tone, press any key or stop talking to end the recording."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_greeting_selected">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="greeting $1 selected."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_play_greeting">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 is not available."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_message_number">
|
||||||
|
<input pattern="^([a-z]+):(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1 message number $2."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_phone_number">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_name">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="$1."/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_ack">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="message $1"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
<macro name="voicemail_say_date">
|
||||||
|
<input pattern="^(.*)$">
|
||||||
|
<match>
|
||||||
|
<action function="speak-text" data="${strftime($1|%A, %B %d %Y, %I:%M %p)}"/>
|
||||||
|
</match>
|
||||||
|
</input>
|
||||||
|
</macro>
|
||||||
|
|
||||||
|
</include>
|
||||||
|
<!--
|
||||||
|
For Emacs:
|
||||||
|
Local Variables:
|
||||||
|
mode:xml
|
||||||
|
indent-tabs-mode:nil
|
||||||
|
tab-width:2
|
||||||
|
c-basic-offset:2
|
||||||
|
End:
|
||||||
|
For VIM:
|
||||||
|
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
|
||||||
|
-->
|
983
src/mod/event_handlers/mod_rayo/conf/mime.types
Normal file
983
src/mod/event_handlers/mod_rayo/conf/mime.types
Normal file
@ -0,0 +1,983 @@
|
|||||||
|
# This is a comment. I love comments.
|
||||||
|
|
||||||
|
# This file controls what Internet media types are sent to the client for
|
||||||
|
# given file extension(s). Sending the correct media type to the client
|
||||||
|
# is important so they know how to handle the content of the file.
|
||||||
|
# Extra types can either be added here or by using an AddType directive
|
||||||
|
# in your config files. For more information about Internet media types,
|
||||||
|
# please read RFC 2045, 2046, 2047, 2048, and 2077. The Internet media type
|
||||||
|
# registry is at <http://www.iana.org/assignments/media-types/>.
|
||||||
|
|
||||||
|
# MIME type Extensions
|
||||||
|
application/activemessage
|
||||||
|
application/andrew-inset ez
|
||||||
|
application/applefile
|
||||||
|
application/atom+xml atom
|
||||||
|
application/atomcat+xml atomcat
|
||||||
|
application/atomicmail
|
||||||
|
application/atomsvc+xml atomsvc
|
||||||
|
application/auth-policy+xml
|
||||||
|
application/batch-smtp
|
||||||
|
application/beep+xml
|
||||||
|
application/cals-1840
|
||||||
|
application/ccxml+xml ccxml
|
||||||
|
application/cellml+xml
|
||||||
|
application/cnrp+xml
|
||||||
|
application/commonground
|
||||||
|
application/conference-info+xml
|
||||||
|
application/cpl+xml
|
||||||
|
application/csta+xml
|
||||||
|
application/cstadata+xml
|
||||||
|
application/cybercash
|
||||||
|
application/davmount+xml davmount
|
||||||
|
application/dca-rft
|
||||||
|
application/dec-dx
|
||||||
|
application/dialog-info+xml
|
||||||
|
application/dicom
|
||||||
|
application/dns
|
||||||
|
application/dvcs
|
||||||
|
application/ecmascript ecma
|
||||||
|
application/edi-consent
|
||||||
|
application/edi-x12
|
||||||
|
application/edifact
|
||||||
|
application/epp+xml
|
||||||
|
application/eshop
|
||||||
|
application/fastinfoset
|
||||||
|
application/fastsoap
|
||||||
|
application/fits
|
||||||
|
application/font-tdpfr pfr
|
||||||
|
application/h224
|
||||||
|
application/http
|
||||||
|
application/hyperstudio stk
|
||||||
|
application/iges
|
||||||
|
application/im-iscomposing+xml
|
||||||
|
application/index
|
||||||
|
application/index.cmd
|
||||||
|
application/index.obj
|
||||||
|
application/index.response
|
||||||
|
application/index.vnd
|
||||||
|
application/iotp
|
||||||
|
application/ipp
|
||||||
|
application/isup
|
||||||
|
application/javascript js
|
||||||
|
application/json json
|
||||||
|
application/kpml-request+xml
|
||||||
|
application/kpml-response+xml
|
||||||
|
application/mac-binhex40 hqx
|
||||||
|
application/mac-compactpro cpt
|
||||||
|
application/macwriteii
|
||||||
|
application/marc mrc
|
||||||
|
application/mathematica ma nb mb
|
||||||
|
application/mathml+xml mathml
|
||||||
|
application/mbms-associated-procedure-description+xml
|
||||||
|
application/mbms-deregister+xml
|
||||||
|
application/mbms-envelope+xml
|
||||||
|
application/mbms-msk+xml
|
||||||
|
application/mbms-msk-response+xml
|
||||||
|
application/mbms-protection-description+xml
|
||||||
|
application/mbms-reception-report+xml
|
||||||
|
application/mbms-register+xml
|
||||||
|
application/mbms-register-response+xml
|
||||||
|
application/mbms-user-service-description+xml
|
||||||
|
application/mbox mbox
|
||||||
|
application/mediaservercontrol+xml mscml
|
||||||
|
application/mikey
|
||||||
|
application/mp4 mp4s
|
||||||
|
application/mpeg4-generic
|
||||||
|
application/mpeg4-iod
|
||||||
|
application/mpeg4-iod-xmt
|
||||||
|
application/msword doc dot
|
||||||
|
application/mxf mxf
|
||||||
|
application/nasdata
|
||||||
|
application/news-message-id
|
||||||
|
application/news-transmission
|
||||||
|
application/nss
|
||||||
|
application/ocsp-request
|
||||||
|
application/ocsp-response
|
||||||
|
application/octet-stream bin dms lha lzh class so iso dmg dist distz pkg bpk dump elc
|
||||||
|
application/oda oda
|
||||||
|
application/oebps-package+xml
|
||||||
|
application/ogg ogg
|
||||||
|
application/parityfec
|
||||||
|
application/pdf pdf
|
||||||
|
application/pgp-encrypted pgp
|
||||||
|
application/pgp-keys
|
||||||
|
application/pgp-signature asc sig
|
||||||
|
application/pics-rules prf
|
||||||
|
application/pidf+xml
|
||||||
|
application/pkcs10 p10
|
||||||
|
application/pkcs7-mime p7m p7c
|
||||||
|
application/pkcs7-signature p7s
|
||||||
|
application/pkix-cert cer
|
||||||
|
application/pkix-crl crl
|
||||||
|
application/pkix-pkipath pkipath
|
||||||
|
application/pkixcmp pki
|
||||||
|
application/pls+xml pls
|
||||||
|
application/poc-settings+xml
|
||||||
|
application/postscript ai eps ps
|
||||||
|
application/prs.alvestrand.titrax-sheet
|
||||||
|
application/prs.cww cww
|
||||||
|
application/prs.nprend
|
||||||
|
application/prs.plucker
|
||||||
|
application/qsig
|
||||||
|
application/rdf+xml rdf
|
||||||
|
application/reginfo+xml rif
|
||||||
|
application/relax-ng-compact-syntax rnc
|
||||||
|
application/remote-printing
|
||||||
|
application/resource-lists+xml rl
|
||||||
|
application/riscos
|
||||||
|
application/rlmi+xml
|
||||||
|
application/rls-services+xml rs
|
||||||
|
application/rsd+xml rsd
|
||||||
|
application/rss+xml rss
|
||||||
|
application/rtf rtf
|
||||||
|
application/rtx
|
||||||
|
application/samlassertion+xml
|
||||||
|
application/samlmetadata+xml
|
||||||
|
application/sbml+xml sbml
|
||||||
|
application/sdp sdp
|
||||||
|
application/set-payment
|
||||||
|
application/set-payment-initiation setpay
|
||||||
|
application/set-registration
|
||||||
|
application/set-registration-initiation setreg
|
||||||
|
application/sgml
|
||||||
|
application/sgml-open-catalog
|
||||||
|
application/shf+xml shf
|
||||||
|
application/sieve
|
||||||
|
application/simple-filter+xml
|
||||||
|
application/simple-message-summary
|
||||||
|
application/simplesymbolcontainer
|
||||||
|
application/slate
|
||||||
|
application/smil
|
||||||
|
application/smil+xml smi smil
|
||||||
|
application/soap+fastinfoset
|
||||||
|
application/soap+xml
|
||||||
|
application/spirits-event+xml
|
||||||
|
application/srgs gram
|
||||||
|
application/srgs+xml grxml
|
||||||
|
application/ssml+xml ssml
|
||||||
|
application/timestamp-query
|
||||||
|
application/timestamp-reply
|
||||||
|
application/tve-trigger
|
||||||
|
application/vemmi
|
||||||
|
application/vividence.scriptfile
|
||||||
|
application/vnd.3gpp.bsf+xml
|
||||||
|
application/vnd.3gpp.pic-bw-large plb
|
||||||
|
application/vnd.3gpp.pic-bw-small psb
|
||||||
|
application/vnd.3gpp.pic-bw-var pvb
|
||||||
|
application/vnd.3gpp.sms
|
||||||
|
application/vnd.3gpp2.bcmcsinfo+xml
|
||||||
|
application/vnd.3gpp2.sms
|
||||||
|
application/vnd.3m.post-it-notes pwn
|
||||||
|
application/vnd.accpac.simply.aso aso
|
||||||
|
application/vnd.accpac.simply.imp imp
|
||||||
|
application/vnd.acucobol acu
|
||||||
|
application/vnd.acucorp atc acutc
|
||||||
|
application/vnd.adobe.xdp+xml xdp
|
||||||
|
application/vnd.adobe.xfdf xfdf
|
||||||
|
application/vnd.aether.imp
|
||||||
|
application/vnd.amiga.ami ami
|
||||||
|
application/vnd.anser-web-certificate-issue-initiation cii
|
||||||
|
application/vnd.anser-web-funds-transfer-initiation fti
|
||||||
|
application/vnd.antix.game-component atx
|
||||||
|
application/vnd.apple.installer+xml mpkg
|
||||||
|
application/vnd.audiograph aep
|
||||||
|
application/vnd.autopackage
|
||||||
|
application/vnd.avistar+xml
|
||||||
|
application/vnd.blueice.multipass mpm
|
||||||
|
application/vnd.bmi bmi
|
||||||
|
application/vnd.businessobjects rep
|
||||||
|
application/vnd.cab-jscript
|
||||||
|
application/vnd.canon-cpdl
|
||||||
|
application/vnd.canon-lips
|
||||||
|
application/vnd.cendio.thinlinc.clientconf
|
||||||
|
application/vnd.chemdraw+xml cdxml
|
||||||
|
application/vnd.chipnuts.karaoke-mmd mmd
|
||||||
|
application/vnd.cinderella cdy
|
||||||
|
application/vnd.cirpack.isdn-ext
|
||||||
|
application/vnd.claymore cla
|
||||||
|
application/vnd.clonk.c4group c4g c4d c4f c4p c4u
|
||||||
|
application/vnd.commerce-battelle
|
||||||
|
application/vnd.commonspace csp cst
|
||||||
|
application/vnd.contact.cmsg cdbcmsg
|
||||||
|
application/vnd.cosmocaller cmc
|
||||||
|
application/vnd.crick.clicker clkx
|
||||||
|
application/vnd.crick.clicker.keyboard clkk
|
||||||
|
application/vnd.crick.clicker.palette clkp
|
||||||
|
application/vnd.crick.clicker.template clkt
|
||||||
|
application/vnd.crick.clicker.wordbank clkw
|
||||||
|
application/vnd.criticaltools.wbs+xml wbs
|
||||||
|
application/vnd.ctc-posml pml
|
||||||
|
application/vnd.cups-pdf
|
||||||
|
application/vnd.cups-postscript
|
||||||
|
application/vnd.cups-ppd ppd
|
||||||
|
application/vnd.cups-raster
|
||||||
|
application/vnd.cups-raw
|
||||||
|
application/vnd.curl curl
|
||||||
|
application/vnd.cybank
|
||||||
|
application/vnd.data-vision.rdz rdz
|
||||||
|
application/vnd.denovo.fcselayout-link fe_launch
|
||||||
|
application/vnd.dna dna
|
||||||
|
application/vnd.dolby.mlp mlp
|
||||||
|
application/vnd.dpgraph dpg
|
||||||
|
application/vnd.dreamfactory dfac
|
||||||
|
application/vnd.dvb.esgcontainer
|
||||||
|
application/vnd.dvb.ipdcesgaccess
|
||||||
|
application/vnd.dxr
|
||||||
|
application/vnd.ecdis-update
|
||||||
|
application/vnd.ecowin.chart mag
|
||||||
|
application/vnd.ecowin.filerequest
|
||||||
|
application/vnd.ecowin.fileupdate
|
||||||
|
application/vnd.ecowin.series
|
||||||
|
application/vnd.ecowin.seriesrequest
|
||||||
|
application/vnd.ecowin.seriesupdate
|
||||||
|
application/vnd.enliven nml
|
||||||
|
application/vnd.epson.esf esf
|
||||||
|
application/vnd.epson.msf msf
|
||||||
|
application/vnd.epson.quickanime qam
|
||||||
|
application/vnd.epson.salt slt
|
||||||
|
application/vnd.epson.ssf ssf
|
||||||
|
application/vnd.ericsson.quickcall
|
||||||
|
application/vnd.eszigno3+xml es3 et3
|
||||||
|
application/vnd.eudora.data
|
||||||
|
application/vnd.ezpix-album ez2
|
||||||
|
application/vnd.ezpix-package ez3
|
||||||
|
application/vnd.fdf fdf
|
||||||
|
application/vnd.ffsns
|
||||||
|
application/vnd.fints
|
||||||
|
application/vnd.flographit gph
|
||||||
|
application/vnd.fluxtime.clip ftc
|
||||||
|
application/vnd.framemaker fm frame maker
|
||||||
|
application/vnd.frogans.fnc fnc
|
||||||
|
application/vnd.frogans.ltf ltf
|
||||||
|
application/vnd.fsc.weblaunch fsc
|
||||||
|
application/vnd.fujitsu.oasys oas
|
||||||
|
application/vnd.fujitsu.oasys2 oa2
|
||||||
|
application/vnd.fujitsu.oasys3 oa3
|
||||||
|
application/vnd.fujitsu.oasysgp fg5
|
||||||
|
application/vnd.fujitsu.oasysprs bh2
|
||||||
|
application/vnd.fujixerox.art-ex
|
||||||
|
application/vnd.fujixerox.art4
|
||||||
|
application/vnd.fujixerox.hbpl
|
||||||
|
application/vnd.fujixerox.ddd ddd
|
||||||
|
application/vnd.fujixerox.docuworks xdw
|
||||||
|
application/vnd.fujixerox.docuworks.binder xbd
|
||||||
|
application/vnd.fut-misnet
|
||||||
|
application/vnd.fuzzysheet fzs
|
||||||
|
application/vnd.genomatix.tuxedo txd
|
||||||
|
application/vnd.google-earth.kml+xml kml
|
||||||
|
application/vnd.google-earth.kmz kmz
|
||||||
|
application/vnd.grafeq gqf gqs
|
||||||
|
application/vnd.gridmp
|
||||||
|
application/vnd.groove-account gac
|
||||||
|
application/vnd.groove-help ghf
|
||||||
|
application/vnd.groove-identity-message gim
|
||||||
|
application/vnd.groove-injector grv
|
||||||
|
application/vnd.groove-tool-message gtm
|
||||||
|
application/vnd.groove-tool-template tpl
|
||||||
|
application/vnd.groove-vcard vcg
|
||||||
|
application/vnd.handheld-entertainment+xml zmm
|
||||||
|
application/vnd.hbci hbci
|
||||||
|
application/vnd.hcl-bireports
|
||||||
|
application/vnd.hhe.lesson-player les
|
||||||
|
application/vnd.hp-hpgl hpgl
|
||||||
|
application/vnd.hp-hpid hpid
|
||||||
|
application/vnd.hp-hps hps
|
||||||
|
application/vnd.hp-jlyt jlt
|
||||||
|
application/vnd.hp-pcl pcl
|
||||||
|
application/vnd.hp-pclxl pclxl
|
||||||
|
application/vnd.httphone
|
||||||
|
application/vnd.hzn-3d-crossword x3d
|
||||||
|
application/vnd.ibm.afplinedata
|
||||||
|
application/vnd.ibm.electronic-media
|
||||||
|
application/vnd.ibm.minipay mpy
|
||||||
|
application/vnd.ibm.modcap afp listafp list3820
|
||||||
|
application/vnd.ibm.rights-management irm
|
||||||
|
application/vnd.ibm.secure-container sc
|
||||||
|
application/vnd.igloader igl
|
||||||
|
application/vnd.immervision-ivp ivp
|
||||||
|
application/vnd.immervision-ivu ivu
|
||||||
|
application/vnd.informedcontrol.rms+xml
|
||||||
|
application/vnd.intercon.formnet xpw xpx
|
||||||
|
application/vnd.intertrust.digibox
|
||||||
|
application/vnd.intertrust.nncp
|
||||||
|
application/vnd.intu.qbo qbo
|
||||||
|
application/vnd.intu.qfx qfx
|
||||||
|
application/vnd.ipunplugged.rcprofile rcprofile
|
||||||
|
application/vnd.irepository.package+xml irp
|
||||||
|
application/vnd.is-xpr xpr
|
||||||
|
application/vnd.jam jam
|
||||||
|
application/vnd.japannet-directory-service
|
||||||
|
application/vnd.japannet-jpnstore-wakeup
|
||||||
|
application/vnd.japannet-payment-wakeup
|
||||||
|
application/vnd.japannet-registration
|
||||||
|
application/vnd.japannet-registration-wakeup
|
||||||
|
application/vnd.japannet-setstore-wakeup
|
||||||
|
application/vnd.japannet-verification
|
||||||
|
application/vnd.japannet-verification-wakeup
|
||||||
|
application/vnd.jcp.javame.midlet-rms rms
|
||||||
|
application/vnd.jisp jisp
|
||||||
|
application/vnd.kahootz ktz ktr
|
||||||
|
application/vnd.kde.karbon karbon
|
||||||
|
application/vnd.kde.kchart chrt
|
||||||
|
application/vnd.kde.kformula kfo
|
||||||
|
application/vnd.kde.kivio flw
|
||||||
|
application/vnd.kde.kontour kon
|
||||||
|
application/vnd.kde.kpresenter kpr kpt
|
||||||
|
application/vnd.kde.kspread ksp
|
||||||
|
application/vnd.kde.kword kwd kwt
|
||||||
|
application/vnd.kenameaapp htke
|
||||||
|
application/vnd.kidspiration kia
|
||||||
|
application/vnd.kinar kne knp
|
||||||
|
application/vnd.koan skp skd skt skm
|
||||||
|
application/vnd.liberty-request+xml
|
||||||
|
application/vnd.llamagraphics.life-balance.desktop lbd
|
||||||
|
application/vnd.llamagraphics.life-balance.exchange+xml lbe
|
||||||
|
application/vnd.lotus-1-2-3 123
|
||||||
|
application/vnd.lotus-approach apr
|
||||||
|
application/vnd.lotus-freelance pre
|
||||||
|
application/vnd.lotus-notes nsf
|
||||||
|
application/vnd.lotus-organizer org
|
||||||
|
application/vnd.lotus-screencam scm
|
||||||
|
application/vnd.lotus-wordpro lwp
|
||||||
|
application/vnd.macports.portpkg portpkg
|
||||||
|
application/vnd.marlin.drm.actiontoken+xml
|
||||||
|
application/vnd.marlin.drm.conftoken+xml
|
||||||
|
application/vnd.marlin.drm.mdcf
|
||||||
|
application/vnd.mcd mcd
|
||||||
|
application/vnd.medcalcdata mc1
|
||||||
|
application/vnd.mediastation.cdkey cdkey
|
||||||
|
application/vnd.meridian-slingshot
|
||||||
|
application/vnd.mfer mwf
|
||||||
|
application/vnd.mfmp mfm
|
||||||
|
application/vnd.micrografx.flo flo
|
||||||
|
application/vnd.micrografx.igx igx
|
||||||
|
application/vnd.mif mif
|
||||||
|
application/vnd.minisoft-hp3000-save
|
||||||
|
application/vnd.mitsubishi.misty-guard.trustweb
|
||||||
|
application/vnd.mobius.daf daf
|
||||||
|
application/vnd.mobius.dis dis
|
||||||
|
application/vnd.mobius.mbk mbk
|
||||||
|
application/vnd.mobius.mqy mqy
|
||||||
|
application/vnd.mobius.msl msl
|
||||||
|
application/vnd.mobius.plc plc
|
||||||
|
application/vnd.mobius.txf txf
|
||||||
|
application/vnd.mophun.application mpn
|
||||||
|
application/vnd.mophun.certificate mpc
|
||||||
|
application/vnd.motorola.flexsuite
|
||||||
|
application/vnd.motorola.flexsuite.adsi
|
||||||
|
application/vnd.motorola.flexsuite.fis
|
||||||
|
application/vnd.motorola.flexsuite.gotap
|
||||||
|
application/vnd.motorola.flexsuite.kmr
|
||||||
|
application/vnd.motorola.flexsuite.ttc
|
||||||
|
application/vnd.motorola.flexsuite.wem
|
||||||
|
application/vnd.mozilla.xul+xml xul
|
||||||
|
application/vnd.ms-artgalry cil
|
||||||
|
application/vnd.ms-asf asf
|
||||||
|
application/vnd.ms-cab-compressed cab
|
||||||
|
application/vnd.ms-excel xls xlm xla xlc xlt xlw
|
||||||
|
application/vnd.ms-fontobject eot
|
||||||
|
application/vnd.ms-htmlhelp chm
|
||||||
|
application/vnd.ms-ims ims
|
||||||
|
application/vnd.ms-lrm lrm
|
||||||
|
application/vnd.ms-playready.initiator+xml
|
||||||
|
application/vnd.ms-powerpoint ppt pps pot
|
||||||
|
application/vnd.ms-project mpp mpt
|
||||||
|
application/vnd.ms-tnef
|
||||||
|
application/vnd.ms-wmdrm.lic-chlg-req
|
||||||
|
application/vnd.ms-wmdrm.lic-resp
|
||||||
|
application/vnd.ms-wmdrm.meter-chlg-req
|
||||||
|
application/vnd.ms-wmdrm.meter-resp
|
||||||
|
application/vnd.ms-works wps wks wcm wdb
|
||||||
|
application/vnd.ms-wpl wpl
|
||||||
|
application/vnd.ms-xpsdocument xps
|
||||||
|
application/vnd.mseq mseq
|
||||||
|
application/vnd.msign
|
||||||
|
application/vnd.music-niff
|
||||||
|
application/vnd.musician mus
|
||||||
|
application/vnd.ncd.control
|
||||||
|
application/vnd.nervana
|
||||||
|
application/vnd.netfpx
|
||||||
|
application/vnd.neurolanguage.nlu nlu
|
||||||
|
application/vnd.noblenet-directory nnd
|
||||||
|
application/vnd.noblenet-sealer nns
|
||||||
|
application/vnd.noblenet-web nnw
|
||||||
|
application/vnd.nokia.catalogs
|
||||||
|
application/vnd.nokia.conml+wbxml
|
||||||
|
application/vnd.nokia.conml+xml
|
||||||
|
application/vnd.nokia.isds-radio-presets
|
||||||
|
application/vnd.nokia.iptv.config+xml
|
||||||
|
application/vnd.nokia.landmark+wbxml
|
||||||
|
application/vnd.nokia.landmark+xml
|
||||||
|
application/vnd.nokia.landmarkcollection+xml
|
||||||
|
application/vnd.nokia.n-gage.ac+xml
|
||||||
|
application/vnd.nokia.n-gage.data ngdat
|
||||||
|
application/vnd.nokia.n-gage.symbian.install n-gage
|
||||||
|
application/vnd.nokia.ncd
|
||||||
|
application/vnd.nokia.pcd+wbxml
|
||||||
|
application/vnd.nokia.pcd+xml
|
||||||
|
application/vnd.nokia.radio-preset rpst
|
||||||
|
application/vnd.nokia.radio-presets rpss
|
||||||
|
application/vnd.novadigm.edm edm
|
||||||
|
application/vnd.novadigm.edx edx
|
||||||
|
application/vnd.novadigm.ext ext
|
||||||
|
application/vnd.oasis.opendocument.chart odc
|
||||||
|
application/vnd.oasis.opendocument.chart-template otc
|
||||||
|
application/vnd.oasis.opendocument.formula odf
|
||||||
|
application/vnd.oasis.opendocument.formula-template otf
|
||||||
|
application/vnd.oasis.opendocument.graphics odg
|
||||||
|
application/vnd.oasis.opendocument.graphics-template otg
|
||||||
|
application/vnd.oasis.opendocument.image odi
|
||||||
|
application/vnd.oasis.opendocument.image-template oti
|
||||||
|
application/vnd.oasis.opendocument.presentation odp
|
||||||
|
application/vnd.oasis.opendocument.presentation-template otp
|
||||||
|
application/vnd.oasis.opendocument.spreadsheet ods
|
||||||
|
application/vnd.oasis.opendocument.spreadsheet-template ots
|
||||||
|
application/vnd.oasis.opendocument.text odt
|
||||||
|
application/vnd.oasis.opendocument.text-master otm
|
||||||
|
application/vnd.oasis.opendocument.text-template ott
|
||||||
|
application/vnd.oasis.opendocument.text-web oth
|
||||||
|
application/vnd.obn
|
||||||
|
application/vnd.olpc-sugar xo
|
||||||
|
application/vnd.oma-scws-config
|
||||||
|
application/vnd.oma-scws-http-request
|
||||||
|
application/vnd.oma-scws-http-response
|
||||||
|
application/vnd.oma.bcast.associated-procedure-parameter+xml
|
||||||
|
application/vnd.oma.bcast.drm-trigger+xml
|
||||||
|
application/vnd.oma.bcast.imd+xml
|
||||||
|
application/vnd.oma.bcast.notification+xml
|
||||||
|
application/vnd.oma.bcast.sgboot
|
||||||
|
application/vnd.oma.bcast.sgdd+xml
|
||||||
|
application/vnd.oma.bcast.sgdu
|
||||||
|
application/vnd.oma.bcast.simple-symbol-container
|
||||||
|
application/vnd.oma.bcast.smartcard-trigger+xml
|
||||||
|
application/vnd.oma.bcast.sprov+xml
|
||||||
|
application/vnd.oma.dd2+xml dd2
|
||||||
|
application/vnd.oma.drm.risd+xml
|
||||||
|
application/vnd.oma.group-usage-list+xml
|
||||||
|
application/vnd.oma.poc.groups+xml
|
||||||
|
application/vnd.oma.xcap-directory+xml
|
||||||
|
application/vnd.omads-email+xml
|
||||||
|
application/vnd.omads-file+xml
|
||||||
|
application/vnd.omads-folder+xml
|
||||||
|
application/vnd.omaloc-supl-init
|
||||||
|
application/vnd.openofficeorg.extension oxt
|
||||||
|
application/vnd.osa.netdeploy
|
||||||
|
application/vnd.osgi.dp dp
|
||||||
|
application/vnd.otps.ct-kip+xml
|
||||||
|
application/vnd.palm prc pdb pqa oprc
|
||||||
|
application/vnd.paos.xml
|
||||||
|
application/vnd.pg.format str
|
||||||
|
application/vnd.pg.osasli ei6
|
||||||
|
application/vnd.piaccess.application-licence
|
||||||
|
application/vnd.picsel efif
|
||||||
|
application/vnd.poc.group-advertisement+xml
|
||||||
|
application/vnd.pocketlearn plf
|
||||||
|
application/vnd.powerbuilder6 pbd
|
||||||
|
application/vnd.powerbuilder6-s
|
||||||
|
application/vnd.powerbuilder7
|
||||||
|
application/vnd.powerbuilder7-s
|
||||||
|
application/vnd.powerbuilder75
|
||||||
|
application/vnd.powerbuilder75-s
|
||||||
|
application/vnd.preminet
|
||||||
|
application/vnd.previewsystems.box box
|
||||||
|
application/vnd.proteus.magazine mgz
|
||||||
|
application/vnd.publishare-delta-tree qps
|
||||||
|
application/vnd.pvi.ptid1 ptid
|
||||||
|
application/vnd.pwg-multiplexed
|
||||||
|
application/vnd.pwg-xhtml-print+xml
|
||||||
|
application/vnd.qualcomm.brew-app-res
|
||||||
|
application/vnd.quark.quarkxpress qxd qxt qwd qwt qxl qxb
|
||||||
|
application/vnd.rapid
|
||||||
|
application/vnd.recordare.musicxml mxl
|
||||||
|
application/vnd.recordare.musicxml+xml
|
||||||
|
application/vnd.renlearn.rlprint
|
||||||
|
application/vnd.rn-realmedia rm
|
||||||
|
application/vnd.ruckus.download
|
||||||
|
application/vnd.s3sms
|
||||||
|
application/vnd.scribus
|
||||||
|
application/vnd.sealed.3df
|
||||||
|
application/vnd.sealed.csf
|
||||||
|
application/vnd.sealed.doc
|
||||||
|
application/vnd.sealed.eml
|
||||||
|
application/vnd.sealed.mht
|
||||||
|
application/vnd.sealed.net
|
||||||
|
application/vnd.sealed.ppt
|
||||||
|
application/vnd.sealed.tiff
|
||||||
|
application/vnd.sealed.xls
|
||||||
|
application/vnd.sealedmedia.softseal.html
|
||||||
|
application/vnd.sealedmedia.softseal.pdf
|
||||||
|
application/vnd.seemail see
|
||||||
|
application/vnd.sema sema
|
||||||
|
application/vnd.semd semd
|
||||||
|
application/vnd.semf semf
|
||||||
|
application/vnd.shana.informed.formdata ifm
|
||||||
|
application/vnd.shana.informed.formtemplate itp
|
||||||
|
application/vnd.shana.informed.interchange iif
|
||||||
|
application/vnd.shana.informed.package ipk
|
||||||
|
application/vnd.simtech-mindmapper twd twds
|
||||||
|
application/vnd.smaf mmf
|
||||||
|
application/vnd.solent.sdkm+xml sdkm sdkd
|
||||||
|
application/vnd.spotfire.dxp dxp
|
||||||
|
application/vnd.spotfire.sfs sfs
|
||||||
|
application/vnd.sss-cod
|
||||||
|
application/vnd.sss-dtf
|
||||||
|
application/vnd.sss-ntf
|
||||||
|
application/vnd.street-stream
|
||||||
|
application/vnd.sun.wadl+xml
|
||||||
|
application/vnd.sus-calendar sus susp
|
||||||
|
application/vnd.svd svd
|
||||||
|
application/vnd.swiftview-ics
|
||||||
|
application/vnd.syncml+xml xsm
|
||||||
|
application/vnd.syncml.dm+wbxml bdm
|
||||||
|
application/vnd.syncml.dm+xml xdm
|
||||||
|
application/vnd.syncml.ds.notification
|
||||||
|
application/vnd.tao.intent-module-archive tao
|
||||||
|
application/vnd.tmobile-livetv tmo
|
||||||
|
application/vnd.trid.tpt tpt
|
||||||
|
application/vnd.triscape.mxs mxs
|
||||||
|
application/vnd.trueapp tra
|
||||||
|
application/vnd.truedoc
|
||||||
|
application/vnd.ufdl ufd ufdl
|
||||||
|
application/vnd.uiq.theme utz
|
||||||
|
application/vnd.umajin umj
|
||||||
|
application/vnd.unity unityweb
|
||||||
|
application/vnd.uoml+xml uoml
|
||||||
|
application/vnd.uplanet.alert
|
||||||
|
application/vnd.uplanet.alert-wbxml
|
||||||
|
application/vnd.uplanet.bearer-choice
|
||||||
|
application/vnd.uplanet.bearer-choice-wbxml
|
||||||
|
application/vnd.uplanet.cacheop
|
||||||
|
application/vnd.uplanet.cacheop-wbxml
|
||||||
|
application/vnd.uplanet.channel
|
||||||
|
application/vnd.uplanet.channel-wbxml
|
||||||
|
application/vnd.uplanet.list
|
||||||
|
application/vnd.uplanet.list-wbxml
|
||||||
|
application/vnd.uplanet.listcmd
|
||||||
|
application/vnd.uplanet.listcmd-wbxml
|
||||||
|
application/vnd.uplanet.signal
|
||||||
|
application/vnd.vcx vcx
|
||||||
|
application/vnd.vd-study
|
||||||
|
application/vnd.vectorworks
|
||||||
|
application/vnd.vidsoft.vidconference
|
||||||
|
application/vnd.visio vsd vst vss vsw
|
||||||
|
application/vnd.visionary vis
|
||||||
|
application/vnd.vividence.scriptfile
|
||||||
|
application/vnd.vsf vsf
|
||||||
|
application/vnd.wap.sic
|
||||||
|
application/vnd.wap.slc
|
||||||
|
application/vnd.wap.wbxml wbxml
|
||||||
|
application/vnd.wap.wmlc wmlc
|
||||||
|
application/vnd.wap.wmlscriptc wmlsc
|
||||||
|
application/vnd.webturbo wtb
|
||||||
|
application/vnd.wfa.wsc
|
||||||
|
application/vnd.wordperfect wpd
|
||||||
|
application/vnd.wqd wqd
|
||||||
|
application/vnd.wrq-hp3000-labelled
|
||||||
|
application/vnd.wt.stf stf
|
||||||
|
application/vnd.wv.csp+wbxml
|
||||||
|
application/vnd.wv.csp+xml
|
||||||
|
application/vnd.wv.ssp+xml
|
||||||
|
application/vnd.xara xar
|
||||||
|
application/vnd.xfdl xfdl
|
||||||
|
application/vnd.xmpie.cpkg
|
||||||
|
application/vnd.xmpie.dpkg
|
||||||
|
application/vnd.xmpie.plan
|
||||||
|
application/vnd.xmpie.ppkg
|
||||||
|
application/vnd.xmpie.xlim
|
||||||
|
application/vnd.yamaha.hv-dic hvd
|
||||||
|
application/vnd.yamaha.hv-script hvs
|
||||||
|
application/vnd.yamaha.hv-voice hvp
|
||||||
|
application/vnd.yamaha.smaf-audio saf
|
||||||
|
application/vnd.yamaha.smaf-phrase spf
|
||||||
|
application/vnd.yellowriver-custom-menu cmp
|
||||||
|
application/vnd.zzazz.deck+xml zaz
|
||||||
|
application/voicexml+xml vxml
|
||||||
|
application/watcherinfo+xml
|
||||||
|
application/whoispp-query
|
||||||
|
application/whoispp-response
|
||||||
|
application/winhlp hlp
|
||||||
|
application/wita
|
||||||
|
application/wordperfect5.1
|
||||||
|
application/wsdl+xml wsdl
|
||||||
|
application/wspolicy+xml wspolicy
|
||||||
|
application/x-ace-compressed ace
|
||||||
|
application/x-bcpio bcpio
|
||||||
|
application/x-bittorrent torrent
|
||||||
|
application/x-bzip bz
|
||||||
|
application/x-bzip2 bz2 boz
|
||||||
|
application/x-cdlink vcd
|
||||||
|
application/x-chat chat
|
||||||
|
application/x-chess-pgn pgn
|
||||||
|
application/x-compress
|
||||||
|
application/x-cpio cpio
|
||||||
|
application/x-csh csh
|
||||||
|
application/x-director dcr dir dxr fgd
|
||||||
|
application/x-dvi dvi
|
||||||
|
application/x-futuresplash spl
|
||||||
|
application/x-gtar gtar
|
||||||
|
application/x-gzip
|
||||||
|
application/x-hdf hdf
|
||||||
|
application/x-latex latex
|
||||||
|
application/x-ms-wmd wmd
|
||||||
|
application/x-ms-wmz wmz
|
||||||
|
application/x-msaccess mdb
|
||||||
|
application/x-msbinder obd
|
||||||
|
application/x-mscardfile crd
|
||||||
|
application/x-msclip clp
|
||||||
|
application/x-msdownload exe dll com bat msi
|
||||||
|
application/x-msmediaview mvb m13 m14
|
||||||
|
application/x-msmetafile wmf
|
||||||
|
application/x-msmoney mny
|
||||||
|
application/x-mspublisher pub
|
||||||
|
application/x-msschedule scd
|
||||||
|
application/x-msterminal trm
|
||||||
|
application/x-mswrite wri
|
||||||
|
application/x-netcdf nc cdf
|
||||||
|
application/x-pkcs12 p12 pfx
|
||||||
|
application/x-pkcs7-certificates p7b spc
|
||||||
|
application/x-pkcs7-certreqresp p7r
|
||||||
|
application/x-rar-compressed rar
|
||||||
|
application/x-sh sh
|
||||||
|
application/x-shar shar
|
||||||
|
application/x-shockwave-flash swf
|
||||||
|
application/x-stuffit sit
|
||||||
|
application/x-stuffitx sitx
|
||||||
|
application/x-sv4cpio sv4cpio
|
||||||
|
application/x-sv4crc sv4crc
|
||||||
|
application/x-tar tar
|
||||||
|
application/x-tcl tcl
|
||||||
|
application/x-tex tex
|
||||||
|
application/x-texinfo texinfo texi
|
||||||
|
application/x-ustar ustar
|
||||||
|
application/x-wais-source src
|
||||||
|
application/x-x509-ca-cert der crt
|
||||||
|
application/x400-bp
|
||||||
|
application/xcap-att+xml
|
||||||
|
application/xcap-caps+xml
|
||||||
|
application/xcap-el+xml
|
||||||
|
application/xcap-error+xml
|
||||||
|
application/xcap-ns+xml
|
||||||
|
application/xenc+xml xenc
|
||||||
|
application/xhtml+xml xhtml xht
|
||||||
|
application/xml xml xsl
|
||||||
|
application/xml-dtd dtd
|
||||||
|
application/xml-external-parsed-entity
|
||||||
|
application/xmpp+xml
|
||||||
|
application/xop+xml xop
|
||||||
|
application/xslt+xml xslt
|
||||||
|
application/xspf+xml xspf
|
||||||
|
application/xv+xml mxml xhvml xvml xvm
|
||||||
|
application/zip zip
|
||||||
|
audio/32kadpcm
|
||||||
|
audio/3gpp
|
||||||
|
audio/3gpp2
|
||||||
|
audio/ac3
|
||||||
|
audio/amr
|
||||||
|
audio/amr-wb
|
||||||
|
audio/amr-wb+
|
||||||
|
audio/asc
|
||||||
|
audio/basic au snd
|
||||||
|
audio/bv16
|
||||||
|
audio/bv32
|
||||||
|
audio/clearmode
|
||||||
|
audio/cn
|
||||||
|
audio/dat12
|
||||||
|
audio/dls
|
||||||
|
audio/dsr-es201108
|
||||||
|
audio/dsr-es202050
|
||||||
|
audio/dsr-es202211
|
||||||
|
audio/dsr-es202212
|
||||||
|
audio/dvi4
|
||||||
|
audio/eac3
|
||||||
|
audio/evrc
|
||||||
|
audio/evrc-qcp
|
||||||
|
audio/evrc0
|
||||||
|
audio/evrc1
|
||||||
|
audio/evrcb
|
||||||
|
audio/evrcb0
|
||||||
|
audio/evrcb1
|
||||||
|
audio/g722
|
||||||
|
audio/g7221
|
||||||
|
audio/g723
|
||||||
|
audio/g726-16
|
||||||
|
audio/g726-24
|
||||||
|
audio/g726-32
|
||||||
|
audio/g726-40
|
||||||
|
audio/g728
|
||||||
|
audio/g729
|
||||||
|
audio/g7291
|
||||||
|
audio/g729d
|
||||||
|
audio/g729e
|
||||||
|
audio/gsm
|
||||||
|
audio/gsm-efr
|
||||||
|
audio/ilbc
|
||||||
|
audio/l16
|
||||||
|
audio/l20
|
||||||
|
audio/l24
|
||||||
|
audio/l8
|
||||||
|
audio/lpc
|
||||||
|
audio/midi mid midi kar rmi
|
||||||
|
audio/mobile-xmf
|
||||||
|
audio/mp4 mp4a
|
||||||
|
audio/mp4a-latm
|
||||||
|
audio/mpa
|
||||||
|
audio/mpa-robust
|
||||||
|
audio/mpeg mpga mp2 mp2a mp3 m2a m3a
|
||||||
|
audio/mpeg4-generic
|
||||||
|
audio/parityfec
|
||||||
|
audio/pcma
|
||||||
|
audio/pcmu
|
||||||
|
audio/prs.sid
|
||||||
|
audio/qcelp
|
||||||
|
audio/red
|
||||||
|
audio/rtp-enc-aescm128
|
||||||
|
audio/rtp-midi
|
||||||
|
audio/rtx
|
||||||
|
audio/smv
|
||||||
|
audio/smv0
|
||||||
|
audio/smv-qcp
|
||||||
|
audio/sp-midi
|
||||||
|
audio/t140c
|
||||||
|
audio/t38
|
||||||
|
audio/telephone-event
|
||||||
|
audio/tone
|
||||||
|
audio/vdvi
|
||||||
|
audio/vmr-wb
|
||||||
|
audio/vnd.3gpp.iufp
|
||||||
|
audio/vnd.4sb
|
||||||
|
audio/vnd.audiokoz
|
||||||
|
audio/vnd.celp
|
||||||
|
audio/vnd.cisco.nse
|
||||||
|
audio/vnd.cmles.radio-events
|
||||||
|
audio/vnd.cns.anp1
|
||||||
|
audio/vnd.cns.inf1
|
||||||
|
audio/vnd.digital-winds eol
|
||||||
|
audio/vnd.dlna.adts
|
||||||
|
audio/vnd.dolby.mlp
|
||||||
|
audio/vnd.everad.plj
|
||||||
|
audio/vnd.hns.audio
|
||||||
|
audio/vnd.lucent.voice lvp
|
||||||
|
audio/vnd.nokia.mobile-xmf
|
||||||
|
audio/vnd.nortel.vbk
|
||||||
|
audio/vnd.nuera.ecelp4800 ecelp4800
|
||||||
|
audio/vnd.nuera.ecelp7470 ecelp7470
|
||||||
|
audio/vnd.nuera.ecelp9600 ecelp9600
|
||||||
|
audio/vnd.octel.sbc
|
||||||
|
audio/vnd.qcelp
|
||||||
|
audio/vnd.rhetorex.32kadpcm
|
||||||
|
audio/vnd.sealedmedia.softseal.mpeg
|
||||||
|
audio/vnd.vmx.cvsd
|
||||||
|
audio/wav wav
|
||||||
|
audio/x-aiff aif aiff aifc
|
||||||
|
audio/x-mpegurl m3u
|
||||||
|
audio/x-ms-wax wax
|
||||||
|
audio/x-ms-wma wma
|
||||||
|
audio/x-pn-realaudio ram ra
|
||||||
|
audio/x-pn-realaudio-plugin rmp
|
||||||
|
audio/x-wav wav
|
||||||
|
chemical/x-cdx cdx
|
||||||
|
chemical/x-cif cif
|
||||||
|
chemical/x-cmdf cmdf
|
||||||
|
chemical/x-cml cml
|
||||||
|
chemical/x-csml csml
|
||||||
|
chemical/x-pdb pdb
|
||||||
|
chemical/x-xyz xyz
|
||||||
|
image/bmp bmp
|
||||||
|
image/cgm cgm
|
||||||
|
image/fits
|
||||||
|
image/g3fax g3
|
||||||
|
image/gif gif
|
||||||
|
image/ief ief
|
||||||
|
image/jp2
|
||||||
|
image/jpeg jpeg jpg jpe
|
||||||
|
image/jpm
|
||||||
|
image/jpx
|
||||||
|
image/naplps
|
||||||
|
image/png png
|
||||||
|
image/prs.btif btif
|
||||||
|
image/prs.pti
|
||||||
|
image/svg+xml svg svgz
|
||||||
|
image/t38
|
||||||
|
image/tiff tiff tif
|
||||||
|
image/tiff-fx
|
||||||
|
image/vnd.adobe.photoshop psd
|
||||||
|
image/vnd.cns.inf2
|
||||||
|
image/vnd.djvu djvu djv
|
||||||
|
image/vnd.dwg dwg
|
||||||
|
image/vnd.dxf dxf
|
||||||
|
image/vnd.fastbidsheet fbs
|
||||||
|
image/vnd.fpx fpx
|
||||||
|
image/vnd.fst fst
|
||||||
|
image/vnd.fujixerox.edmics-mmr mmr
|
||||||
|
image/vnd.fujixerox.edmics-rlc rlc
|
||||||
|
image/vnd.globalgraphics.pgb
|
||||||
|
image/vnd.microsoft.icon ico
|
||||||
|
image/vnd.mix
|
||||||
|
image/vnd.ms-modi mdi
|
||||||
|
image/vnd.net-fpx npx
|
||||||
|
image/vnd.sealed.png
|
||||||
|
image/vnd.sealedmedia.softseal.gif
|
||||||
|
image/vnd.sealedmedia.softseal.jpg
|
||||||
|
image/vnd.svf
|
||||||
|
image/vnd.wap.wbmp wbmp
|
||||||
|
image/vnd.xiff xif
|
||||||
|
image/x-cmu-raster ras
|
||||||
|
image/x-cmx cmx
|
||||||
|
image/x-icon
|
||||||
|
image/x-pcx pcx
|
||||||
|
image/x-pict pic pct
|
||||||
|
image/x-portable-anymap pnm
|
||||||
|
image/x-portable-bitmap pbm
|
||||||
|
image/x-portable-graymap pgm
|
||||||
|
image/x-portable-pixmap ppm
|
||||||
|
image/x-rgb rgb
|
||||||
|
image/x-xbitmap xbm
|
||||||
|
image/x-xpixmap xpm
|
||||||
|
image/x-xwindowdump xwd
|
||||||
|
message/cpim
|
||||||
|
message/delivery-status
|
||||||
|
message/disposition-notification
|
||||||
|
message/external-body
|
||||||
|
message/http
|
||||||
|
message/news
|
||||||
|
message/partial
|
||||||
|
message/rfc822 eml mime
|
||||||
|
message/s-http
|
||||||
|
message/sip
|
||||||
|
message/sipfrag
|
||||||
|
message/tracking-status
|
||||||
|
model/iges igs iges
|
||||||
|
model/mesh msh mesh silo
|
||||||
|
model/vnd.dwf dwf
|
||||||
|
model/vnd.flatland.3dml
|
||||||
|
model/vnd.gdl gdl
|
||||||
|
model/vnd.gs.gdl
|
||||||
|
model/vnd.gtw gtw
|
||||||
|
model/vnd.moml+xml
|
||||||
|
model/vnd.mts mts
|
||||||
|
model/vnd.parasolid.transmit.binary
|
||||||
|
model/vnd.parasolid.transmit.text
|
||||||
|
model/vnd.vtu vtu
|
||||||
|
model/vrml wrl vrml
|
||||||
|
multipart/alternative
|
||||||
|
multipart/appledouble
|
||||||
|
multipart/byteranges
|
||||||
|
multipart/digest
|
||||||
|
multipart/encrypted
|
||||||
|
multipart/form-data
|
||||||
|
multipart/header-set
|
||||||
|
multipart/mixed
|
||||||
|
multipart/parallel
|
||||||
|
multipart/related
|
||||||
|
multipart/report
|
||||||
|
multipart/signed
|
||||||
|
multipart/voice-message
|
||||||
|
text/calendar ics ifb
|
||||||
|
text/css css
|
||||||
|
text/csv csv
|
||||||
|
text/directory
|
||||||
|
text/dns
|
||||||
|
text/enriched
|
||||||
|
text/html html htm
|
||||||
|
text/parityfec
|
||||||
|
text/plain txt text conf def list log in
|
||||||
|
text/prs.fallenstein.rst
|
||||||
|
text/prs.lines.tag dsc
|
||||||
|
text/red
|
||||||
|
text/rfc822-headers
|
||||||
|
text/richtext rtx
|
||||||
|
text/rtf
|
||||||
|
text/rtp-enc-aescm128
|
||||||
|
text/rtx
|
||||||
|
text/sgml sgml sgm
|
||||||
|
text/t140
|
||||||
|
text/tab-separated-values tsv
|
||||||
|
text/troff t tr roff man me ms
|
||||||
|
text/uri-list uri uris urls
|
||||||
|
text/vnd.abc
|
||||||
|
text/vnd.curl
|
||||||
|
text/vnd.dmclientscript
|
||||||
|
text/vnd.esmertec.theme-descriptor
|
||||||
|
text/vnd.fly fly
|
||||||
|
text/vnd.fmi.flexstor flx
|
||||||
|
text/vnd.in3d.3dml 3dml
|
||||||
|
text/vnd.in3d.spot spot
|
||||||
|
text/vnd.iptc.newsml
|
||||||
|
text/vnd.iptc.nitf
|
||||||
|
text/vnd.latex-z
|
||||||
|
text/vnd.motorola.reflex
|
||||||
|
text/vnd.ms-mediapackage
|
||||||
|
text/vnd.net2phone.commcenter.command
|
||||||
|
text/vnd.sun.j2me.app-descriptor jad
|
||||||
|
text/vnd.trolltech.linguist
|
||||||
|
text/vnd.wap.si
|
||||||
|
text/vnd.wap.sl
|
||||||
|
text/vnd.wap.wml wml
|
||||||
|
text/vnd.wap.wmlscript wmls
|
||||||
|
text/x-asm s asm
|
||||||
|
text/x-c c cc cxx cpp h hh dic
|
||||||
|
text/x-fortran f for f77 f90
|
||||||
|
text/x-pascal p pas
|
||||||
|
text/x-java-source java
|
||||||
|
text/x-setext etx
|
||||||
|
text/x-uuencode uu
|
||||||
|
text/x-vcalendar vcs
|
||||||
|
text/x-vcard vcf
|
||||||
|
text/xml
|
||||||
|
text/xml-external-parsed-entity
|
||||||
|
video/3gpp 3gp
|
||||||
|
video/3gpp-tt
|
||||||
|
video/3gpp2 3g2
|
||||||
|
video/bmpeg
|
||||||
|
video/bt656
|
||||||
|
video/celb
|
||||||
|
video/dv
|
||||||
|
video/h261 h261
|
||||||
|
video/h263 h263
|
||||||
|
video/h263-1998
|
||||||
|
video/h263-2000
|
||||||
|
video/h264 h264
|
||||||
|
video/jpeg jpgv
|
||||||
|
video/jpm jpm jpgm
|
||||||
|
video/mj2 mj2 mjp2
|
||||||
|
video/mp1s
|
||||||
|
video/mp2p
|
||||||
|
video/mp2t
|
||||||
|
video/mp4 mp4 mp4v mpg4
|
||||||
|
video/mp4v-es
|
||||||
|
video/mpeg mpeg mpg mpe m1v m2v
|
||||||
|
video/mpeg4-generic
|
||||||
|
video/mpv
|
||||||
|
video/nv
|
||||||
|
video/parityfec
|
||||||
|
video/pointer
|
||||||
|
video/quicktime qt mov
|
||||||
|
video/raw
|
||||||
|
video/rtp-enc-aescm128
|
||||||
|
video/rtx
|
||||||
|
video/smpte292m
|
||||||
|
video/vc1
|
||||||
|
video/vnd.dlna.mpeg-tts
|
||||||
|
video/vnd.fvt fvt
|
||||||
|
video/vnd.hns.video
|
||||||
|
video/vnd.motorola.video
|
||||||
|
video/vnd.motorola.videop
|
||||||
|
video/vnd.mpegurl mxu m4u
|
||||||
|
video/vnd.nokia.interleaved-multimedia
|
||||||
|
video/vnd.nokia.videovoip
|
||||||
|
video/vnd.objectvideo
|
||||||
|
video/vnd.sealed.mpeg1
|
||||||
|
video/vnd.sealed.mpeg4
|
||||||
|
video/vnd.sealed.swf
|
||||||
|
video/vnd.sealedmedia.softseal.mov
|
||||||
|
video/vnd.vivo viv
|
||||||
|
video/x-fli fli
|
||||||
|
video/x-ms-asf asf asx
|
||||||
|
video/x-ms-wm wm
|
||||||
|
video/x-ms-wmv wmv
|
||||||
|
video/x-ms-wmx wmx
|
||||||
|
video/x-ms-wvx wvx
|
||||||
|
video/x-msvideo avi
|
||||||
|
video/x-sgi-movie movie
|
||||||
|
x-conference/x-cooltalk ice
|
@ -0,0 +1,96 @@
|
|||||||
|
<profile name="external">
|
||||||
|
<!-- http://wiki.freeswitch.org/wiki/Sofia_Configuration_Files -->
|
||||||
|
<!-- This profile is only for outbound registrations to providers -->
|
||||||
|
<gateways>
|
||||||
|
<X-PRE-PROCESS cmd="include" data="external/*.xml"/>
|
||||||
|
</gateways>
|
||||||
|
|
||||||
|
<aliases>
|
||||||
|
<!--
|
||||||
|
<alias name="outbound"/>
|
||||||
|
<alias name="nat"/>
|
||||||
|
-->
|
||||||
|
</aliases>
|
||||||
|
|
||||||
|
<domains>
|
||||||
|
<domain name="all" alias="false" parse="true"/>
|
||||||
|
</domains>
|
||||||
|
|
||||||
|
<settings>
|
||||||
|
<param name="debug" value="0"/>
|
||||||
|
<!-- If you want FreeSWITCH to shutdown if this profile fails to load, uncomment the next line. -->
|
||||||
|
<!-- <param name="shutdown-on-fail" value="true"/> -->
|
||||||
|
<param name="sip-trace" value="no"/>
|
||||||
|
<param name="sip-capture" value="no"/>
|
||||||
|
<param name="rfc2833-pt" value="101"/>
|
||||||
|
<!-- RFC 5626 : Send reg-id and sip.instance -->
|
||||||
|
<!--<param name="enable-rfc-5626" value="true"/> -->
|
||||||
|
<param name="sip-port" value="$${external_sip_port}"/>
|
||||||
|
<param name="dialplan" value="XML"/>
|
||||||
|
<param name="context" value="public"/>
|
||||||
|
<param name="dtmf-duration" value="2000"/>
|
||||||
|
<param name="inbound-codec-prefs" value="$${global_codec_prefs}"/>
|
||||||
|
<param name="outbound-codec-prefs" value="$${outbound_codec_prefs}"/>
|
||||||
|
<param name="hold-music" value="$${hold_music}"/>
|
||||||
|
<param name="rtp-timer-name" value="soft"/>
|
||||||
|
<!--<param name="enable-100rel" value="true"/>-->
|
||||||
|
<!--<param name="disable-srv503" value="true"/>-->
|
||||||
|
<!-- This could be set to "passive" -->
|
||||||
|
<param name="local-network-acl" value="localnet.auto"/>
|
||||||
|
<param name="manage-presence" value="false"/>
|
||||||
|
|
||||||
|
<!-- used to share presence info across sofia profiles
|
||||||
|
manage-presence needs to be set to passive on this profile
|
||||||
|
if you want it to behave as if it were the internal profile
|
||||||
|
for presence.
|
||||||
|
-->
|
||||||
|
<!-- Name of the db to use for this profile -->
|
||||||
|
<!--<param name="dbname" value="share_presence"/>-->
|
||||||
|
<!--<param name="presence-hosts" value="$${domain}"/>-->
|
||||||
|
<!--<param name="force-register-domain" value="$${domain}"/>-->
|
||||||
|
<!--all inbound reg will stored in the db using this domain -->
|
||||||
|
<!--<param name="force-register-db-domain" value="$${domain}"/>-->
|
||||||
|
<!-- ************************************************* -->
|
||||||
|
|
||||||
|
<!--<param name="aggressive-nat-detection" value="true"/>-->
|
||||||
|
<param name="inbound-codec-negotiation" value="generous"/>
|
||||||
|
<param name="nonce-ttl" value="60"/>
|
||||||
|
<param name="auth-calls" value="$${external_auth_calls}"/>
|
||||||
|
<param name="inbound-late-negotiation" value="true"/>
|
||||||
|
<param name="inbound-zrtp-passthru" value="true"/> <!-- (also enables late negotiation) -->
|
||||||
|
<!--
|
||||||
|
DO NOT USE HOSTNAMES, ONLY IP ADDRESSES IN THESE SETTINGS!
|
||||||
|
-->
|
||||||
|
<param name="rtp-ip" value="$${external_rtp_ip}"/>
|
||||||
|
<param name="sip-ip" value="$${external_sip_ip}"/>
|
||||||
|
<param name="ext-rtp-ip" value="auto-nat"/>
|
||||||
|
<param name="ext-sip-ip" value="auto-nat"/>
|
||||||
|
<param name="rtp-timeout-sec" value="300"/>
|
||||||
|
<param name="rtp-hold-timeout-sec" value="1800"/>
|
||||||
|
<!--<param name="enable-3pcc" value="true"/>-->
|
||||||
|
|
||||||
|
<!-- TLS: disabled by default, set to "true" to enable -->
|
||||||
|
<param name="tls" value="$${external_ssl_enable}"/>
|
||||||
|
<!-- Set to true to not bind on the normal sip-port but only on the TLS port -->
|
||||||
|
<param name="tls-only" value="false"/>
|
||||||
|
<!-- additional bind parameters for TLS -->
|
||||||
|
<param name="tls-bind-params" value="transport=tls"/>
|
||||||
|
<!-- Port to listen on for TLS requests. (5081 will be used if unspecified) -->
|
||||||
|
<param name="tls-sip-port" value="$${external_tls_port}"/>
|
||||||
|
<!-- Location of the agent.pem and cafile.pem ssl certificates (needed for TLS server) -->
|
||||||
|
<param name="tls-cert-dir" value="$${external_ssl_dir}"/>
|
||||||
|
<!-- Optionally set the passphrase password used by openSSL to encrypt/decrypt TLS private key files -->
|
||||||
|
<param name="tls-passphrase" value=""/>
|
||||||
|
<!-- Verify the date on TLS certificates -->
|
||||||
|
<param name="tls-verify-date" value="true"/>
|
||||||
|
<!-- TLS verify policy, when registering/inviting gateways with other servers (outbound) or handling inbound registration/invite requests how should we verify their certificate -->
|
||||||
|
<!-- set to 'in' to only verify incoming connections, 'out' to only verify outgoing connections, 'all' to verify all connections, also 'in_subjects', 'out_subjects' and 'all_subjects' for subject validation. Multiple policies can be split with a '|' pipe -->
|
||||||
|
<param name="tls-verify-policy" value="none"/>
|
||||||
|
<!-- Certificate max verify depth to use for validating peer TLS certificates when the verify policy is not none -->
|
||||||
|
<param name="tls-verify-depth" value="2"/>
|
||||||
|
<!-- If the tls-verify-policy is set to subjects_all or subjects_in this sets which subjects are allowed, multiple subjects can be split with a '|' pipe -->
|
||||||
|
<param name="tls-verify-in-subjects" value=""/>
|
||||||
|
<!-- TLS version ("sslv23" (default), "tlsv1"). NOTE: Phones may not work with TLSv1 -->
|
||||||
|
<param name="tls-version" value="$${sip_tls_version}"/>
|
||||||
|
</settings>
|
||||||
|
</profile>
|
38
src/mod/event_handlers/mod_rayo/conf/sip_profiles/external/example.xml
vendored
Normal file
38
src/mod/event_handlers/mod_rayo/conf/sip_profiles/external/example.xml
vendored
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<include>
|
||||||
|
<!--<gateway name="asterlink.com">-->
|
||||||
|
<!--/// account username *required* ///-->
|
||||||
|
<!--<param name="username" value="cluecon"/>-->
|
||||||
|
<!--/// auth realm: *optional* same as gateway name, if blank ///-->
|
||||||
|
<!--<param name="realm" value="asterlink.com"/>-->
|
||||||
|
<!--/// username to use in from: *optional* same as username, if blank ///-->
|
||||||
|
<!--<param name="from-user" value="cluecon"/>-->
|
||||||
|
<!--/// domain to use in from: *optional* same as realm, if blank ///-->
|
||||||
|
<!--<param name="from-domain" value="asterlink.com"/>-->
|
||||||
|
<!--/// account password *required* ///-->
|
||||||
|
<!--<param name="password" value="2007"/>-->
|
||||||
|
<!--/// extension for inbound calls: *optional* same as username, if blank ///-->
|
||||||
|
<!--<param name="extension" value="cluecon"/>-->
|
||||||
|
<!--/// proxy host: *optional* same as realm, if blank ///-->
|
||||||
|
<!--<param name="proxy" value="asterlink.com"/>-->
|
||||||
|
<!--/// send register to this proxy: *optional* same as proxy, if blank ///-->
|
||||||
|
<!--<param name="register-proxy" value="mysbc.com"/>-->
|
||||||
|
<!--/// expire in seconds: *optional* 3600, if blank ///-->
|
||||||
|
<!--<param name="expire-seconds" value="60"/>-->
|
||||||
|
<!--/// do not register ///-->
|
||||||
|
<!--<param name="register" value="false"/>-->
|
||||||
|
<!-- which transport to use for register -->
|
||||||
|
<!--<param name="register-transport" value="udp"/>-->
|
||||||
|
<!--How many seconds before a retry when a failure or timeout occurs -->
|
||||||
|
<!--<param name="retry-seconds" value="30"/>-->
|
||||||
|
<!--Use the callerid of an inbound call in the from field on outbound calls via this gateway -->
|
||||||
|
<!--<param name="caller-id-in-from" value="false"/>-->
|
||||||
|
<!--extra sip params to send in the contact-->
|
||||||
|
<!--<param name="contact-params" value="tport=tcp"/>-->
|
||||||
|
<!--send an options ping every x seconds, failure will unregister and/or mark it down-->
|
||||||
|
<!--<param name="ping" value="25"/>-->
|
||||||
|
<!--</gateway>-->
|
||||||
|
<!--rfc5626 : Abilitazione rfc5626 ///-->
|
||||||
|
<!--<param name="rfc-5626" value="true"/>-->
|
||||||
|
<!--rfc5626 : extra sip params to send in the contact-->
|
||||||
|
<!--<param name="reg-id" value="1"/>-->
|
||||||
|
</include>
|
74
src/mod/event_handlers/mod_rayo/conf/vars.xml
Normal file
74
src/mod/event_handlers/mod_rayo/conf/vars.xml
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
<include>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="sound_prefix=$${sounds_dir}/en/us/callie"/>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This setting is what sets the default domain FreeSWITCH will use if all else fails.
|
||||||
|
|
||||||
|
FreeSWICH will default to $${local_ip_v4} unless changed. Changing this setting does
|
||||||
|
affect the sip authentication. Please review conf/directory/default.xml for more
|
||||||
|
information on this topic.
|
||||||
|
-->
|
||||||
|
<X-PRE-PROCESS cmd="set" data="domain=$${local_ip_v4}"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="domain_name=$${domain}"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="hold_music=local_stream://moh"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="use_profile=external"/>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Enable ZRTP globally you can override this on a per channel basis
|
||||||
|
|
||||||
|
http://wiki.freeswitch.org/wiki/ZRTP (on how to enable zrtp)
|
||||||
|
-->
|
||||||
|
<X-PRE-PROCESS cmd="set" data="zrtp_secure_media=true"/>
|
||||||
|
|
||||||
|
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=PCMU,PCMA"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=PCMU,PCMA"/>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
THIS IS ONLY USED FOR DINGALING
|
||||||
|
|
||||||
|
bind_server_ip
|
||||||
|
|
||||||
|
Can be an ip address, a dns name, or "auto".
|
||||||
|
This determines an ip address available on this host to bind.
|
||||||
|
If you are separating RTP and SIP traffic, you will want to have
|
||||||
|
use different addresses where this variable appears.
|
||||||
|
Used by: dingaling.conf.xml
|
||||||
|
-->
|
||||||
|
<X-PRE-PROCESS cmd="set" data="bind_server_ip=auto"/>
|
||||||
|
|
||||||
|
<!-- unroll-loops
|
||||||
|
Used to turn on sip loopback unrolling.
|
||||||
|
-->
|
||||||
|
<X-PRE-PROCESS cmd="set" data="unroll_loops=true"/>
|
||||||
|
|
||||||
|
<X-PRE-PROCESS cmd="set" data="outbound_caller_name=FreeSWITCH"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="outbound_caller_id=0000000000"/>
|
||||||
|
|
||||||
|
<!-- various debug and defaults -->
|
||||||
|
<X-PRE-PROCESS cmd="set" data="call_debug=false"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="console_loglevel=info"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="default_areacode=617"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="default_country=US"/>
|
||||||
|
|
||||||
|
<!-- if false or undefined, the destination number is included in presence NOTIFY dm:note.
|
||||||
|
if true, the destination number is not included -->
|
||||||
|
<X-PRE-PROCESS cmd="set" data="presence_privacy=false"/>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
SIP and TLS settings. http://wiki.freeswitch.org/wiki/Tls
|
||||||
|
-->
|
||||||
|
<X-PRE-PROCESS cmd="set" data="sip_tls_version=tlsv1"/>
|
||||||
|
|
||||||
|
<!-- Rayo -->
|
||||||
|
<X-PRE-PROCESS cmd="set" data="rayo_ip=$${local_ip_v4}"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="rayo_domain_name=$${rayo_ip}"/>
|
||||||
|
|
||||||
|
<!-- External SIP Profile -->
|
||||||
|
<X-PRE-PROCESS cmd="set" data="external_rtp_ip=$${local_ip_v4}"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="external_sip_ip=$${local_ip_v4}"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="external_sip_port=5060"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="external_tls_port=5061"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="external_tls_enable=false"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="external_tls_dir=$${base_dir}/conf/ssl"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="external_auth_calls=false"/>
|
||||||
|
</include>
|
24
src/mod/event_handlers/mod_rayo/gateway/README
Normal file
24
src/mod/event_handlers/mod_rayo/gateway/README
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Still a work in progress...
|
||||||
|
|
||||||
|
# Compile on CentOS 6.4
|
||||||
|
erlc -I /usr/lib64/ejabberd/include mod_rayo_gateway.erl
|
||||||
|
|
||||||
|
# Install in ejabberd
|
||||||
|
cp mod_rayo_gateway.beam /usr/lib64/ejabberd/ebin/
|
||||||
|
|
||||||
|
vi /etc/ejabberd/ejabberd.cfg
|
||||||
|
%%
|
||||||
|
%% Modules enabled in all ejabberd virtual hosts
|
||||||
|
%%
|
||||||
|
{modules,
|
||||||
|
[
|
||||||
|
...
|
||||||
|
{mod_rayo_gateway,[]},
|
||||||
|
...
|
||||||
|
]}.
|
||||||
|
|
||||||
|
ejabberdctl debug
|
||||||
|
(ejabberd@jabber)1> l(mod_rayo_gateway).
|
||||||
|
{module,mod_rayo_gateway}
|
||||||
|
(ejabberd@jabber)2>
|
||||||
|
|
759
src/mod/event_handlers/mod_rayo/gateway/mod_rayo_gateway.erl
Normal file
759
src/mod/event_handlers/mod_rayo/gateway/mod_rayo_gateway.erl
Normal file
@ -0,0 +1,759 @@
|
|||||||
|
%%
|
||||||
|
%% Copyright (c) 2013 Grasshopper
|
||||||
|
%%
|
||||||
|
%% Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
%% of this software and associated documentation files (the "Software"), to deal
|
||||||
|
%% in the Software without restriction, including without limitation the rights
|
||||||
|
%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
%% copies of the Software, and to permit persons to whom the Software is
|
||||||
|
%% furnished to do so, subject to the following conditions:
|
||||||
|
%%
|
||||||
|
%% The above copyright notice and this permission notice shall be included in
|
||||||
|
%% all copies or substantial portions of the Software.
|
||||||
|
%%
|
||||||
|
%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
%% THE SOFTWARE.
|
||||||
|
%%
|
||||||
|
%% Contributors:
|
||||||
|
%% Chris Rienzo <chris.rienzo@grasshopper.com>
|
||||||
|
%%
|
||||||
|
%% Maintainer: Chris Rienzo <chris.rienzo@grasshopper.com>
|
||||||
|
%%
|
||||||
|
%% mod_rayo_gateway.erl -- ejabberd Rayo gateway module
|
||||||
|
%%
|
||||||
|
-module(mod_rayo_gateway).
|
||||||
|
|
||||||
|
-include("ejabberd.hrl").
|
||||||
|
-include("jlib.hrl").
|
||||||
|
|
||||||
|
-behavior(gen_server).
|
||||||
|
-behavior(gen_mod).
|
||||||
|
|
||||||
|
%% JID mappings
|
||||||
|
%%
|
||||||
|
%% Entity Internal JID Mapped JID
|
||||||
|
%% ====== =============== ===============
|
||||||
|
%% Client user@domain/resource gateway@internal_domain/gw-resource
|
||||||
|
%% Node node_domain external_domain
|
||||||
|
%% Call uuid@node_domain node_domain|uuid@external_domain
|
||||||
|
%% Call Resource uuid@node_domain/resource node_domain|uuid@external_domain/resource
|
||||||
|
%% Mixer name@node_domain node_domain|name@external_domain
|
||||||
|
%% Mixer Resource name@node_domain/resource node_domain|name@external_domain/resource
|
||||||
|
|
||||||
|
%% TODO don't allow nodes to act as clients
|
||||||
|
%% TODO don't allow clients to act as nodes
|
||||||
|
|
||||||
|
-export([
|
||||||
|
start_link/2,
|
||||||
|
start/2,
|
||||||
|
stop/1,
|
||||||
|
init/1,
|
||||||
|
handle_call/3,
|
||||||
|
handle_cast/2,
|
||||||
|
handle_info/2,
|
||||||
|
terminate/2,
|
||||||
|
code_change/3,
|
||||||
|
route_internal/3,
|
||||||
|
route_external/3
|
||||||
|
]).
|
||||||
|
|
||||||
|
-define(PROCNAME, ejabberd_mod_rayo_gateway).
|
||||||
|
-define(NS_RAYO, "urn:xmpp:rayo:1").
|
||||||
|
-define(NS_PING, "urn:xmpp:ping").
|
||||||
|
|
||||||
|
-record(rayo_config, {name, value}).
|
||||||
|
-record(rayo_clients, {jid, status}).
|
||||||
|
-record(rayo_nodes, {jid, status}).
|
||||||
|
-record(rayo_entities, {external_jid, internal_jid, dcp_jid, type}).
|
||||||
|
|
||||||
|
start_link(Host, Opts) ->
|
||||||
|
Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
|
||||||
|
gen_server:start_link({local, Proc}, ?MODULE, [Host, Opts], []).
|
||||||
|
|
||||||
|
% Start the module process
|
||||||
|
start(Host, Opts) ->
|
||||||
|
Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
|
||||||
|
ChildSpec = {Proc,
|
||||||
|
{?MODULE, start_link, [Host, Opts]},
|
||||||
|
temporary,
|
||||||
|
1000,
|
||||||
|
worker,
|
||||||
|
[?MODULE]},
|
||||||
|
supervisor:start_child(ejabberd_sup, ChildSpec).
|
||||||
|
|
||||||
|
% Shutdown the module
|
||||||
|
stop(Host) ->
|
||||||
|
Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
|
||||||
|
gen_server:call(Proc, stop),
|
||||||
|
supervisor:terminate_child(ejabberd_sup, Proc),
|
||||||
|
supervisor:delete_child(ejabberd_sup, Proc).
|
||||||
|
|
||||||
|
% Initialize the module
|
||||||
|
init([Host, Opts]) ->
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: Starting", []),
|
||||||
|
|
||||||
|
mnesia:delete_table(rayo_clients),
|
||||||
|
mnesia:create_table(rayo_clients, [{attributes, record_info(fields, rayo_clients)}]),
|
||||||
|
mnesia:delete_table(rayo_nodes),
|
||||||
|
mnesia:create_table(rayo_nodes, [{attributes, record_info(fields, rayo_nodes)}]),
|
||||||
|
mnesia:delete_table(rayo_entities),
|
||||||
|
mnesia:create_table(rayo_entities, [{attributes, record_info(fields, rayo_entities)}, {index, [internal_jid]}]),
|
||||||
|
mnesia:delete_table(rayo_config),
|
||||||
|
mnesia:create_table(rayo_config, [{attributes, record_info(fields, rayo_config)}]),
|
||||||
|
|
||||||
|
{A1,A2,A3} = now(),
|
||||||
|
random:seed(A1, A2, A3),
|
||||||
|
|
||||||
|
% create virtual domains
|
||||||
|
InternalDomain = gen_mod:get_opt_host(Host, Opts, "rayo-int.@HOST@"),
|
||||||
|
ExternalDomain = gen_mod:get_opt_host(Host, Opts, "rayo.@HOST@"),
|
||||||
|
{ok, Hostname} = inet:gethostname(),
|
||||||
|
InternalClient = "gateway@" ++ InternalDomain ++ "/" ++ Hostname ++ "-" ++ integer_to_list(random:uniform(65535)),
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: InternalDomain = ~p, ExternalDomain = ~p, InternalClient = ~p", [InternalDomain, ExternalDomain, InternalClient]),
|
||||||
|
mnesia:transaction(
|
||||||
|
fun() ->
|
||||||
|
mnesia:write(#rayo_config{name = "internal_domain", value = InternalDomain}),
|
||||||
|
mnesia:write(#rayo_config{name = "internal_client", value = InternalClient}),
|
||||||
|
mnesia:write(#rayo_config{name = "external_domain", value = ExternalDomain})
|
||||||
|
end
|
||||||
|
),
|
||||||
|
|
||||||
|
% set up routes to virtual domains
|
||||||
|
ejabberd_router:register_route(InternalDomain, {apply, ?MODULE, route_internal}),
|
||||||
|
ejabberd_router:register_route(ExternalDomain, {apply, ?MODULE, route_external}),
|
||||||
|
{ok, Host}.
|
||||||
|
|
||||||
|
handle_call(stop, _From, Host) ->
|
||||||
|
{stop, normal, ok, Host}.
|
||||||
|
|
||||||
|
handle_cast(_Msg, Host) ->
|
||||||
|
{noreply, Host}.
|
||||||
|
|
||||||
|
handle_info(_Msg, Host) ->
|
||||||
|
{noreply, Host}.
|
||||||
|
|
||||||
|
terminate(_Reason, Host) ->
|
||||||
|
ejabberd_router:unregister_route(Host),
|
||||||
|
ok.
|
||||||
|
|
||||||
|
code_change(_OldVsn, Host, _Extra) ->
|
||||||
|
{ok, Host}.
|
||||||
|
|
||||||
|
register_rayo_node(Jid) ->
|
||||||
|
Write = fun() ->
|
||||||
|
mnesia:write(#rayo_nodes{jid = Jid, status = "online" })
|
||||||
|
end,
|
||||||
|
Result = mnesia:transaction(Write),
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: register node: ~p, result = ~p, ~p nodes total", [jlib:jid_to_string(Jid), Result, num_rayo_nodes()]),
|
||||||
|
case num_clients() >= 1 of
|
||||||
|
true ->
|
||||||
|
ejabberd_router:route(internal_client(), Jid, online_presence());
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end,
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% TODO call this when s2s connection is dropped
|
||||||
|
unregister_rayo_node(Jid) ->
|
||||||
|
Delete = fun() ->
|
||||||
|
mnesia:delete({rayo_nodes, Jid})
|
||||||
|
end,
|
||||||
|
Result = mnesia:transaction(Delete),
|
||||||
|
Size = mnesia:table_info(rayo_nodes, size),
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: unregister node: ~p, result = ~p, ~p nodes total", [jlib:jid_to_string(Jid), Result, Size]),
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% Add client
|
||||||
|
register_rayo_client(Jid) ->
|
||||||
|
Write = fun() ->
|
||||||
|
mnesia:write(#rayo_clients{jid = Jid, status = "online" })
|
||||||
|
end,
|
||||||
|
Result = mnesia:transaction(Write),
|
||||||
|
Size = num_clients(),
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: register client: ~p, result = ~p, ~p clients total", [jlib:jid_to_string(Jid), Result, Size]),
|
||||||
|
case Size of
|
||||||
|
1 ->
|
||||||
|
route_to_list(internal_client(), all_rayo_nodes(), online_presence());
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end,
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% Remove client
|
||||||
|
% TODO call this when c2s connection is dropped
|
||||||
|
unregister_rayo_client(Jid) ->
|
||||||
|
Delete = fun() ->
|
||||||
|
mnesia:delete({rayo_clients, Jid})
|
||||||
|
end,
|
||||||
|
Result = mnesia:transaction(Delete),
|
||||||
|
Size = num_clients(),
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: unregister client: ~p, result = ~p, ~p clients total", [jlib:jid_to_string(Jid), Result, Size]),
|
||||||
|
case Size of
|
||||||
|
0 ->
|
||||||
|
route_to_list(internal_client(), all_rayo_nodes(), offline_presence());
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end,
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% Add node entity
|
||||||
|
register_rayo_node_entity(ExtJid, IntJid, DcpJid, Type) ->
|
||||||
|
Write = fun() ->
|
||||||
|
mnesia:write(#rayo_entities{external_jid = ExtJid, internal_jid = IntJid, dcp_jid = DcpJid, type = Type})
|
||||||
|
end,
|
||||||
|
Result = mnesia:transaction(Write),
|
||||||
|
Size = mnesia:table_info(rayo_entities, size),
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: register entity: ~p, result = ~p, ~p entities total", [jlib:jid_to_string(ExtJid), Result, Size]),
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% Remove node entity
|
||||||
|
unregister_rayo_node_entity(ExtJid) ->
|
||||||
|
Delete = fun() ->
|
||||||
|
mnesia:delete({rayo_entities, ExtJid})
|
||||||
|
end,
|
||||||
|
Result = mnesia:transaction(Delete),
|
||||||
|
Size = mnesia:table_info(rayo_entities, size),
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: unregister entity: ~p, result = ~p, ~p entities total", [jlib:jid_to_string(ExtJid), Result, Size]),
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% find node entity given enitity's (or its component's) internal JID
|
||||||
|
find_rayo_node_entity_by_int_jid(IntJid) ->
|
||||||
|
% remove resource from JID to find component's parent call/mixer
|
||||||
|
case mnesia:dirty_index_read(rayo_entities, jlib:jid_remove_resource(IntJid), #rayo_entities.internal_jid) of
|
||||||
|
[Entity | _] ->
|
||||||
|
Entity;
|
||||||
|
_ ->
|
||||||
|
none
|
||||||
|
end.
|
||||||
|
|
||||||
|
% find node entity given enitity's (or its component's) external JID
|
||||||
|
find_rayo_node_entity_by_ext_jid(ExtJid) ->
|
||||||
|
% remove resource from JID to find component's parent call/mixer
|
||||||
|
case mnesia:dirty_read(rayo_entities, jlib:jid_remove_resource(ExtJid)) of
|
||||||
|
[Entity | _] ->
|
||||||
|
Entity;
|
||||||
|
_ ->
|
||||||
|
none
|
||||||
|
end.
|
||||||
|
|
||||||
|
% find entity Definitive Controlling Party JID given entity external JID
|
||||||
|
find_rayo_node_entity_dcp_by_ext_jid(ExtJid) ->
|
||||||
|
case find_rayo_node_entity_by_ext_jid(ExtJid) of
|
||||||
|
{rayo_entities, _, _, DcpJid, _} ->
|
||||||
|
DcpJid;
|
||||||
|
_ ->
|
||||||
|
none
|
||||||
|
end.
|
||||||
|
|
||||||
|
% find entity Definitive Controlling Party JID given entity internal JID
|
||||||
|
find_rayo_node_entity_dcp_by_int_jid(IntJid) ->
|
||||||
|
case find_rayo_node_entity_by_int_jid(IntJid) of
|
||||||
|
{rayo_entities, _, _, DcpJid, _} ->
|
||||||
|
DcpJid;
|
||||||
|
_ ->
|
||||||
|
none
|
||||||
|
end.
|
||||||
|
|
||||||
|
% create External JID from Internal JID
|
||||||
|
% intnode@intdomain/resource -> intdomain-intnode@extdomain/resource
|
||||||
|
create_external_jid({jid, Node, Domain, Resource, _, _, _}) ->
|
||||||
|
jlib:make_jid(Domain ++ "|" ++ Node, jlib:jid_to_string(external_domain()), Resource).
|
||||||
|
|
||||||
|
% create Internal JID from External JID
|
||||||
|
% intdomain-intnode@extdomain/resource -> intnode@intdomain/resource
|
||||||
|
create_internal_jid({jid, Node, _Domain, Resource, _, _, _}) ->
|
||||||
|
% TODO use rayo_entities to lookup node... it's safer
|
||||||
|
Idx = string:str(Node, "|"),
|
||||||
|
case Idx > 0 of
|
||||||
|
true ->
|
||||||
|
jlib:make_jid(string:substr(Node, Idx + 1), string:substr(Node, 1, Idx - 1), Resource);
|
||||||
|
false ->
|
||||||
|
none
|
||||||
|
end.
|
||||||
|
|
||||||
|
% Take control of entity
|
||||||
|
% Return {true, internal entity JID} if successful
|
||||||
|
set_entity_dcp(PcpJid, EntityJid) ->
|
||||||
|
SetDcp = fun() ->
|
||||||
|
case mnesia:wread(rayo_entities, EntityJid) of
|
||||||
|
[{rayo_entities, EntityJid, InternalJid, none, Type}] ->
|
||||||
|
% take control
|
||||||
|
case mnesia:write(#rayo_entities{external_jid = EntityJid, internal_jid = InternalJid, dcp_jid = PcpJid, type = Type}) of
|
||||||
|
ok ->
|
||||||
|
{true, InternalJid};
|
||||||
|
Else ->
|
||||||
|
{error, Else}
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
|
{false, []}
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
{_, Result} = mnesia:transaction(SetDcp),
|
||||||
|
Result.
|
||||||
|
|
||||||
|
% Check if PCP has control of entity
|
||||||
|
% Return {true, internal entity JID} if true
|
||||||
|
is_entity_dcp(PcpJid, EntityJid) ->
|
||||||
|
% quick check first
|
||||||
|
case mnesia:dirty_read(rayo_entities, EntityJid) of
|
||||||
|
[{rayo_entities, EntityJid, _, none, _}] ->
|
||||||
|
% take control
|
||||||
|
set_entity_dcp(PcpJid, EntityJid);
|
||||||
|
[{rayo_entities, EntityJid, InternalJid, PcpJid, _}] ->
|
||||||
|
{true, InternalJid};
|
||||||
|
[{rayo_entities, EntityJid, InternalJid, _, _}] ->
|
||||||
|
{false, InternalJid};
|
||||||
|
[] ->
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: no match for EntityJid ~p", [EntityJid]),
|
||||||
|
{false, none}
|
||||||
|
end.
|
||||||
|
|
||||||
|
% Handle presence to external domain
|
||||||
|
route_external(From, {jid, [], _Domain, [], [], _LDomain, []} = To, {xmlelement, "presence", _Attrs, _Els} = Presence) ->
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: got client presence ~n~p", [Presence]),
|
||||||
|
route_client_presence(From, To, Presence),
|
||||||
|
ok;
|
||||||
|
|
||||||
|
% Handle presence to external domain resource
|
||||||
|
route_external(From, To, {xmlelement, "presence", _Attrs, _Els} = Presence) ->
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: got client presence to mixer ~n~p", [Presence]),
|
||||||
|
% TODO check if actually being sent to mixer...
|
||||||
|
route_client_presence_to_mixer(From, To, Presence),
|
||||||
|
ok;
|
||||||
|
|
||||||
|
% Handle <message> to external domain
|
||||||
|
route_external(_From, _To, {xmlelement, "message", _Attrs, _Els} = Message) ->
|
||||||
|
% ignore
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: got client message ~n~p", [Message]),
|
||||||
|
ok;
|
||||||
|
|
||||||
|
% Handle <iq> to external domain
|
||||||
|
route_external(From, {jid, [], _Domain, [], [], _LDomain, []} = To, {xmlelement, "iq", _Attrs, _Els} = IQ) ->
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: got client iq to gateway ~n~p", [IQ]),
|
||||||
|
case get_attribute_as_list(IQ, "type", "") of
|
||||||
|
"get" ->
|
||||||
|
case get_element(IQ, ?NS_PING, "ping") of
|
||||||
|
undefined ->
|
||||||
|
route_error_reply(To, From, IQ, ?ERR_BAD_REQUEST);
|
||||||
|
_ ->
|
||||||
|
route_result_reply(To, From, IQ)
|
||||||
|
end;
|
||||||
|
"set" ->
|
||||||
|
case get_element(IQ, ?NS_RAYO, "dial") of
|
||||||
|
undefined->
|
||||||
|
route_error_reply(To, From, IQ, ?ERR_BAD_REQUEST);
|
||||||
|
_ ->
|
||||||
|
route_dial_call(To, From, IQ)
|
||||||
|
end;
|
||||||
|
"" ->
|
||||||
|
route_error_reply(To, From, IQ, ?ERR_BAD_REQUEST)
|
||||||
|
end,
|
||||||
|
ok;
|
||||||
|
|
||||||
|
% Handle <iq> to external domain resource
|
||||||
|
route_external(From, To, {xmlelement, "iq", _Attrs, _Els} = IQ) ->
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: got client iq ~n~p", [IQ]),
|
||||||
|
case is_entity_dcp(From, To) of
|
||||||
|
{true, _} ->
|
||||||
|
IntFrom = internal_client(),
|
||||||
|
IntTo = create_internal_jid(To),
|
||||||
|
route_iq_request(IntFrom, IntTo, IQ, fun(IQReply) -> route_iq_response(From, To, IQ, IQReply) end);
|
||||||
|
{false, _} ->
|
||||||
|
route_error_reply(To, From, IQ, ?ERR_CONFLICT);
|
||||||
|
_ ->
|
||||||
|
route_error_reply(To, From, IQ, ?ERR_BAD_REQUEST)
|
||||||
|
end,
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% Handle <presence> to internal domain
|
||||||
|
route_internal(From, {jid, [], _Domain, [], [], _LDomain, []} = To, {xmlelement, "presence", _Attrs, _Els} = Presence) ->
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: got node presence to internal domain ~n~p", [Presence]),
|
||||||
|
route_server_presence(From, To, Presence),
|
||||||
|
ok;
|
||||||
|
|
||||||
|
% Handle <presence> to internal domain resource
|
||||||
|
route_internal(From, To, {xmlelement, "presence", _Attrs, _Els} = Presence) ->
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: got node presence to internal domain ~n~p", [Presence]),
|
||||||
|
case To =:= internal_client() of
|
||||||
|
true ->
|
||||||
|
route_server_presence(From, To, Presence);
|
||||||
|
false ->
|
||||||
|
% TODO implement
|
||||||
|
ok
|
||||||
|
end,
|
||||||
|
ok;
|
||||||
|
|
||||||
|
% Handle <message> to internal domain
|
||||||
|
route_internal(_From, _To, {xmlelement, "message", _Attrs, _Els} = Message) ->
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: got node message ~n~p", [Message]),
|
||||||
|
% ignore
|
||||||
|
ok;
|
||||||
|
|
||||||
|
% Handle <iq> to internal domain.
|
||||||
|
route_internal(From, {jid, [], _Domain, [], [], _LDomain, []} = To, {xmlelement, "iq", _Attrs, _Els} = IQ) ->
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: got node iq ~n~p", [IQ]),
|
||||||
|
case get_attribute_as_list(IQ, "type", "") of
|
||||||
|
"get" ->
|
||||||
|
case get_element(IQ, ?NS_PING, "ping") of
|
||||||
|
undefined ->
|
||||||
|
route_error_reply(To, From, IQ, ?ERR_BAD_REQUEST);
|
||||||
|
_ ->
|
||||||
|
route_result_reply(To, From, IQ)
|
||||||
|
end;
|
||||||
|
"result" ->
|
||||||
|
ejabberd_local:process_iq_reply(From, To, jlib:iq_query_or_response_info(IQ));
|
||||||
|
"error" ->
|
||||||
|
ejabberd_local:process_iq_reply(From, To, jlib:iq_query_or_response_info(IQ));
|
||||||
|
"" ->
|
||||||
|
% don't allow get/set from nodes
|
||||||
|
route_error_reply(To, From, IQ, ?ERR_BAD_REQUEST)
|
||||||
|
end,
|
||||||
|
ok;
|
||||||
|
|
||||||
|
% Handle <iq> to internal domain resource.
|
||||||
|
route_internal(From, To, {xmlelement, "iq", _Attrs, _Els} = IQ) ->
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: got node iq ~n~p", [IQ]),
|
||||||
|
case get_attribute_as_list(IQ, "type", "") of
|
||||||
|
"result" ->
|
||||||
|
ejabberd_local:process_iq_reply(From, To, jlib:iq_query_or_response_info(IQ));
|
||||||
|
"error" ->
|
||||||
|
ejabberd_local:process_iq_reply(From, To, jlib:iq_query_or_response_info(IQ));
|
||||||
|
_ ->
|
||||||
|
% Don't allow get/set from nodes
|
||||||
|
route_error_reply(To, From, IQ, ?ERR_BAD_REQUEST)
|
||||||
|
end,
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% Process presence message from rayo node
|
||||||
|
route_rayo_node_presence(From, _To, Presence) ->
|
||||||
|
case get_attribute_as_list(Presence, "type", "") of
|
||||||
|
"" ->
|
||||||
|
case get_element(Presence, "show") of
|
||||||
|
undefined ->
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: ignoring empty presence", []);
|
||||||
|
Show ->
|
||||||
|
case get_cdata_as_list(Show) of
|
||||||
|
"chat" ->
|
||||||
|
register_rayo_node(From);
|
||||||
|
"dnd" ->
|
||||||
|
unregister_rayo_node(From);
|
||||||
|
"xa" ->
|
||||||
|
unregister_rayo_node(From);
|
||||||
|
"" ->
|
||||||
|
unregister_rayo_node(From)
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
"unavailable" ->
|
||||||
|
%TODO broadcast end instead?
|
||||||
|
unregister_rayo_node(From)
|
||||||
|
end,
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% Process presence from call
|
||||||
|
route_call_presence(From, _To, Presence) ->
|
||||||
|
%TODO join/unjoin mixer events
|
||||||
|
case get_attribute_as_list(Presence, "type", "") of
|
||||||
|
"" ->
|
||||||
|
case get_element(Presence, ?NS_RAYO, "offer") of
|
||||||
|
undefined ->
|
||||||
|
route_rayo_entity_stanza(From, Presence);
|
||||||
|
_ ->
|
||||||
|
route_offer_call(From, Presence)
|
||||||
|
end;
|
||||||
|
"unavailable" ->
|
||||||
|
case get_element(Presence, ?NS_RAYO, "end") of
|
||||||
|
undefined ->
|
||||||
|
route_rayo_entity_stanza(From, Presence);
|
||||||
|
_ ->
|
||||||
|
route_rayo_entity_stanza(From, Presence),
|
||||||
|
unregister_rayo_node_entity(create_external_jid(From))
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% presence from node
|
||||||
|
route_server_presence({jid, [], _Domain, [], [], _LDomain, []} = From, To, Presence) ->
|
||||||
|
route_rayo_node_presence(From, To, Presence),
|
||||||
|
ok;
|
||||||
|
|
||||||
|
% presence from call/mixer
|
||||||
|
route_server_presence(From, To, Presence) ->
|
||||||
|
% TODO mixer
|
||||||
|
route_call_presence(From, To, Presence),
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% presence from Rayo Client
|
||||||
|
route_client_presence(From, _To, Presence) ->
|
||||||
|
case get_attribute_as_list(Presence, "type", "") of
|
||||||
|
"" ->
|
||||||
|
case get_element(Presence, "show") of
|
||||||
|
undefined ->
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: ignoring empty presence", []);
|
||||||
|
Show ->
|
||||||
|
case get_cdata_as_list(Show) of
|
||||||
|
"chat" ->
|
||||||
|
register_rayo_client(From);
|
||||||
|
"dnd" ->
|
||||||
|
unregister_rayo_client(From);
|
||||||
|
_ ->
|
||||||
|
unregister_rayo_client(From)
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
"unavailable" ->
|
||||||
|
unregister_rayo_client(From);
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end,
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% route client directed presence to mixer
|
||||||
|
route_client_presence_to_mixer(_From, _To, _Presence) ->
|
||||||
|
% TODO
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% Handle offer to client
|
||||||
|
route_offer_call(From, Offer) ->
|
||||||
|
% Any clients available?
|
||||||
|
case pick_client() of
|
||||||
|
none ->
|
||||||
|
% TODO reject?
|
||||||
|
ok;
|
||||||
|
ClientDcp ->
|
||||||
|
% Remember call
|
||||||
|
ExtFrom = create_external_jid(From),
|
||||||
|
register_rayo_node_entity(ExtFrom, From, ClientDcp, call),
|
||||||
|
ejabberd_router:route(ExtFrom, ClientDcp, Offer)
|
||||||
|
end,
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% convert URI to a JID
|
||||||
|
uri_to_jid(Uri) ->
|
||||||
|
JidString = case string:str(Uri, "xmpp:") of
|
||||||
|
1 ->
|
||||||
|
string:substr(Uri, 6);
|
||||||
|
_ ->
|
||||||
|
Uri
|
||||||
|
end,
|
||||||
|
jlib:string_to_jid(JidString).
|
||||||
|
|
||||||
|
% convert internal IQ reply to an external reply
|
||||||
|
create_external_iq_reply(OrigIQ, {xmlelement, _, _, Els} = IQReply) ->
|
||||||
|
IQId = get_attribute_as_list(OrigIQ, "id", ""),
|
||||||
|
IQType = get_attribute_as_list(IQReply, "type", ""),
|
||||||
|
{xmlelement, "iq", [{"id", IQId}, {"type", IQType}], Els}.
|
||||||
|
|
||||||
|
% Process dial response
|
||||||
|
route_dial_call_response(OrigFrom, OrigTo, OrigIQ, timeout) ->
|
||||||
|
% TODO retry on different node?
|
||||||
|
route_iq_response(OrigFrom, OrigTo, OrigIQ, timeout);
|
||||||
|
|
||||||
|
route_dial_call_response(OrigFrom, OrigTo, OrigIQ, IQReply) ->
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: IQ response for ~p", [OrigIQ]),
|
||||||
|
IQReplyPacket = jlib:iq_to_xml(IQReply),
|
||||||
|
case get_element(IQReplyPacket, "error") of
|
||||||
|
undefined ->
|
||||||
|
case get_element(IQReplyPacket, "ref") of
|
||||||
|
undefined ->
|
||||||
|
ok;
|
||||||
|
Ref ->
|
||||||
|
IntJid = uri_to_jid(get_attribute_as_list(Ref, "uri", "")),
|
||||||
|
register_rayo_node_entity(create_external_jid(IntJid), IntJid, OrigFrom, call)
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end,
|
||||||
|
ejabberd_router:route(OrigTo, OrigFrom, create_external_iq_reply(OrigIQ, IQReplyPacket)),
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% Forward dial to node
|
||||||
|
route_dial_call(From, To, Dial) ->
|
||||||
|
% any nodes available?
|
||||||
|
case num_rayo_nodes() > 0 of
|
||||||
|
true ->
|
||||||
|
IntFrom = internal_client(),
|
||||||
|
case pick_rayo_node() of
|
||||||
|
none ->
|
||||||
|
route_error_reply(To, From, Dial, ?ERR_SERVICE_UNAVAILABLE);
|
||||||
|
NodeJid ->
|
||||||
|
route_iq_request(IntFrom, NodeJid, Dial, fun(IQReply) -> route_dial_call_response(From, To, Dial, IQReply) end)
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
|
route_error_reply(To, From, Dial, ?ERR_RESOURCE_CONSTRAINT)
|
||||||
|
end.
|
||||||
|
|
||||||
|
% return configuration value given name
|
||||||
|
config_value(Name) ->
|
||||||
|
case catch mnesia:dirty_read(rayo_config, Name) of
|
||||||
|
[{rayo_config, Name, Value}] ->
|
||||||
|
Value;
|
||||||
|
_ ->
|
||||||
|
""
|
||||||
|
end.
|
||||||
|
|
||||||
|
% return internal client name
|
||||||
|
internal_client() ->
|
||||||
|
jlib:string_to_jid(config_value("internal_client")).
|
||||||
|
|
||||||
|
% return internal domain name
|
||||||
|
internal_domain() ->
|
||||||
|
jlib:string_to_jid(config_value("internal_domain")).
|
||||||
|
|
||||||
|
% return external domain name
|
||||||
|
external_domain() ->
|
||||||
|
jlib:string_to_jid(config_value("external_domain")).
|
||||||
|
|
||||||
|
% return number of registered clients
|
||||||
|
num_clients() ->
|
||||||
|
mnesia:table_info(rayo_clients, size).
|
||||||
|
|
||||||
|
% return all registered client JIDs
|
||||||
|
all_clients() ->
|
||||||
|
case mnesia:transaction(fun() -> mnesia:all_keys(rayo_clients) end) of
|
||||||
|
{atomic, Keys} ->
|
||||||
|
Keys;
|
||||||
|
_ ->
|
||||||
|
[]
|
||||||
|
end.
|
||||||
|
|
||||||
|
% pick a registered client
|
||||||
|
pick_client() ->
|
||||||
|
% pick at random for now...
|
||||||
|
case all_clients() of
|
||||||
|
[] ->
|
||||||
|
none;
|
||||||
|
AllClients ->
|
||||||
|
lists:nth(random:uniform(length(AllClients)), AllClients)
|
||||||
|
end.
|
||||||
|
|
||||||
|
% pick a registered node
|
||||||
|
pick_rayo_node() ->
|
||||||
|
% pick at random for now...
|
||||||
|
case all_rayo_nodes() of
|
||||||
|
[] ->
|
||||||
|
none;
|
||||||
|
AllNodes ->
|
||||||
|
lists:nth(random:uniform(length(AllNodes)), AllNodes)
|
||||||
|
end.
|
||||||
|
|
||||||
|
% return number of registered rayo nodes
|
||||||
|
num_rayo_nodes() ->
|
||||||
|
mnesia:table_info(rayo_nodes, size).
|
||||||
|
|
||||||
|
% return all rayo node JIDs
|
||||||
|
all_rayo_nodes() ->
|
||||||
|
case mnesia:transaction(fun() -> mnesia:all_keys(rayo_nodes) end) of
|
||||||
|
{atomic, Keys} ->
|
||||||
|
Keys;
|
||||||
|
_ ->
|
||||||
|
[]
|
||||||
|
end.
|
||||||
|
|
||||||
|
presence(Status) ->
|
||||||
|
{xmlelement, "presence", [], [
|
||||||
|
{xmlelement, "show", [], [
|
||||||
|
{xmlcdata, Status}
|
||||||
|
]}
|
||||||
|
]}.
|
||||||
|
|
||||||
|
online_presence() ->
|
||||||
|
presence(<<"chat">>).
|
||||||
|
|
||||||
|
offline_presence() ->
|
||||||
|
presence(<<"dnd">>).
|
||||||
|
|
||||||
|
route_to_list(From, ToList, Stanza) ->
|
||||||
|
lists:map(fun(To) -> ejabberd_router:route(From, To, Stanza) end, ToList),
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% route stanza from entity
|
||||||
|
route_rayo_entity_stanza(From, Stanza) ->
|
||||||
|
case find_rayo_node_entity_dcp_by_int_jid(From) of
|
||||||
|
none ->
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: Failed to find DCP for ~p", [From]),
|
||||||
|
ok;
|
||||||
|
DcpJid ->
|
||||||
|
ejabberd_router:route(create_external_jid(From), DcpJid, Stanza)
|
||||||
|
end,
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% route IQ response from node to client
|
||||||
|
route_iq_response(OrigFrom, OrigTo, OrigIQ, timeout) ->
|
||||||
|
route_error_reply(OrigTo, OrigFrom, OrigIQ, ?ERR_REMOTE_SERVER_TIMEOUT),
|
||||||
|
ok;
|
||||||
|
|
||||||
|
route_iq_response(OrigFrom, OrigTo, OrigIQ, IQReply) ->
|
||||||
|
?DEBUG("MOD_RAYO_GATEWAY: IQ response for ~p", [OrigIQ]),
|
||||||
|
ejabberd_router:route(OrigTo, OrigFrom, create_external_iq_reply(OrigIQ, jlib:iq_to_xml(IQReply))),
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% route IQ from client to node
|
||||||
|
route_iq_request(From, To, {xmlelement, "iq", _Atts, Els}, ResponseCallback) ->
|
||||||
|
ejabberd_local:route_iq(From, To, #iq{type = set, sub_el = Els}, ResponseCallback),
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% route IQ error given request
|
||||||
|
route_error_reply(From, To, IQ, Reason) ->
|
||||||
|
ejabberd_router:route(From, To, jlib:make_error_reply(IQ, Reason)),
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% route IQ result given request
|
||||||
|
route_result_reply(From, To, IQ) ->
|
||||||
|
ejabberd_router:route(From, To, jlib:make_result_iq_reply(IQ)),
|
||||||
|
ok.
|
||||||
|
|
||||||
|
% XML parsing helpers
|
||||||
|
|
||||||
|
get_element(Element, Name) ->
|
||||||
|
case xml:get_subtag(Element, Name) of
|
||||||
|
false ->
|
||||||
|
undefined;
|
||||||
|
Subtag ->
|
||||||
|
Subtag
|
||||||
|
end.
|
||||||
|
|
||||||
|
get_element(Element, NS, Name) ->
|
||||||
|
case get_element(Element, Name) of
|
||||||
|
undefined ->
|
||||||
|
undefined;
|
||||||
|
Subtag ->
|
||||||
|
case get_attribute_as_list(Subtag, "xmlns", "") of
|
||||||
|
"" ->
|
||||||
|
undefined;
|
||||||
|
NS ->
|
||||||
|
Subtag
|
||||||
|
end
|
||||||
|
end.
|
||||||
|
|
||||||
|
get_cdata_as_list(undefined) ->
|
||||||
|
"";
|
||||||
|
|
||||||
|
get_cdata_as_list(Element) ->
|
||||||
|
xml:get_tag_cdata(Element).
|
||||||
|
|
||||||
|
get_element_cdata_as_list(Element, Name) ->
|
||||||
|
get_cdata_as_list(get_element(Element, Name)).
|
||||||
|
|
||||||
|
get_element_cdata_as_list(Element, NS, Name) ->
|
||||||
|
get_cdata_as_list(get_element(Element, NS, Name)).
|
||||||
|
|
||||||
|
get_element_attribute_as_list(Element, Name, AttrName, Default) ->
|
||||||
|
get_attribute_as_list(get_element(Element, Name), AttrName, Default).
|
||||||
|
|
||||||
|
get_element_attribute_as_list(Element, NS, Name, AttrName, Default) ->
|
||||||
|
get_attribute_as_list(get_element(Element, NS, Name), AttrName, Default).
|
||||||
|
|
||||||
|
get_attribute_as_list(undefined, _Name, _Default) ->
|
||||||
|
undefined;
|
||||||
|
|
||||||
|
get_attribute_as_list(Element, Name, Default) ->
|
||||||
|
case xml:get_tag_attr_s(Name, Element) of
|
||||||
|
"" ->
|
||||||
|
Default;
|
||||||
|
Attr ->
|
||||||
|
Attr
|
||||||
|
end.
|
388
src/mod/event_handlers/mod_rayo/iks_helpers.c
Normal file
388
src/mod/event_handlers/mod_rayo/iks_helpers.c
Normal file
@ -0,0 +1,388 @@
|
|||||||
|
/*
|
||||||
|
* mod_rayo for FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
|
||||||
|
* Copyright (C) 2013, Grasshopper
|
||||||
|
*
|
||||||
|
* Version: MPL 1.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is mod_rayo for FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Grasshopper
|
||||||
|
* Portions created by the Initial Developer are Copyright (C)
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Chris Rienzo <chris.rienzo@grasshopper.com>
|
||||||
|
*
|
||||||
|
* iks_helpers.c -- iksemel helpers
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include "iks_helpers.h"
|
||||||
|
#include <switch.h>
|
||||||
|
#include <openssl/hmac.h>
|
||||||
|
#include <openssl/sha.h>
|
||||||
|
|
||||||
|
#undef XMPP_ERROR
|
||||||
|
#define XMPP_ERROR(def_name, name, type) \
|
||||||
|
const struct xmpp_error def_name##_val = { name, type }; \
|
||||||
|
const struct xmpp_error *def_name = &def_name##_val;
|
||||||
|
#include "xmpp_errors.def"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a <presence> event
|
||||||
|
* @param name the event name
|
||||||
|
* @param namespace the event namespace
|
||||||
|
* @param from
|
||||||
|
* @param to
|
||||||
|
* @return the event XML node
|
||||||
|
*/
|
||||||
|
iks *iks_new_presence(const char *name, const char *namespace, const char *from, const char *to)
|
||||||
|
{
|
||||||
|
iks *event = iks_new("presence");
|
||||||
|
iks *x;
|
||||||
|
/* iks makes copies of attrib name and value */
|
||||||
|
iks_insert_attrib(event, "from", from);
|
||||||
|
iks_insert_attrib(event, "to", to);
|
||||||
|
x = iks_insert(event, name);
|
||||||
|
if (!zstr(namespace)) {
|
||||||
|
iks_insert_attrib(x, "xmlns", namespace);
|
||||||
|
}
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create error response from request
|
||||||
|
* @param req the request
|
||||||
|
* @param from
|
||||||
|
* @param to
|
||||||
|
* @param err the XMPP stanza error
|
||||||
|
* @return the error response
|
||||||
|
*/
|
||||||
|
iks *iks_new_error(iks *req, const struct xmpp_error *err)
|
||||||
|
{
|
||||||
|
iks *response = iks_copy(req);
|
||||||
|
iks *x;
|
||||||
|
|
||||||
|
/* <iq> */
|
||||||
|
iks_insert_attrib(response, "from", iks_find_attrib(req, "to"));
|
||||||
|
iks_insert_attrib(response, "to", iks_find_attrib(req, "from"));
|
||||||
|
iks_insert_attrib(response, "type", "error");
|
||||||
|
|
||||||
|
/* <error> */
|
||||||
|
x = iks_insert(response, "error");
|
||||||
|
iks_insert_attrib(x, "type", err->type);
|
||||||
|
|
||||||
|
/* e.g. <feature-not-implemented> */
|
||||||
|
x = iks_insert(x, err->name);
|
||||||
|
iks_insert_attrib(x, "xmlns", IKS_NS_XMPP_STANZAS);
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create error response from request
|
||||||
|
* @param req the request
|
||||||
|
* @param from
|
||||||
|
* @param to
|
||||||
|
* @param err the XMPP stanza error
|
||||||
|
* @param detail_text optional text to include in message
|
||||||
|
* @return the <iq> error response
|
||||||
|
*/
|
||||||
|
iks *iks_new_error_detailed(iks *req, const struct xmpp_error *err, const char *detail_text)
|
||||||
|
{
|
||||||
|
iks *reply = iks_new_error(req, err);
|
||||||
|
if (!zstr(detail_text)) {
|
||||||
|
iks *error = iks_find(reply, "error");
|
||||||
|
iks *text = iks_insert(error, "text");
|
||||||
|
iks_insert_attrib(text, "xml:lang", "en");
|
||||||
|
iks_insert_attrib(text, "xmlns", IKS_NS_XMPP_STANZAS);
|
||||||
|
iks_insert_cdata(text, detail_text, strlen(detail_text));
|
||||||
|
}
|
||||||
|
return reply;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create error response from request
|
||||||
|
* @param req the request
|
||||||
|
* @param from
|
||||||
|
* @param to
|
||||||
|
* @param err the XMPP stanza error
|
||||||
|
* @param detail_text_format format string
|
||||||
|
* @param ...
|
||||||
|
* @return the error response
|
||||||
|
*/
|
||||||
|
iks *iks_new_error_detailed_printf(iks *req, const struct xmpp_error *err, const char *detail_text_format, ...)
|
||||||
|
{
|
||||||
|
iks *reply = NULL;
|
||||||
|
char *data;
|
||||||
|
va_list ap;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
va_start(ap, detail_text_format);
|
||||||
|
ret = switch_vasprintf(&data, detail_text_format, ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
if (ret == -1) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
reply = iks_new_error_detailed(req, err, data);
|
||||||
|
free(data);
|
||||||
|
return reply;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create <iq> result response from request
|
||||||
|
* @param iq the request
|
||||||
|
* @return the result response
|
||||||
|
*/
|
||||||
|
iks *iks_new_iq_result(iks *iq)
|
||||||
|
{
|
||||||
|
iks *response = iks_new("iq");
|
||||||
|
iks_insert_attrib(response, "from", iks_find_attrib(iq, "to"));
|
||||||
|
iks_insert_attrib(response, "to", iks_find_attrib(iq, "from"));
|
||||||
|
iks_insert_attrib(response, "type", "result");
|
||||||
|
iks_insert_attrib(response, "id", iks_find_attrib(iq, "id"));
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get attribute value of node, returning empty string if non-existent or not set.
|
||||||
|
* @param xml the XML node to search
|
||||||
|
* @param attrib the Attribute name
|
||||||
|
* @return the attribute value
|
||||||
|
*/
|
||||||
|
const char *iks_find_attrib_soft(iks *xml, const char *attrib)
|
||||||
|
{
|
||||||
|
char *value = iks_find_attrib(xml, attrib);
|
||||||
|
return zstr(value) ? "" : value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get attribute value of node, returning default value if missing. The default value
|
||||||
|
* is set in the node if missing.
|
||||||
|
* @param xml the XML node to search
|
||||||
|
* @param attrib the Attribute name
|
||||||
|
* @return the attribute value
|
||||||
|
*/
|
||||||
|
const char *iks_find_attrib_default(iks *xml, const char *attrib, const char *def)
|
||||||
|
{
|
||||||
|
char *value = iks_find_attrib(xml, attrib);
|
||||||
|
if (!value) {
|
||||||
|
iks_insert_attrib(xml, attrib, def);
|
||||||
|
return def;
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get attribute integer value of node
|
||||||
|
* @param xml the XML node to search
|
||||||
|
* @param attrib the Attribute name
|
||||||
|
* @return the attribute value
|
||||||
|
*/
|
||||||
|
int iks_find_int_attrib(iks *xml, const char *attrib)
|
||||||
|
{
|
||||||
|
return atoi(iks_find_attrib_soft(xml, attrib));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get attribute boolean value of node
|
||||||
|
* @param xml the XML node to search
|
||||||
|
* @param attrib the Attribute name
|
||||||
|
* @return the attribute value
|
||||||
|
*/
|
||||||
|
int iks_find_bool_attrib(iks *xml, const char *attrib)
|
||||||
|
{
|
||||||
|
return switch_true(iks_find_attrib_soft(xml, attrib));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get attribute double value of node
|
||||||
|
* @param xml the XML node to search
|
||||||
|
* @param attrib the Attribute name
|
||||||
|
* @return the attribute value
|
||||||
|
*/
|
||||||
|
double iks_find_decimal_attrib(iks *xml, const char *attrib)
|
||||||
|
{
|
||||||
|
return atof(iks_find_attrib_soft(xml, attrib));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert iksemel XML node type to string
|
||||||
|
* @param type the XML node type
|
||||||
|
* @return the string value of type or "UNKNOWN"
|
||||||
|
*/
|
||||||
|
const char *iks_node_type_to_string(int type)
|
||||||
|
{
|
||||||
|
switch(type) {
|
||||||
|
case IKS_NODE_START: return "NODE_START";
|
||||||
|
case IKS_NODE_NORMAL: return "NODE_NORMAL";
|
||||||
|
case IKS_NODE_ERROR: return "NODE_ERROR";
|
||||||
|
case IKS_NODE_STOP: return "NODE_START";
|
||||||
|
default: return "NODE_UNKNOWN";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert iksemel error code to string
|
||||||
|
* @param err the iksemel error code
|
||||||
|
* @return the string value of error or "UNKNOWN"
|
||||||
|
*/
|
||||||
|
const char *iks_net_error_to_string(int err)
|
||||||
|
{
|
||||||
|
switch (err) {
|
||||||
|
case IKS_OK: return "OK";
|
||||||
|
case IKS_NOMEM: return "NOMEM";
|
||||||
|
case IKS_BADXML: return "BADXML";
|
||||||
|
case IKS_HOOK: return "HOOK";
|
||||||
|
case IKS_NET_NODNS: return "NET_NODNS";
|
||||||
|
case IKS_NET_NOSOCK: return "NET_NOSOCK";
|
||||||
|
case IKS_NET_NOCONN: return "NET_NOCONN";
|
||||||
|
case IKS_NET_RWERR: return "NET_RWERR";
|
||||||
|
case IKS_NET_NOTSUPP: return "NET_NOTSUPP";
|
||||||
|
case IKS_NET_TLSFAIL: return "NET_TLSFAIL";
|
||||||
|
case IKS_NET_DROPPED: return "NET_DROPPED";
|
||||||
|
case IKS_NET_UNKNOWN: return "NET_UNKNOWN";
|
||||||
|
default: return "UNKNOWN";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Insert attribute using format string
|
||||||
|
* @param xml node to insert attribute into
|
||||||
|
* @param name of attribute
|
||||||
|
* @param fmt format string
|
||||||
|
* @param ... format string args
|
||||||
|
*/
|
||||||
|
iks *iks_insert_attrib_printf(iks *xml, const char *name, const char *fmt, ...)
|
||||||
|
{
|
||||||
|
iks *node;
|
||||||
|
char *data;
|
||||||
|
va_list ap;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
va_start(ap, fmt);
|
||||||
|
ret = switch_vasprintf(&data, fmt, ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
if (ret == -1) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
node = iks_insert_attrib(xml, name, data);
|
||||||
|
free(data);
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param value to match
|
||||||
|
* @param rule to check
|
||||||
|
* @return true if value is one of the comma-separated values in rule
|
||||||
|
*/
|
||||||
|
int value_matches(const char *value, const char *rule)
|
||||||
|
{
|
||||||
|
if (rule && *rule && value && *value && !strchr(value, ',')) {
|
||||||
|
const char *begin = strstr(rule, value);
|
||||||
|
const char *end = begin + strlen(value);
|
||||||
|
if (!begin) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ((begin == rule || *(begin - 1) == ',') && (*end == ',' || *end == '\0')) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
/* substring matched... try farther down the string */
|
||||||
|
return value_matches(value, end);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define IKS_SHA256_HEX_DIGEST_LENGTH ((SHA256_DIGEST_LENGTH * 2) + 1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert hash to a hex string.
|
||||||
|
* @param hash hash to convert
|
||||||
|
* @param str buffer to store hash - this buffer must be hashlen * 2 + 1 in size.
|
||||||
|
*/
|
||||||
|
static void iks_hash_to_hex_string(unsigned char *hash, int hashlen, unsigned char *str)
|
||||||
|
{
|
||||||
|
static const char *HEX = "0123456789abcdef";
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* convert to hex string with in-place algorithm */
|
||||||
|
for (i = hashlen - 1; i >= 0; i--) {
|
||||||
|
str[i * 2 + 1] = HEX[hash[i] & 0x0f];
|
||||||
|
str[i * 2] = HEX[(hash[i] >> 4) & 0x0f];
|
||||||
|
}
|
||||||
|
str[hashlen * 2] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate SHA-256 hash of value as hex string
|
||||||
|
* @param data to hash
|
||||||
|
* @param datalen length of data to hash
|
||||||
|
* @return hash as a hex string
|
||||||
|
*/
|
||||||
|
static void iks_sha256_hex_string(const unsigned char *data, int datalen, unsigned char *hash)
|
||||||
|
{
|
||||||
|
/* hash data */
|
||||||
|
SHA256(data, datalen, hash);
|
||||||
|
iks_hash_to_hex_string(hash, SHA256_DIGEST_LENGTH, hash);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate HMAC SHA-256
|
||||||
|
* @param key the key
|
||||||
|
* @param keylen length of key
|
||||||
|
* @param message the message
|
||||||
|
* @param messagelen length of message
|
||||||
|
* @param hash buffer to store the hash - must be IKS_SHA256_HEX_DIGEST_LENGTH
|
||||||
|
*/
|
||||||
|
static void iks_hmac_sha256_hex_string(const unsigned char *key, int keylen, const unsigned char *message, int messagelen, unsigned char *hash)
|
||||||
|
{
|
||||||
|
unsigned int hash_len = SHA256_DIGEST_LENGTH;
|
||||||
|
HMAC(EVP_sha256(), key, keylen, message, messagelen, hash, &hash_len);
|
||||||
|
iks_hash_to_hex_string(hash, SHA256_DIGEST_LENGTH, hash);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate server dialback key. free() the returned value
|
||||||
|
* @param secret originating server shared secret
|
||||||
|
* @param receiving_server domain
|
||||||
|
* @param originating_server domain
|
||||||
|
* @param stream_id stream ID
|
||||||
|
* @return the dialback key
|
||||||
|
*/
|
||||||
|
char *iks_server_dialback_key(const char *secret, const char *receiving_server, const char *originating_server, const char *stream_id)
|
||||||
|
{
|
||||||
|
if (!zstr(secret) && !zstr(receiving_server) && !zstr(originating_server) && !zstr(stream_id)) {
|
||||||
|
unsigned char secret_hash[IKS_SHA256_HEX_DIGEST_LENGTH];
|
||||||
|
unsigned char *message = NULL;
|
||||||
|
unsigned char *dialback_key = malloc(sizeof(unsigned char *) * IKS_SHA256_HEX_DIGEST_LENGTH);
|
||||||
|
iks_sha256_hex_string((unsigned char *)secret, strlen(secret), secret_hash);
|
||||||
|
message = (unsigned char *)switch_mprintf("%s %s %s", receiving_server, originating_server, stream_id);
|
||||||
|
iks_hmac_sha256_hex_string(secret_hash, strlen((char *)secret_hash), message, strlen((char *)message), dialback_key);
|
||||||
|
free(message);
|
||||||
|
return (char *)dialback_key;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* For Emacs:
|
||||||
|
* Local Variables:
|
||||||
|
* mode:c
|
||||||
|
* indent-tabs-mode:t
|
||||||
|
* tab-width:4
|
||||||
|
* c-basic-offset:4
|
||||||
|
* End:
|
||||||
|
* For VIM:
|
||||||
|
* vim:set softtabstop=4 shiftwidth=4 tabstop=4
|
||||||
|
*/
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user