
Estou tentando transferir a chamada para o próximo ramal se o anterior estiver usando (INUSE) ou se a chamada estiver em andamento. Tentei usar EXTENSION_STATE(extension[@context])
para encontrar o status da seguinte forma:
[sales]
exten => s,1,Dial(SIP/123)
exten => s,n,GotoIf($["${EXTENSION_STATE(123)}"="INUSE"]?passed:failed)
exten => s,n(passed),Dial(SIP/124)
exten => s,n(failed),Hangup();if other
Mas não teve sucesso. Como eu posso fazer isso?
Responder1
Sua solução é muito compilada, é basicamente um dos motivos pelos quais não está funcionando. Você deveria tentar isso, esta é uma abordagem comum mais simples usando internal variable ${DIALSTATUS}
. Desde quando atendida - a chamada será simplesmente desligada, você só precisa lidar com todos os status de erro:
[sales] exten => s,1,Dial(SIP/123) exten => s,2,Goto(${EXTEN}-${DIALSTATUS},1) exten => s-BUSY,1,Dial(SIP/other) exten => s-CONGESTION,1,Dial(SIP/someone)
Responder2
Este funcionou para mim usando GROUP_COUNT() em vez de EXTENSION_STATE:
exten => s,1,Set(GROUP()=OUTBOUND_GROUP)
exten => s,2,GotoIf($[ ${GROUP_COUNT()} > 1 ]?try1:try2)
exten => s,3(try1),Dial(SIP/124)
exten => s,4(try2),Dial(SIP/123)