I’m trying to customize Vietnamese prompts in Asterisk / FreePBX.
From what I see, sound files are used across multiple components (IVR, voicemail, system prompts…), so I’m a bit worried about breaking things if I change them.
A few quick questions:
Is it safe to modify /var/lib/asterisk/sounds/ directly, or should I create a custom path?
Any best practices for managing/customizing prompts (naming, structure, versioning)?
Anyone here done a full Vietnamese voice setup? Any gotchas?
I’m looking for a simple and maintainable approach.
Vietnamese versions should go in /var/lib/asterisk/sounds/vi/
You may need to modify /etc/asterisk/say.conf, for grammar rules. FreePBX doesn’t seem to overwrite the Asterisk version, but it might have checksummed it, so you might get tamper warnings.
Ideally you should do a complete set of sound files, and submit them to the Asterisk (not FreePBX) project.
One angle that hasn’t been mentioned yet is to treat your Vietnamese prompts as a separate “sound pack” layer, not just a folder of overrides.
Instead of modifying anything in-place, define a consistent override strategy:
Keep all custom audio in /var/lib/asterisk/sounds/vi/custom/
Never touch core files, even inside /vi/
When you need to override a prompt, reference it explicitly in dialplan or FreePBX GUI (e.g. custom IVR prompts), rather than relying on filename collisions
Why this matters: FreePBX modules and Asterisk updates can reintroduce or expect specific filenames. If you override by replacing, you lose track of what’s stock vs custom very quickly.
For maintainability, a simple structure that works well in practice:
vi/system/ → translated core prompts (only if you really must)
vi/custom/ivr/ → IVR-specific prompts
vi/custom/vm/ → voicemail greetings/instructions
vi/custom/misc/ → anything one-off
Then version that whole vi/ tree in git (even locally). It sounds overkill, but the first time you tweak phrasing or audio levels, you’ll want rollback.
A couple of gotchas people usually hit with Vietnamese specifically:
Number pronunciation + tones don’t always map cleanly with say.conf, especially for things like dates, currency, or extensions. Test anything dynamically generated (voicemail timestamps, queue positions).
Make sure you standardize audio format early (e.g. slin16 or wav 16kHz) to avoid transcoding overhead and inconsistent playback quality.
Some FreePBX modules hardcode prompt expectations, so even with /vi/, you may still need to manually assign prompts in the GUI instead of relying on auto-selection.
If your goal is “simple and maintainable,” the key rule is: don’t override implicitly, always override explicitly.