Asterisk: музыка вместо гудков (Music on Hold) и конвертация файлов
Симптомы некорректной настройки музыки ожидания:
- При переводе звонка на удержание (Hold) или в очереди в трубке наступает полная тишина.
- Музыка воспроизводится с сильным скрежетом, шумом, ускоренно или замедленно («голоса роботов»).
- В логах сервера Asterisk CLI сыпятся ошибки:
Unable to open format file /var/lib/asterisk/moh/track1.mp3. - Сервер Asterisk грузит процессор на 100% при попытке декодировать MP3 в реальном времени.
Шаг 1. Главное правило: Требования к аудиоформату в телефонии
Ядро Asterisk НЕ ДОЛЖНО декодировать MP3 файлы на лету, так как это перегружает CPU. Все аудиофайлы для телефонии должны быть заранее сконвертированы в строгий стандарт:
- Формат: WAV (PCM Linear)
- Частота дискретизации: 8000 Гц (8 кГц)
- Разрядность: 16 бит
- Количество каналов: Моно (Mono, 1 канал)
Шаг 2. Быстрая конвертация через утилиту FFmpeg в Linux
Установите FFmpeg и выполните команду пакетной конвертации вашего MP3 трека:
apt-get install -y ffmpeg || dnf install -y ffmpeg
# Конвертация в правильный WAV:
ffmpeg -i input_music.mp3 -acodec pcm_s16le -ac 1 -ar 8000 /var/lib/asterisk/moh/my_moh.wavШаг 3. Настройка файла musiconhold.conf
Откройте конфигурационный файл музыки ожидания:
nano /etc/asterisk/musiconhold.confОпишите стандартный класс воспроизведения [default]:
[default]
mode=files
directory=/var/lib/asterisk/moh
sort=alphaШаг 4. Назначение прав и применение настроек
chown -R asterisk:asterisk /var/lib/asterisk/moh
chmod 644 /var/lib/asterisk/moh/*.wav
# Перезагрузка модуля в Asterisk:
asterisk -rx "moh reload" Частые вопросы (FAQ)
Почему нельзя использовать стерео-файлы с частотой 44100 Гц?
Телефонные каналы связи (G.711 / VoIP) работают на частоте 8000 Гц в режиме Моно. При попытке воспроизвести файл 44.1 кГц стерео звук начнет заикаться или превратится в громкий белый шум.
Как включить случайный порядок воспроизведения треков (Shuffle)?
В файле musiconhold.conf в нужной секции замените директиву sort=alpha на sort=random.
Как проверить список зарегистрированных классов музыки в консоли?
Выполните команду в консоли: asterisk -rx 'moh show classes' — вы увидите список папок и количество обнаруженных файлов.
Как включить собственную мелодию только для определенной очереди операторов?
В файле queues.conf в настройках конкретной очереди укажите параметр musicclass=название_класса (например, musicclass=vip_support).