Как стать автором
Поиск
Написать публикацию
Обновить

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


Как видно, данный макрос складывает записи во временную папку, присваивая ему уникальное имя и по окончании звонка перемещает и переименовывает файл в указанном начале статьи формате.
Надеюсь, статья сэкономит кому-нибудь время или, как минимум, натолкнёт на более правильное решение.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.