Esta é mais uma questão muito comum nos treinamentos de Asterisk, “Como fazer para retornar se é SIP ou IAX2?”.

Bem utilizando a função CUT fica muito fácil, vamos ver como:

A função CUT retorna para uma variável o valor encontrado, seguindo a seguinte regra:

CUT(<variável>,<terminador>,<posição>)

Onde:

variavel = Qualquer váriável como por exemplo a ${CHANNEL} que retorna o dispositivo solicitado;

terminador = Aqui utilizamos o delimitador utilizado no retorno da variável, por padrão é utilizado ‘-‘, mas iremos utilizar o ‘/’, pois este é o delimitador entre o Protocolo e o Dispositivo;

posição = A posição exata da busca, como no caso de um retorno de um dispositivo SIP a variável CHANNEL retorna por exemplo SIP/2000-0000000b, se utilizarmos a posição em 1 será retornado o valor SIP, e se utilizarmos o valor 2 será retornado 2000-0000000b.

[device]
; Retornar dados do canal (PROTOCOL/DEVICE@CONTEXT)
;
exten=>97,1,Set(PROTOCOL=${CUT(CHANNEL,/,1)})
        same=>n,Set(DEVICE=${CUT(CHANNEL,/,2)})
        same=>n,Set(CONTEXT=${CONTEXT})
        same=>n,NoOP(${PROTOCOL}/${DEVICE:0:4}@${CONTEXT})

 

 

 

 

Leave a Reply

Answer the question: *