Asterisk PBX: Присваивание имени файла аудиозаписи пришедшего из-вне звонка и переадресованного на какой-либо внутренний номер
Invite pending
Приветствую всех! Статья, скорее, для новичков в Asterisk, нежели для профи.
Установлен Asterisk 11.1.0
Появилась задача записи телефонных звонков. Но для удобства локализации той или иной аудиозаписи в будущем, было бы не плохо присваивать файлу записи имя в формате «дата_и_время_звонка_номер_звонящего_на_номер_ответившего».
С внутренними звонками делается легко:
С исходящими в мир, также, просто.
А вот с входящими звонками из-вне, такой вариант не сработает. Так как, MixMonitor выполняется раньше Dial и файлу будет присвоено имя, которое не изменится при трансфере звонка на другой внутренний номер. Таким образом, все записи таких звонков будут именоваться именем пира куда первоначально поступил звонок, внезависимости был ли этот звонок в дальнейшем переведен или нет. Что не удобно при «разборе полетов».
Один из вариантов решения следующий:
Как видно, данный макрос складывает записи во временную папку, присваивая ему уникальное имя и по окончании звонка перемещает и переименовывает файл в указанном начале статьи формате.
Надеюсь, статья сэкономит кому-нибудь время или, как минимум, натолкнёт на более правильное решение.
Установлен Asterisk 11.1.0
Появилась задача записи телефонных звонков. Но для удобства локализации той или иной аудиозаписи в будущем, было бы не плохо присваивать файлу записи имя в формате «дата_и_время_звонка_номер_звонящего_на_номер_ответившего».
С внутренними звонками делается легко:
[macro-INrecordsLOCAL]
exten => s,1,Set(fname=${ARG1}_inbound/${STRFTIME(${EPOCH},,%d_%m_%Y_%Hh_%Mmin_%Ssec)}_from_${CALLERID(number)})</code>
exten => s,n,MixMonitor(inbound_records/local_calls/${fname}.g729)
exten => s,n,Dial(${ARG1},20,tT)
exten => s,n,Hangup
С исходящими в мир, также, просто.
А вот с входящими звонками из-вне, такой вариант не сработает. Так как, MixMonitor выполняется раньше Dial и файлу будет присвоено имя, которое не изменится при трансфере звонка на другой внутренний номер. Таким образом, все записи таких звонков будут именоваться именем пира куда первоначально поступил звонок, внезависимости был ли этот звонок в дальнейшем переведен или нет. Что не удобно при «разборе полетов».
Один из вариантов решения следующий:
[macro-INrecordsFROMOUTSIDE]
exten => s,1,Ringing
exten => s,n,NoOp(${CALLERID(num)})
exten => s,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
exten => s,n,Set(fname=${CDR(uniqueid)}.g729)
exten => s,n,Set(recdir_temporary=/var/spool/asterisk/monitor/inbound_records/${STRFTIME(,,${MACRO_CONTEXT})})
exten => s,n,MixMonitor(${recdir_temporary}/${fname})
exten => s,n,Set(fix_clid=${CALLERID(num)})
exten => s,n,Dial(${ARG1},15,tT)
exten => h,1,System(mkdir -p ${recdir_temporary}/${DIALEDPEERNUMBER})
exten => h,n,Set(recdir_final=${recdir_temporary}/${DIALEDPEERNUMBER})
exten => h,n,Set(fname2=${recdir_final}/${STRFTIME(${EPOCH},,%d_%m_%Y_%Hh_%Mmin_%Ssec)}_from_${fix_clid}_to_${DIALEDPEERNUMBER}.g729)
exten => h,n,System(mv ${recdir_temporary}/${fname} ${fname2})
exten => h,n,Hangup()
Как видно, данный макрос складывает записи во временную папку, присваивая ему уникальное имя и по окончании звонка перемещает и переименовывает файл в указанном начале статьи формате.
Надеюсь, статья сэкономит кому-нибудь время или, как минимум, натолкнёт на более правильное решение.