Запись разговоров на Asterisk
Записывать телефонные разговоры очень удобно как и в офисе для устранения разных непоняток с клиентами так и дома.
Вот два самых простых способа чтобы настроить её:
1) Запись разговоров на Asterisk с простым управлением через CLI
Краткое описание решения
Каждый выходящий и исходящий звонок направляется в контекст активации записи разговора, в котором на уровне специального диалплана реализован поиск правил. Для хранения правил записи используется внутренняя база данных Asterisk. Данный подход позовляет:
- использовать встроенные функции DB для поиска значений;
- использовать консоль Asterisk и команду database для модификации правил.
В базе существуют две ветки:
- rec_a - в данной ветке содержатся номера абонента А (callerid), для которых нужно включать запись;
- rec_b - соответственно, в этой ветке правила номера абоента Б (dnid).
Пример:
*CLI> database put rec_a 701 1
Updated database successfully
*CLI> database put rec_b 2323956 1
Updated database successfully
*CLI> database show
/rec_a/701 : 1
/rec_b/2323956 : 1
*CLI>
В вышеприведённом примере было создано два правила. Одно будет писать все звонки от внутреннего пользователя с номером 701, другое будет писать все звонки на номер 2323956. Как можно заметить, используется флаг активности правила - 0 или 1. Это позволяет временно отключать запись без удаления номера из базы.
Формат записи
Записанные файлы пишутся в папку /var/spool/asterisk/monitor в следующем формате:
- data/yyyy/mm/dd/hh_MM_ss_a_b_callid, где:
- yyyy - год записи;
- mm - месяц записи;
- dd - день записи;
- hh - час начала разговора;
- MM - минута начала разговора;
- ss - секунда начала разговора;
- a - номер обонента a или unknown, если callerid скрыт;
- b - номер абонента b;
- callid - ID звонка.
Таким образом, название файла несет в себе всю необходимую информацию для поиска нужной записи впоследствии.
При использовании приложений, ведущих собственную сквозную запись разговора можно остановить запись. При осуществлении перевода вызова так же требуется остановить запись разговора в TRANSFER_CONTEXT и начать запись снова.
Диалплан Asterisk
Ниже представлен фрагмент диалплана Asterisk, реализующий описанную выше логику.
extensions.conf:
[global]
[outgoing]
exten => _X.,1,Gosub(sub-recording,${EXTEN},1}
exten => _X.,n,Dial(ZAP/g1/${EXTEN},,t)
[office]
exten => _X.,1,Gosub(sub-recording,${EXTEN},1}
exten => _X.,n,Dial(SIP/${EXTEN},,T)
[sub-recording]
exten => s,1,StopMixMonitor()
exten => _X.,1,Set(CALLER=unknown)
exten => _X.,n,GoToIf($[0${CALLERID(num)} = 0]?db)
exten => _X.,n,Set(CALLER=${CALLERID(num)})
exten => _X.,n(db),GotoIf($[0${DB(rec_a/${CALLERID(num)})} = 01]?record:stop)
exten => _X.,n,GotoIf($[0${DB(rec_b/${EXTEN})} = 01]?record:stop)
exten => _X.,n(record),MixMonitor(data/${STRFTIME(,,%G/%m/%H_%M_%S)}_${CALLER}_${CALLED}.gsm)
exten => _X.,n(stop),Return
Недостатки:
1. Время в названии файла - время поступления вызова, но не начала разговора. Для указания времени начала раговра требуется создание симлинка или переименование после окончания разговора
2) Запись разговоров на Asterisk через MixMonitor
Записывать телефонные разговоры очень удобно как и в офисе для устранения разных непоняток с клиентами так и дома. И реализация на астериске очень простая, нужно просто включить в dialplaне обработку направлений функцией Monitor или же MixMonitor. Эти функции различаются тем, что Monitor записывает голоса звонящего и того к кому звонят в два отдельных файла, а MixMonitor пишет оба голоса в один файл. Естественно просто Monitor использовать не практично, по этому опишу как пользоваться MixMonitor.
Использование MixMonitor:
MixMonitor(имя файла,опции,команда)
Производит запись разговора в заданный файл, вместо имя файла можно задать полный путь и имя с расширением .wav, если же мы указали просто имя файла, asterisk создаст запись которая соответствует прописанному пути для папки с разговорами в конфиге asterisk.conf
Важные опции:
a — новая запись дописывается в конец файла ( для избежания перезаписи файла).
b — сохраняется запись только в случае соединения канала.
W(X) — изменение громкости речи и прослушивания меняется в X раз (диапазон от –4
до 4)
; Записываем разговор по каналу
exten => 3333,1,MixMonitor(/var/records/3333.wav)
Для удобства файлы можно называть датой, временем, и телефонным номером звонящего и того к кому звонили.
exten => 3333,1,Set(filename=${STRFTIME(${EPOCH},,%Y%m%d%H%M)}-${CALLERID(number)}-${EXTEN})
exten => 3333,2,MixMonitor(/var/records/${filename}.wav)