Skip/Override VoicemailMain(Comedian Mail) IVR

Hello,

Currently, I have voicemail on asterisk and I’m trying to make IVR on addition language different than EN.

Everything is fine but the problem is that I don’t have prompts for some of the menus and while is playing on another language suddenly is played also EN where I miss this prompt.

Can I exclude some parts of the IVR?
Example:

    -- <SIP/5005-00000182> Playing 'vm-password.slin' (language 'de')
    -- <SIP/5005-00000182> Playing 'vm-youhave.slin' (language 'de')
    -- <SIP/5005-00000182> Playing 'digits/1.slin' (language 'de')
    -- <SIP/5005-00000182> Playing 'vm-INBOX.slin' (language 'de')
    -- <SIP/5005-00000182> Playing 'vm-and.slin' (language 'de')
    -- <SIP/5005-00000182> Playing 'digits/1.slin' (language 'de')
    -- <SIP/5005-00000182> Playing 'vm-Old.slin' (language 'de')
    -- <SIP/5005-00000182> Playing 'vm-message.gsm' (language 'de')

I want to remove/exclude the vm-messages.gsm after the vm-Old.gsm. Is that possible?

You can use STAT() to check if the file exists for a specific language:

 same => n,Set(exists=${STAT(e,${ASTDATADIR}/sounds/${LANGUAGE()}/vm-message.gsm)})
 same => n,Playback(${IF($[ ${exists} = 1 ] ? vm-message : silence)})

Hi poing,

I’ve tried it but no differences. Here is my extension.ael conf

VoicemailMain(${CALLERID(num)}@VoiceMail);
Set(exists=${STAT(e,${ASTDATADIR}/sounds/${LANGUAGE()}/vm-message.gsm)});
Playback(${IF($[ ${exists} = 1 ] ? vm-message : silence)});

and the output is the same

    -- <SIP/5005-00000183> Playing 'vm-password.slin' (language 'de')
    -- <SIP/5005-00000183> Playing 'vm-youhave.slin' (language 'de')
    -- <SIP/5005-00000183> Playing 'digits/1.slin' (language 'de')
    -- <SIP/5005-00000183> Playing 'vm-INBOX.slin' (language 'de')
    -- <SIP/5005-00000183> Playing 'vm-and.slin' (language 'de')
    -- <SIP/5005-00000183> Playing 'digits/1.slin' (language 'de')
    -- <SIP/5005-00000183> Playing 'vm-Old.slin' (language 'de')
    -- <SIP/5005-00000183> Playing 'vm-message.gsm' (language 'de')
    -- <SIP/5005-00000183> Playing 'vm-onefor.gsm' (language 'de')
    -- <SIP/5005-00000183> Playing 'vm-INBOX.slin' (language 'de')

The solution only works, when the file does not exist. You may have copied the EN version, at some point to the DE directory. But you DO need to tailor the solution to your specific environment.

BTW: The output DOES NOT show the STAT() call. If it’s put int he right location, you should see something similar to:

    -- <SIP/5005-00000183> Set("SIP/5005-00000183", "exists=0")
    -- <SIP/5005-00000183> Playing 'vm-message.gsm' (language 'de')
    -- <SIP/5005-00000183> Playing 'vm-onefor.gsm' (language 'de')

I’m sure that I didn’t copy the file vm-messages.gsm in /de/ directory. I do see what you mentioned. Here is the output

Executing [Voicemail_de@internal:4] Set("SIP/5005-0000018a", "exists=0") in new stack
Executing [Voicemail_de@internal:5] Playback("SIP/5005-0000018a", "/var/lib/asterisk/sounds/de/silence/1") in new stack
    -- <SIP/5005-0000018a> Playing '/var/lib/asterisk/sounds/de/silence/1.slin' (language 'de')
    -- Executing [Voicemail_de@internal:6] VoiceMailMain("SIP/5005-0000018a", "5005@VoiceMail") in new stack
    -- <SIP/5005-00000183> Playing 'vm-password.slin' (language 'de')
    -- <SIP/5005-00000183> Playing 'vm-youhave.slin' (language 'de')
    -- <SIP/5005-00000183> Playing 'digits/1.slin' (language 'de')
    -- <SIP/5005-00000183> Playing 'vm-INBOX.slin' (language 'de')
    -- <SIP/5005-00000183> Playing 'vm-and.slin' (language 'de')
    -- <SIP/5005-00000183> Playing 'digits/1.slin' (language 'de')
    -- <SIP/5005-00000183> Playing 'vm-Old.slin' (language 'de')
    -- <SIP/5005-00000183> Playing 'vm-message.gsm' (language 'de')
    -- <SIP/5005-00000183> Playing 'vm-onefor.gsm' (language 'de')
    -- <SIP/5005-00000183> Playing 'vm-INBOX.slin' (language 'de')

And the part in the dialplan

Set(exists=${STAT(e,${ASTDATADIR}/sounds/${LANGUAGE()}/vm-message.gsm)});
Playback(${IF($[ ${exists} = 1 ] ? vm-message : ${ASTDATADIR}/sounds/de/silence/1)});
VoicemailMain(${CALLERID(num)}@VoiceMail);

The output shows the call branching to the VoicemailMain() application. I am not sure how to modify that.

An alternate solution, simply create empty audio files under ../lib/asterisk/sounds/de/

Playback() will try the default language, if the file is not found. You do not have /var/lib/asterisk/sounds/de/vm-message, so it will use /var/lib/asterisk/sounds/en/vm-message. Just copy silence from EN to DE/vm-message

cd /var/lib/asterisk/sounds
cp en/silence.XYZ de/vm-message.XYZ

That’s the main problem and that’s why I ask how to override VoicemailMain().

Is it possible to not use VoicemailMain() at all but to play all voicemail messages for the user from database? I’ve tried to put them in Playback() but doesn’t seems to work.