Pull to refresh

Asterisk PBX: Присваивание имени файла аудиозаписи пришедшего из-вне звонка и переадресованного на какой-либо внутренний номер

Приветствую всех! Статья, скорее, для новичков в Asterisk, нежели для профи.
Установлен 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()


Как видно, данный макрос складывает записи во временную папку, присваивая ему уникальное имя и по окончании звонка перемещает и переименовывает файл в указанном начале статьи формате.
Надеюсь, статья сэкономит кому-нибудь время или, как минимум, натолкнёт на более правильное решение.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.