@Cipceroid

Как организовать запись входящих/исходящих звонков определенных абонентов?

Добрый день. Имеется необходимость записывать входящие/исходящие звонки определенных абонентов. Все усложняется тем, что маски номеров разнятся и много номеров внутри компании находятся на других АТС. Имеется следующий диалплан:
;============================ОБЩИЙ ПЛАН НАБОРА ДЛЯ 10ХХ НОМЕРОВ
exten = _10XX,1,Noop(${CallStart} ${EXTEN} / Звонок внутри АТС)
same = n,GotoIf($["${DEVICE_STATE(PJSIP/${EXTEN})}" = "UNAVAILABLE"]?unavailable)
same = n,GotoIf($["${DEVICE_STATE(PJSIP/${EXTEN})}" = "INUSE"]?busy)
same = n,GotoIf($["${DEVICE_STATE(PJSIP/${EXTEN})}" = "BUSY"]?busy)
same = n,Set(REDIRTIME=${DB(TIME/${EXTEN})})
same = n,Set(REDIRECTNUM=${DB(REDIRECT/${EXTEN})})
same = n,GotoIf($[${ISNULL(${REDIRECTNUM})}]?internal:redirect)

same = n(redirect),Dial(${PJSIP_DIAL_CONTACTS(${EXTEN})},${REDIRTIME})
same = n,Set(CALLERID(num)=гор.номер)
same = n,Playback(${Call_forward})
same = n,Dial(PJSIP/${REDIRECTNUM}@город,${CallTime})
same = n,Playback(${ru-nobodyavail})
same = n,Hangup()

same = n(internal),Dial(${PJSIP_DIAL_CONTACTS(${EXTEN})},${CallTime})
same = n,Playback(${ru-nobodyavail})
same = n,Hangup()

same = n(busy),Dial(${PJSIP_DIAL_CONTACTS(${EXTEN})},${CallTime},m(busy))
same = n,Playback(${ru-nobodyavail})
same = n,Hangup()

same = n(unavailable),Playback(${ru-nobodyavail})
same = n,Hangup()

;============================ОБЩИЙ ПЛАН НАБОРА ДЛЯ 76ХХ НОМЕРОВ
exten = _76XX,1,Noop(${CallStart} ${EXTEN} / Звонок внутри АТС)
same = n,GotoIf($["${DEVICE_STATE(PJSIP/${EXTEN})}" = "UNAVAILABLE"]?unavailable)
same = n,GotoIf($["${DEVICE_STATE(PJSIP/${EXTEN})}" = "INUSE"]?busy)
same = n,GotoIf($["${DEVICE_STATE(PJSIP/${EXTEN})}" = "BUSY"]?busy)
same = n,Set(REDIRTIME=${DB(TIME/${EXTEN})})
same = n,Set(REDIRECTNUM=${DB(REDIRECT/${EXTEN})})
same = n,GotoIf($[${ISNULL(${REDIRECTNUM})}]?internal:redirect)

same = n(redirect),Dial(${PJSIP_DIAL_CONTACTS(${EXTEN})},${REDIRTIME})
same = n,Set(CALLERID(num)=гор.номер)
same = n,Playback(${Call_forward})
same = n,Dial(PJSIP/${REDIRECTNUM}@город,${CallTime})
same = n,Playback(${ru-nobodyavail})
same = n,Hangup()

same = n(internal),Dial(${PJSIP_DIAL_CONTACTS(${EXTEN})},${CallTime})
same = n,Playback(${ru-nobodyavail})
same = n,Hangup()

same = n(busy),Dial(${PJSIP_DIAL_CONTACTS(${EXTEN})},${CallTime},m(busy))
same = n,Playback(${ru-nobodyavail})
same = n,Hangup()

same = n(unavailable),Playback(${ru-nobodyavail})
same = n,Hangup()

Не получается внедрить MixMonitor, перед которым сначала будет проверка на наличие в звонке определенного номера, не зависимо это входящий или исходящий. Заранее выражаю большую благодарность за любой совет и помощь =)
  • Вопрос задан
  • 157 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В чём конкретно проблема?
Можно, например, сделать через внутреннюю базу, проверяя через DB_EXISTS(), что существует ключ record/${EXTEN} или record/${CALLERID(num)}.
Ответ написан
@dronmaxman
VoIP Administrator
Мой пример.

[internal]
 same => _XXX.,Dial(SIP/${EXTEN},60,WwtTrU(sub-mixmonitor,${CALLERID(num)},${EXTEN},${UNIQUEID}))
 same => n,HangUp() 

[sub-mixmonitor]
exten => s,1,Noop(------------MixMonitor---------------)
; same => n,DumpChan()
; same => n,NoCDR()
 same => n,Noop(DIALEDPEERNUMBER ${DIALEDPEERNUMBER} )
 same => n,Set(FILE_UNIQUEID=${ARG3})
 same => n,Noop(UNIQUEID = ${FILE_UNIQUEID})
 same => n,GotoIf($[${DB_EXISTS(RECORD/${ARG1})}]?go-record)
 same => n,GotoIf($[${DB_EXISTS(RECORD/${ARG2})}]?go-record)
 same => n,Goto(end_sub)
 same => n(go-record),Set(WAV=/var/spool/asterisk/monitor/${FILE_UNIQUEID})
 same => n,Set(filedate=${STRFTIME(${EPOCH},,%Y%m%d_%H-%M-%S)})
 same => n,Set(foldername=${STRFTIME(${EPOCH},,%Y/%m)})
 same => n,Set(filename=${filedate}_${ARG1:-10}_${ARG2:-10}_${FILE_UNIQUEID})
 same => n,Set(MP3=/var/spool/asterisk/monitor/mp3/${foldername}/${filename})
 same => n,System(mkdir -p /var/spool/asterisk/monitor/mp3/${foldername})
 same => n,Set(monopt=nice -n 19 /usr/bin/lame -b 32  --silent "${WAV}.wav"  "${MP3}.mp3" && rm -rf "${WAV}.wav" && chmod o+r "${MP3}.mp3")
 same => n,Noop(${CDR(record)})
 same => n,Noop(CHANNEL ${CHANNEL(exten)})
 same => n,Set(CDR(realdst)=${ARG2});
 same => n,Set(CDR(record)=${FILE_UNIQUEID})
 same => n,Set(CDR(recordingfile)=${filename}.mp3)
 same => n,MixMonitor(${WAV}.wav,b,${monopt})
 same => n(end_sub),return
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы