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:A função
PJSIP_HEADER permite ler cabeçalhos SIP específicos do canal PJSIP de entrada, bem como escrever (adicionar, atualizar, remover) cabeçalhos no canal de saída. Uma exceção é que você pode ler cabeçalhos que já foram adicionados 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-
exten => 1,1,Set(xhdr=${PJSIP_HEADER(read,X-*,1)})
Exemplo: Adiciona um cabeçalho X-Myheader com o valor de myvalue
exten => 1,1,Set(PJSIP_HEADER(add,X-MyHeader)=myvalue)
Exemplo: Adiciona um cabeçalho X-Myheader com um 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 correspondam 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 adicionados anteriormente
exten => 1,1,Set(PJSIP_HEADER(remove,*)=)
Observação: 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 cabeçalhos ignorando qualquer contagem
exten => 1,1,Set(=${PJSIP_HEADER(remove,X-MyHeader)})
exten => 1,1,Set(PJSIP_HEADER(remove,X-MyHeader)=)
Observação: Se você chamar
PJSIP_HEADER em um contexto de discagem normal, estará operando no canal do chamador (entrada), o que pode não ser o que você deseja. Para operar no canal do chamado (saída), chame
PJSIP_HEADER em um manipulador de pré-discagem.
Exemplo: Define cabeçalhos no canal do chamado
[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 com o nome especificado. Um '' pode ser anexado ao nome para iterar sobre todos os cabeçalhos *começando com o nome*. add - Adiciona um novo nome de cabeçalho a esta sessão. update - Atualiza o número da instância do nome do cabeçalho para um novo valor. O cabeçalho deve já existir. remove - Remove todas as instâncias de cabeçalhos adicionados anteriormente cujos nomes correspondam ao nome. Um '' pode ser anexado ao nome para remover todos os cabeçalhos *começando com o nome*. O nome pode ser definido como um único '' para limpar *todos os cabeçalhos adicionados anteriormente*. 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