Asterisk: res_musiconhold.c Music on Hold class not found fallback to default
- Предупреждение в логах:
WARNING: res_musiconhold.c: Music on Hold class 'custom_queue_music' not found, falling back to default. - Абоненты в очереди или на удержании (Hold) слышат стандартную музыку вместо корпоративного приветствия или тишину.
- Ошибка формата кодеков при попытке воспроизведения неподдерживаемых файлов MP3/WAV.
1. Проверка классов музыки на удержании в CLI
asterisk -rx "moh show classes"
asterisk -rx "moh show files"2. Корректная настройка /etc/asterisk/musiconhold.conf
Создайте и настройте нужные классы удержания:
[general]
[default]
mode = files
directory = /var/lib/asterisk/moh
sort = random
[custom_queue_music]
mode = files
directory = /var/lib/asterisk/moh/custom_queue
sort = alpha
announcement = none3. Правильная конвертация аудиофайлов под формат телефонии
Asterisk работает максимально производительно с нативными несжатыми аудиофайлами (WAV PCM 8000 Hz / 16000 Hz 16-bit Mono):
# Установка ffmpeg / sox
apt-get install -y sox libsox-fmt-all || dnf install -y sox
# Конвертация исходного трека в идеальный формат телефонии (slin / wav)
mkdir -p /var/lib/asterisk/moh/custom_queue
sox input_track.mp3 -r 8000 -c 1 -e signed-integer -b 16 /var/lib/asterisk/moh/custom_queue/track1.wav
sox input_track.mp3 -r 16000 -c 1 -e signed-integer -b 16 /var/lib/asterisk/moh/custom_queue/track1.wav164. Назначение прав и перезагрузка модуля MOH
chown -R asterisk:asterisk /var/lib/asterisk/moh
chmod -R 755 /var/lib/asterisk/moh
asterisk -rx "moh reload"5. Использование класса в диалплане
exten => 500,1,Answer()
same => n,Set(CHANNEL(musicclass)=custom_queue_music)
same => n,Queue(sales_queue,t,,,300) Частые вопросы (FAQ)
Почему Asterisk не воспроизводит MP3 файлы в MOH?
Для прямого воспроизведения MP3 требуется модуль format_mp3 или внешний плеер (mpg123). Рекомендуется заранее конвертировать треки в формат WAV PCM (8kHz/16kHz Mono) через SoX для экономии CPU на транскодировании.
Как привязать определенную музыку на удержании к конкретному SIP-транку?
В pjsip.conf в секции endpoint добавьте параметр: moh_suggest = custom_queue_music.
Что произойдет, если класс default также не найден или пуст?
Абонент на удержании будет слышать полную тишину, а в логах Asterisk появится ошибка unable to open MOH file.
Как воспроизводить поток интернет-радио в качестве Music on Hold?
В musiconhold.conf настройте класс с mode=custom и application=/usr/bin/mpg123 -q -r 8000 -f 8192 -s --mono -@ http://stream.radio.url.