Появилась такая проблема. Нужно чтобы клиенту после того, как оператор положит трубку, выдавалось голосовое меню с возможностью оставить сообщение о качестве сервиса. Астериск 1.4.26, FreePBX2.6. Переписал макрос hangupcall
Код: Выделить всё
[macro-hangupcall]
exten => s,1(start),GotoIf($["${USE_CONFIRMATION}"="" | "${RINGGROUP_INDEX}"="" | "${CHANNEL}"!="${UNIQCHAN}"]?skiprg)
exten => s,n,Noop(Cleaning Up Confirmation Flag: RG/${RINGGROUP_INDEX}/${CHANNEL})
exten => s,n(delrgi),dbDel(RG/${RINGGROUP_INDEX}/${CHANNEL})
exten => s,n(skiprg),GotoIf($["${BLKVM_BASE}"="" | "BLKVM/${BLKVM_BASE}/${CHANNEL}"!="${BLKVM_OVERRIDE}"]?skipblkvm)
exten => s,n,Noop(Cleaning Up Block VM Flag: ${BLKVM_OVERRIDE})
exten => s,n(delblkvm),dbDel(${BLKVM_OVERRIDE})
exten => s,n(skipblkvm),GotoIf($["${FMGRP}"="" | "${FMUNIQUE}"="" | "${CHANNEL}"!="${FMUNIQUE}"]?theend)
exten => s,n(delfmrgp),dbDel(FM/DND/${FMGRP}/${CHANNEL})
exten => s,n(theend),NoOp(${CALLERID(num)})
exten => s,n,GotoIf($[${LEN(${CALLERID(num)})}>4]?later:hang)
exten => s,n(hang),Hangup
exten => s,n(later),Background(custom/speech_2s)
exten => s,n,WaitExten()
exten => 1,1,Answer()
exten => 1,n,Set(record_name="${STRFTIME(${EPOCH},,%Y.%m.%d-%H.%M)}-${CALLERID(num)}.wav")
exten => 1,n,NoOp(${record_name})
exten => 1,n,Record(/var/spool/asterisk/record/${record_name},5,60)
exten => 1,n,System(chmod 777 /var/spool/asterisk/record/${record_name})
exten => 1,n,Hangup
exten => i,1,Hangup
exten => t,1,Hangup
show hints показывает
107@ext-local : SIP/107&Custom:DND107 State:InUse
При этом статус ДНД у этого юзера в базе * не стоит.
Погуглив решил, что в этом вопросе мне поможет функция Devstate. В текущей версии * ее не было, решил вместо патча обновиться до 1.4.33. Добавил строки
Код: Выделить всё
exten => s,n,Set(DEVICE_STATE(SIP/107&Custom:DND107)=NOT_INUSE)
exten => s,n,NoOp(${DEVICE_STATE(SIP/107&Custom:DND107)})
Где-то видел такую же проблему, и там вроде приводилось решение, но что-то никак не могу найти. Подскажите куда копать.