Asterisk Transferir llamada a la siguiente extensión si anterior INUSE

Asterisk Transferir llamada a la siguiente extensión si anterior INUSE

Estoy intentando transferir la llamada a la siguiente extensión si la anterior está en uso (INUSE) o si la llamada está en curso. Intenté usar EXTENSION_STATE(extension[@context])para encontrar el estado de la siguiente manera:

[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

Pero no tuvo éxito. ¿Cómo puedo hacer eso?

Respuesta1

Su solución es muy complicada, es básicamente una de las razones por las que no funciona. Deberías probar esto, este es un enfoque común más simple que utiliza variables internas ${DIALSTATUS}. Dado que cuando se responda, la llamada simplemente se colgará, solo necesita manejar todos los estados erróneos:

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

Respuesta2

Este funcionó para mí usando GROUP_COUNT() en lugar 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)

información relacionada