Как настроить запись разговоров в Asterisk: Полное руководство
Узнайте, почему телефон показывает как занят при настройке MixMonitor в Asterisk и как правильно реализовать запись разговоров. Пошаговая инструкция с примерами кода и решением проблем.
Как реализовать запись телефонных разговоров в Asterisk?
Я добавил в extensions.conf следующую конфигурацию для записи разговоров:
exten => 2001,1,MixMonitor(/home/records/${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${CALLERID(num)}_${CALLERID(dnid)}.wav)
Папка /home/records существует, но при попытке вызова номер 2001 телефон всегда показывает как занят. В чем может быть проблема и как правильно настроить запись разговоров в Asterisk?
Запись телефонных разговоров в Asterisk с использованием MixMonitor требует правильной настройки диалплана. Проблема с отображением номера как “занят” обычно связана с неполной конфигурацией extensions.conf.
В вашей конфигурации отсутствуют ключевые элементы для обработки звонков. Вот правильная реализация:
exten => 2001,1,Answer()
same => n,MixMonitor(/home/records/${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${CALLERID(num)}_${CALLERID(dnid)}.wav)
same => n,Dial(SIP/ваш_номер_телефона,30)
same => n,Hangup()
Содержание
- Основные проблемы в вашей конфигурации
- Правильная настройка MixMonitor
- Полный пример диалплана
- Настройка прав доступа
- Типовые опции MixMonitor
- Устранение проблем с занятостью
- Дополнительные рекомендации
Основные проблемы в вашей конфигурации
В вашем текущем контексте диалплана отсутствуют несколько критически важных компонентов:
- Отсутствие Answer() - без этого приложение MixMonitor может не работать корректно
- Нет Dial() - вы только настраиваете запись, но не выполняет实际的呼叫
- Отсутствие Hangup() - вызов не завершается должным образом
- Нет обработки ошибок - при неудачном звонке система не знает, как реагировать
Как указано в документации Asterisk, MixMonitor должен применяться после Answer() и до Dial() для корректной работы.
Правильная настройка MixMonitor
Базовая структура для записи звонков должна выглядеть так:
exten => номер_расширения,1,Answer()
same => n,MixMonitor(путь/к/файлу.расширение)
same => n,Dial(SIP/номер_получателя,время_ожидания)
same => n,Hangup()
Параметры MixMonitor:
filename.extension- имя файла с расширением (wav, mp3, gsm и др.)[options]- опции записи[command]- команда после завершения записи
В вашем случае файл будет создаваться в /home/records/ с именем в формате времени, номера звонящего и номера вызываемого абонента.
Полный пример диалплана
Вот более полный пример с обработкой различных сценариев:
[default]
exten => 2001,1,NoOp(Начало записи звонка)
same => n,Answer()
same => n,Set(FILENAME=/home/records/${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${CALLERID(num)}_${EXTEN}.wav)
same => n,MixMonitor(${FILENAME})
same => n,Dial(SIP/1001,30,Ttr)
same => n,Hangup()
; Обработка неудачного звонка
exten => 2001,n,Busy()
same => n,Hangup()
; Запись входящих звонков
exten => _X.,1,NoOp(Входящий звонок)
same => n,Answer()
same => n,Set(INCOMING_FILE=/home/records/in_${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${CALLERID(num)}.wav)
same => n,MixMonitor(${INCOMING_FILE})
same => n,Dial(SIP/${EXTEN},30)
same => n,Hangup()
Как объясняет VoIP-Info.org, MixMonitor смешивает оба аудиопотока в реальном времени, что делает его более эффективным, чем старое приложение Monitor.
Настройка прав доступа
Частой причиной проблем с записью являются неправильные права доступа к папке. Как упоминается на StackOverflow, необходимо установить правильные права:
sudo mkdir -p /home/records
sudo chmod 755 /home/records
sudo chown asterisk:asterisk /home/records
Если проблема сохраняется, можно временно установить более широкие права для тестирования:
sudo chmod 777 /home/records
Типовые опции MixMonitor
MixMonitor поддерживает различные опции для гибкой настройки записи:
MixMonitor(файл.wav|av(0)V(1)|b(false))
Основные опции:
a- записывать только аудио канала вызывающего абонентаb- записывать только аудио канала вызываемого абонентаv(x)- регулировать громкость слышимого звука (диапазон -4 до 4)V(x)- регулировать громкость произносимого звукаB- воспроизводить периодический сигнал во время записи
Пример с опциями:
exten => 2001,1,Answer()
same => n,MixMonitor(/home/records/call.wav|av(1)V(1))
same => n,Dial(SIP/1001,30)
same => n,Hangup()
Устранение проблем с занятостью
Если телефон постоянно показывает как занятый, это может быть связано с несколькими причинами:
-
Неправильная обработка Dial() - как указано в документации Asterisk, Dial будет ждать ответа или таймаута
-
Отсутствие обработки ошибок - добавьте обработку busy/unavailable:
exten => 2001,1,Answer()
same => n,MixMonitor(файл.wav)
same => n,Dial(SIP/1001,30,Ttr)
same => n,GotoIf(${DIALSTATUS}=BUSY?busy)
same => n,GotoIf(${DIALSTATUS}=CHANUNAVAIL?unavail)
same => n,Hangup()
exten => 2001,n(busy),NoOp(Занято)
same => n,Playtones(busy)
same => n,Hangup()
exten => 2001,n(unavail),NoOp(Недоступно)
same => n,Playtones(congestion)
same => n,Hangup()
- Проблемы с Asterisk 20+ - согласно отчетам сообщества, в Asterisk 20.7 могут быть проблемы с MixMonitor
Дополнительные рекомендации
- Используйте UNIQUEID для уникальности файлов:
Set(FILENAME=/home/records/${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${UNIQUEID}.wav)
-
Проверяйте права доступа к файлам после звонков
-
Добавляйте системные команды для перемещения файлов:
Set(MONITOR_EXEC_ARGS=&& mv /var/spool/asterisk/monitor/${FILENAME} /home/records/)
- Тестируйте в CLI с помощью команд:
core set debug 5
- Используйте разные форматы файлов (wav, mp3) для экономии места
Как показывает практика Asterisk Guru, правильная настройка MixMonitor требует внимания к детаям диалплана и правам доступа к файловой системе.
Источники
- MixMonitor - Asterisk Documentation
- Call recordings in Asterisk using MixMonitor - Stack Overflow
- MixMonitor - VoIP-Info
- Asterisk Dial Application Documentation
- MixMonitor in dialplan may not work at version 20.7 - Asterisk Community
- Asterisk keeps going through dialplan after “Busy” is received - Asterisk Community
Заключение
Основные проблемы при настройке записи разговоров в Asterisk:
- Неполная конфигурация диалплана - всегда включайте Answer(), Dial() и Hangup()
- Неправильные права доступа - настройте права на папку с записями
- Отсутствие обработки ошибок - добавьте обработку busy/unavail состояний
- Проблемы с версиями Asterisk - проверьте совместимость MixMonitor с вашей версией
Для решения вашей конкретной проблемы добавьте в диалплан полноценную структуру с Answer() и Dial(), а также проверьте права доступа к /home/records.