Страница 1 из 1

Голосовое меню после Hangup

Добавлено: 30 сен 2010, 18:59
zlat
Добрый вечер!
Появилась такая проблема. Нужно чтобы клиенту после того, как оператор положит трубку, выдавалось голосовое меню с возможностью оставить сообщение о качестве сервиса. Астериск 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)})
но в итоге NoOp все равно выводит статус устройства INUSE.
Где-то видел такую же проблему, и там вроде приводилось решение, но что-то никак не могу найти. Подскажите куда копать.

Re: Голосовое меню после Hangup

Добавлено: 30 сен 2010, 19:14
ded
IMHO надо выводить на ИВР не через Hangup, а через blind трансфер на локальный канал по завершении разговора с оператором. Тогда плечо оператора отобъётся, и он свободен для приёма звонков, а клиент играется в канале Local сколько хочет.

Re: Голосовое меню после Hangup

Добавлено: 30 сен 2010, 20:41
zlat
спасибо, ded. попробовал применить transfer на локальных абонентах - все работает, номер освобождается