Author: anthm Date: Wed Jan 3 11:43:59 2007 New Revision: 3901 Modified: freeswitch/trunk/conf/freeswitch.xml freeswitch/trunk/src/switch_ivr.c Log: update phrase interface Modified: freeswitch/trunk/conf/freeswitch.xml ============================================================================== --- freeswitch/trunk/conf/freeswitch.xml (original) +++ freeswitch/trunk/conf/freeswitch.xml Wed Jan 3 11:43:59 2007 @@ -678,57 +678,89 @@ <language name="en" sound_path="/snds" tts_engine="cepstral" tts_voice="david"> <macro name="msgcount"> <input pattern="(.*)"> - <action function="execute" data="sleep(1000)"/> - <action function="play-file" data="vm-youhave.wav"/> - <action function="say" data="$1" method="pronounced" type="items"/> - <action function="play-file" data="vm-messages.wav"/> - <!-- or --> - <!--<action function="speak-text" data="you have $1 messages"/>--> + <match> + <action function="execute" data="sleep(1000)"/> + <action function="play-file" data="vm-youhave.wav"/> + <action function="say" data="$1" method="pronounced" type="items"/> + <action function="play-file" data="vm-messages.wav"/> + <!-- or --> + <!--<action function="speak-text" data="you have $1 messages"/>--> + </match> </input> </macro> <macro name="saydate"> <input pattern="(.*)"> - <action function="say" data="$1" method="pronounced" type="current_date_time"/> + <match> + <action function="say" data="$1" method="pronounced" type="current_date_time"/> + </match> </input> </macro> <macro name="timespec"> <input pattern="(.*)"> - <action function="say" data="$1" method="pronounced" type="time_measurement"/> + <match> + <action function="say" data="$1" method="pronounced" type="time_measurement"/> + </match> </input> </macro> <macro name="ip-addr"> <input pattern="(.*)"> - <action function="say" data="$1" method="iterated" type="ip_address"/> - <action function="say" data="$1" method="pronounced" type="ip_address"/> + <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="(.*)"> - <action function="say" data="$1" method="pronounced" type="name_spelled"/> + <match> + <action function="say" data="$1" method="pronounced" type="name_spelled"/> + </match> </input> </macro> <macro name="spell-phonetic"> <input pattern="(.*)"> - <action function="say" data="$1" method="pronounced" type="name_phonetic"/> + <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+)"> - <action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%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> </language> <language name="fr" sound_path="/var/sounds/lang/fr/jean" tts_engine="cepstral" tts_voice="jean-pierre"> <macro name="msgcount"> <input pattern="(.*)"> - <action function="play-file" data="tuas.wav"/> - <action function="say" data="$1" method="pronounced" type="items"/> - <action function="play-file" data="messages.wav"/> + <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+)"> - <action function="speak-text" data="il y a $1 minutes et de $2 secondes de restant"/> + <match> + <action function="speak-text" data="il y a $1 minutes et de $2 secondes de restant"/> + </match> </input> </macro> </language> Modified: freeswitch/trunk/src/switch_ivr.c ============================================================================== --- freeswitch/trunk/src/switch_ivr.c (original) +++ freeswitch/trunk/src/switch_ivr.c Wed Jan 3 11:43:59 2007 @@ -4414,6 +4414,7 @@ switch_status_t status = SWITCH_STATUS_GENERR; char *old_sound_prefix, *sound_path = NULL, *tts_engine = NULL, *tts_voice = NULL; switch_channel_t *channel; + uint8_t done = 0; channel = switch_core_session_get_channel(session); assert(channel != NULL); @@ -4479,7 +4480,7 @@ switch_channel_pre_answer(channel); - while(input) { + while(input && !done) { char *pattern = (char *) switch_xml_attr(input, "pattern"); if (pattern) { @@ -4489,9 +4490,16 @@ uint32_t len = 0; char *odata = NULL; char *expanded = NULL; + switch_xml_t match = NULL; if ((proceed = switch_perform_regex(data, pattern, &re, ovector, sizeof(ovector) / sizeof(ovector[0])))) { - for (action = switch_xml_child(input, "action"); action; action = action->next) { + match = switch_xml_child(input, "match"); + } else { + match = switch_xml_child(input, "nomatch"); + } + + if (match) { + for (action = switch_xml_child(match, "action"); action; action = action->next) { char *adata = (char *) switch_xml_attr_soft(action, "data"); char *func = (char *) switch_xml_attr_soft(action, "function"); @@ -4522,6 +4530,9 @@ if (!strcasecmp(func, "play-file")) { switch_ivr_play_file(session, NULL, odata, args); + } else if (!strcasecmp(func, "break")) { + done = 1; + break; } else if (!strcasecmp(func, "execute")) { const switch_application_interface_t *application_interface; char *app_name = NULL; @@ -4568,7 +4579,7 @@ } } } - + switch_clean_re(re); switch_safe_free(expanded); switch_safe_free(substituted);
participants (1)
-
Freeswitch SVN