diff --git a/src/include/switch_ivr.h b/src/include/switch_ivr.h index 2bb46bd405..5ac938e033 100644 --- a/src/include/switch_ivr.h +++ b/src/include/switch_ivr.h @@ -423,6 +423,7 @@ typedef enum { SWITCH_IVR_ACTION_EXECMENU, /* Goto another menu in the stack. */ SWITCH_IVR_ACTION_EXECAPP, /* Execute an application. */ SWITCH_IVR_ACTION_PLAYSOUND, /* Play a sound. */ + SWITCH_IVR_ACTION_SAYTEXT, /* say text. */ SWITCH_IVR_ACTION_BACK, /* Go back 1 menu. */ SWITCH_IVR_ACTION_TOMAIN, /* Go back to the top level menu. */ SWITCH_IVR_ACTION_TRANSFER, /* Transfer caller to another ext. */ diff --git a/src/switch_ivr.c b/src/switch_ivr.c index 0c866c85bd..3bf7fd214d 100644 --- a/src/switch_ivr.c +++ b/src/switch_ivr.c @@ -3464,10 +3464,12 @@ static switch_status_t play_or_say(switch_core_session_t *session, switch_ivr_me ptr = menu->ptr; } - if (menu->tts_engine && menu->tts_voice) { - switch_ivr_speak_text(session, menu->tts_engine, menu->tts_voice, NULL, 0, NULL, sound, ptr, len); - } else { + if (*sound == '/' || *sound == '\\') { switch_ivr_play_file(session, NULL, sound, NULL, NULL, ptr, len); + } else { + if (menu->tts_engine && menu->tts_voice) { + switch_ivr_speak_text(session, menu->tts_engine, menu->tts_voice, NULL, 0, NULL, sound, ptr, len); + } } if (need) { @@ -3551,6 +3553,11 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_menu_execute(switch_core_session_t *s case SWITCH_IVR_ACTION_PLAYSOUND: status = switch_ivr_play_file(session, NULL, aptr, NULL, NULL, NULL, 0); break; + case SWITCH_IVR_ACTION_SAYTEXT: + if (menu->tts_engine && menu->tts_voice) { + switch_ivr_speak_text(session, menu->tts_engine, menu->tts_voice, NULL, 0, NULL, aptr, NULL, 0); + } + break; case SWITCH_IVR_ACTION_TRANSFER: switch_ivr_session_transfer(session, aptr, NULL, NULL); running = 0;