Asterisk/FreePBX Voicemail and + (plus sign) in number

I have a problem with my voice mailbox.
If someone signs up with a number with a plus prefix (e.g. +49xxxxxxxxxxx) , I can’t read such a message or move on.
There is some sound file missing, but I am not able from the logs, to recognize what the file should be called.

If there is no plus before the number (e.g. 49xxxxxxxxxxxxx), then everything works fine
I was able to determine this when I manually edited the numbers in the mailbox in the .txt files for each message

Does anyone perhaps know what this file should be called and in what directory it should be located? More interestingly, I switched natively to English and this problem also occurs.

Logs:

– Executing [*97@from-internal:118] VoiceMailMain(“SIP/200-00000109”, “200@default”) in new stack

-- <SIP/200-00000109> Playing 'vm-youhave.ulaw' (language 'en')
-- <SIP/200-00000109> Playing 'digits/9.ulaw' (language 'en')
-- <SIP/200-00000109> Playing 'vm-INBOX.ulaw' (language 'en')
-- <SIP/200-00000109> Playing 'vm-and.ulaw' (language 'en')
-- <SIP/200-00000109> Playing 'digits/1.ulaw' (language 'en')
-- <SIP/200-00000109> Playing 'vm-Old.ulaw' (language 'en')
-- <SIP/200-00000109> Playing 'vm-message.ulaw' (language 'en')
-- <SIP/200-00000109> Playing 'vm-first.ulaw' (language 'en')
-- <SIP/200-00000109> Playing 'vm-message.ulaw' (language 'en')
-- <SIP/200-00000109> Playing 'vm-received.ulaw' (language 'en')
-- <SIP/200-00000109> Playing 'digits/day-5.ulaw' (language 'en')
-- <SIP/200-00000109> Playing 'digits/at.ulaw' (language 'en')
-- <SIP/200-00000109> Playing 'digits/11.ulaw' (language 'en')
-- <SIP/200-00000109> Playing 'digits/oh.ulaw' (language 'en')
-- <SIP/200-00000109> Playing 'digits/3.ulaw' (language 'en')
-- <SIP/200-00000109> Playing 'digits/a-m.ulaw' (language 'en')

– <SIP/200-00000109> Playing ‘vm-from-phonenumber.ulaw’ (language ‘en’)
[2022-10-05 07:01:24] WARNING[31735][C-0000030b]: file.c:824 ast_openstream_full: File does not exist in any format
[2022-10-05 07:01:24] WARNING[31735][C-0000030b]: file.c:1303 ast_streamfile: Unable to open (format ( ulaw)): No such file or directory
== Spawn extension (from-internal, *97, 118) exited non-zero on ‘SIP/200-00000109’
– Executing [h@from-internal:1] Macro(“SIP/200-00000109”, “hangupcall”) in new stack

Known, but unresolved, bug: [ASTERISK-30248] ast_get_digit_str adds bogus initial delimiter if first character not to be spoken - Digium/Asterisk JIRA

There is a code review up for it, it hasn’t yet been merged, so it will be fixed in the future.

I have just come across this issue. Numbers that begin with “+” crash VoiceMailMain with

file.c:1303 ast_streamfile: Unable to open (format (ulaw)): No such file or directory

suggesting it’s trying to open a file with no name. I tried the following simple exten:

exten => 29,1,NoOp(29 TEST)
same => n,Playback(welcome)
same => n,SayDigits(123-+)

and it crashes on the “+”.

<Local/29@locals-00000004;2> Playing ‘welcome.g729’ (language ‘en’)
– Executing [29@locals:3] SayDigits(“Local/29@locals-00000004;2”, “123-+”) in new stack
– <Local/29@locals-00000004;2> Playing ‘digits/1.g729’ (language ‘en’)
– <Local/29@locals-00000004;2> Playing ‘digits/2.g729’ (language ‘en’)
– <Local/29@locals-00000004;2> Playing ‘digits/3.g729’ (language ‘en’)
– <Local/29@locals-00000004;2> Playing ‘digits/minus.g729’ (language ‘en’)
– Executing [29@locals:4] Hangup(“Local/29@locals-00000004;2”, “”) in new stack
== Spawn extension (locals, 29, 4) exited non-zero on ‘Local/29@locals-00000004;2’

This has worked for years - if I recall correctly there used to be a sound file digits/plus.*, but no more, although there is a digits/minus.*. I hope this gets fixed soon since it’s impossible to hear voicemails from numbers beginning with “+”.

Regards,
Ian

If it’s just a missing soundfile, it might be possible to take another, eg. silence/1 and copy that over to the plus file. That would give 1 sec of silence, then move on.

That’s a different problem from an initial +.

I didn’t raise the issue of + not being spoken, as that seemed to represent a feature request. However, if there has been a regression, and it used to get spoken in earlier versions, it would be acceptable to raise it as a bug.

However, it doesn’t appear to be a regression. Asterisk 15.7 cannot say “+” (nor can 1.6.0; 16 has the code that caused the current breakage).

It’s not a missing sound file. The code does a case statement that only covers * # - and 0 through 9. Anything else doesn’t get spoken.

Say phonetic has a much richer repertoire and should speak letters/plus.

IT WORKS:
copy

/var/lib/asterisk/sounds/LANGUAGE/letters/plus. [wav,ulaw etc]

as:

/var/lib/asterisk/sounds/LANGUAGE/.wav .ulaw etc

(as filename “.wav” only)

Thank You!

1 Like

That’s only going to work for an initial +, and it is a hack. Once the code is fixed, I’d expect the + to be ignored. I don’t think it was what was actually being suggested.

It will also result in any other character not in [-*#0-9] being spoken as “plus”. The reason it works is that, although the test for a null file name or a filename without a corresponding file, will ignore any character outside the above set, on the null file name test, the bug means that an initial null file name will go through to the list of files to speak, and it looks like the file with a null base name will then be found.

Once the current bug is fixed, no initial & will be generated and no attempt will be made to speak a file will a null base name.

I can confirm that copying sounds/en/letters/plus.ulaw to sounds/en/.ulaw fixes the problem with VoiceMailMain. Obviously, this is not a long term solution, VoiceMailMain should be able to read numbers beginning with “+” as they are quite common.

Regards

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.