Funções do Dialplan do Asterisk 20
Comando:
PJSIP_HEADER()
Sinopse:
Obtém cabeçalhos de um canal PJSIP de entrada. Adiciona, atualiza ou remove o cabeçalho SIP especificado de um canal PJSIP de saída.
Descrição:
PJSIP_HEADER permite que você leia cabeçalhos SIP específicos do canal PJSIP de entrada, bem como escreva (adicionar, atualizar, remover) cabeçalhos no canal de saída. Uma exceção é que você pode ler cabeçalhos que já adicionou no canal de saída.
Exemplos:
Exemplo: Define somevar com o valor do cabeçalho From
exten => 1,1,Set(somevar=${PJSIP_HEADER(read,From)})
Exemplo: Define via2 com o valor do 2º cabeçalho Via
exten => 1,1,Set(via2=${PJSIP_HEADER(read,Via,2)})
Exemplo: Define xhdr com o valor do 1º cabeçalho X-header
exten => 1,1,Set(xhdr=${PJSIP_HEADER(read,X-*,1)})
Exemplo: Adiciona um cabeçalho X-Myheader com o valor myvalue
exten => 1,1,Set(PJSIP_HEADER(add,X-MyHeader)=myvalue)
Exemplo: Adiciona um cabeçalho X-Myheader com valor vazio
exten => 1,1,Set(PJSIP_HEADER(add,X-MyHeader)=)
Exemplo: Atualiza o valor do cabeçalho chamado X-Myheader para newvalue; 'X-Myheader' deve já existir ou a chamada falhará.
exten => 1,1,Set(PJSIP_HEADER(update,X-MyHeader)=newvalue)
Exemplo: Remove todos os cabeçalhos cujos nomes correspondem exatamente a X-MyHeader
exten => 1,1,Set(PJSIP_HEADER(remove,X-MyHeader)=)
Exemplo: Remove todos os cabeçalhos que começam com X-My
exten => 1,1,Set(PJSIP_HEADER(remove,X-My*)=)
Exemplo: Remove todos os cabeçalhos previamente adicionados
exten => 1,1,Set(PJSIP_HEADER(remove,*)=)
Nota: A ação 'remove' pode ser chamada lendo ou escrevendo PJSIP_HEADER.
Exemplo: Exibe o número de cabeçalhos removidos
exten => 1,1,Verbose( Removed ${PJSIP_HEADER(remove,X-MyHeader)} headers)
Exemplo: Define uma variável com o número de cabeçalhos removidos
exten => 1,1,Set(count=${PJSIP_HEADER(remove,X-MyHeader)})
Exemplo: Apenas remove-os ignorando qualquer contagem
exten => 1,1,Set(=${PJSIP_HEADER(remove,X-MyHeader)})
exten => 1,1,Set(PJSIP_HEADER(remove,X-MyHeader)=)
Nota: Se você chamar PJSIP_HEADER em um contexto normal de dialplan, estará operando no canal do originador (entrada), o que pode não ser o desejado. Para operar no canal do destinatário (saída), chame PJSIP_HEADER em um pre-dial handler.
Exemplo: Define cabeçalhos no canal do destinatário
[handler]
exten => addheader,1,Set(PJSIP_HEADER(add,X-MyHeader)=myvalue)
exten => addheader,2,Set(PJSIP_HEADER(add,X-MyHeader2)=myvalue2)
[somecontext]
exten => 1,1,Dial(PJSIP/${EXTEN},,b(handler^addheader^1))
PJSIP_HEADER(action,name[,number])
action read - Retorna o número da instância do cabeçalho name. Um '*' pode ser adicionado ao name para iterar sobre todos os cabeçalhos que começam com name.
add - Adiciona um novo cabeçalho name a esta sessão.
update - Atualiza o número da instância do cabeçalho name com um novo valor. O cabeçalho deve já existir.
remove - Remove todas as instâncias de cabeçalhos previamente adicionados cujos nomes correspondem a name. Um '*' pode ser adicionado ao name para remover todos os cabeçalhos que começam com name. name pode ser definido como um único '*' para limpar todos os cabeçalhos previamente adicionados. Em todos os casos, o número de cabeçalhos realmente removidos é retornado.
name - O nome do cabeçalho.
number - Se houver mais de 1 cabeçalho com o mesmo nome, isso especifica qual cabeçalho ler ou atualizar. Se não for especificado, o padrão é '1', significando o primeiro cabeçalho correspondente. Não é válido para 'add' ou 'remove'.
Sintaxe:
exten => 1,1,Set(somevar=${PJSIP_HEADER(read,From)})
exten => 1,1,Set(via2=${PJSIP_HEADER(read,Via,2)})
exten => 1,1,Set(xhdr=${PJSIP_HEADER(read,X-*,1)})
exten => 1,1,Set(PJSIP_HEADER(add,X-MyHeader)=myvalue)
exten => 1,1,Set(PJSIP_HEADER(add,X-MyHeader)=)
; 'X-Myheader' must already exist or the call will fail.
exten => 1,1,Set(PJSIP_HEADER(update,X-MyHeader)=newvalue)
exten => 1,1,Set(PJSIP_HEADER(remove,X-MyHeader)=)
exten => 1,1,Set(PJSIP_HEADER(remove,X-My*)=)
exten => 1,1,Set(PJSIP_HEADER(remove,*)=)
exten => 1,1,Verbose( Removed ${PJSIP_HEADER(remove,X-MyHeader)} headers)
exten => 1,1,Set(count=${PJSIP_HEADER(remove,X-MyHeader)})
exten => 1,1,Set(=${PJSIP_HEADER(remove,X-MyHeader)})
exten => 1,1,Set(PJSIP_HEADER(remove,X-MyHeader)=)
[handler]
exten => addheader,1,Set(PJSIP_HEADER(add,X-MyHeader)=myvalue)
exten => addheader,2,Set(PJSIP_HEADER(add,X-MyHeader2)=myvalue2)
[somecontext]
exten => 1,1,Dial(PJSIP/${EXTEN},,b(handler^addheader^1))
PJSIP_HEADER(action,name[,number])
Fonte: Asterisk Wiki