Другое

Как настроить запись разговоров в 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()

Содержание

Основные проблемы в вашей конфигурации

В вашем текущем контексте диалплана отсутствуют несколько критически важных компонентов:

  1. Отсутствие Answer() - без этого приложение MixMonitor может не работать корректно
  2. Нет Dial() - вы только настраиваете запись, но не выполняет实际的呼叫
  3. Отсутствие Hangup() - вызов не завершается должным образом
  4. Нет обработки ошибок - при неудачном звонке система не знает, как реагировать

Как указано в документации 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, необходимо установить правильные права:

bash
sudo mkdir -p /home/records
sudo chmod 755 /home/records
sudo chown asterisk:asterisk /home/records

Если проблема сохраняется, можно временно установить более широкие права для тестирования:

bash
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()

Устранение проблем с занятостью

Если телефон постоянно показывает как занятый, это может быть связано с несколькими причинами:

  1. Неправильная обработка Dial() - как указано в документации Asterisk, Dial будет ждать ответа или таймаута

  2. Отсутствие обработки ошибок - добавьте обработку 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()
  1. Проблемы с Asterisk 20+ - согласно отчетам сообщества, в Asterisk 20.7 могут быть проблемы с MixMonitor

Дополнительные рекомендации

  1. Используйте UNIQUEID для уникальности файлов:
Set(FILENAME=/home/records/${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${UNIQUEID}.wav)
  1. Проверяйте права доступа к файлам после звонков

  2. Добавляйте системные команды для перемещения файлов:

Set(MONITOR_EXEC_ARGS=&& mv /var/spool/asterisk/monitor/${FILENAME} /home/records/)
  1. Тестируйте в CLI с помощью команд:
core set debug 5
  1. Используйте разные форматы файлов (wav, mp3) для экономии места

Как показывает практика Asterisk Guru, правильная настройка MixMonitor требует внимания к детаям диалплана и правам доступа к файловой системе.

Источники

  1. MixMonitor - Asterisk Documentation
  2. Call recordings in Asterisk using MixMonitor - Stack Overflow
  3. MixMonitor - VoIP-Info
  4. Asterisk Dial Application Documentation
  5. MixMonitor in dialplan may not work at version 20.7 - Asterisk Community
  6. Asterisk keeps going through dialplan after “Busy” is received - Asterisk Community

Заключение

Основные проблемы при настройке записи разговоров в Asterisk:

  1. Неполная конфигурация диалплана - всегда включайте Answer(), Dial() и Hangup()
  2. Неправильные права доступа - настройте права на папку с записями
  3. Отсутствие обработки ошибок - добавьте обработку busy/unavail состояний
  4. Проблемы с версиями Asterisk - проверьте совместимость MixMonitor с вашей версией

Для решения вашей конкретной проблемы добавьте в диалплан полноценную структуру с Answer() и Dial(), а также проверьте права доступа к /home/records.

Авторы
Проверено модерацией
Модерация