Como configurar um tronco SIP brasileiro no Asterisk (PJSIP)?
Por NumioPublicado em
No Asterisk moderno (PJSIP), um número vira cinco seções no pjsip.conf: um registration (que mantém o registro no nosso servidor), um auth (usuário e senha), um aor (pra onde mandar), um endpoint (como falar: codec, contexto, NAT) e um identify (pra reconhecer as chamadas que chegam de nós). Abaixo está o arquivo pronto — troque SERVIDOR, SEU_NUMERO e SUA_SENHA pelos dados do painel.
Um número = um tronco. Se você tem vários números, repita o bloco trocando o sufixo (numio1, numio2…) e o número, ou entregue todos ao mesmo endpoint se preferir separar só na rota de entrada. E lembre: a identificação de quem liga é sempre o próprio número — from_user precisa bater com o número do tronco por onde a chamada sai.
Se o Asterisk do seu cliente tem IP público fixo, dá pra dispensar o registration e pedir a entrega por IP no painel; veja registro ou IP.
pjsip.conf — o tronco
pjsip.conf
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
[numio-auth]
type=auth
auth_type=userpass
username=SEU_NUMERO
password=SUA_SENHA
[numio-aor]
type=aor
contact=sip:SERVIDOR:5060
qualify_frequency=60
[numio-reg]
type=registration
transport=transport-udp
outbound_auth=numio-auth
server_uri=sip:SERVIDOR:5060
client_uri=sip:SEU_NUMERO@SERVIDOR
contact_user=SEU_NUMERO
retry_interval=60
expiration=300
[numio]
type=endpoint
transport=transport-udp
context=from-numio
disallow=all
allow=alaw,ulaw
outbound_auth=numio-auth
aors=numio-aor
from_user=SEU_NUMERO
from_domain=SERVIDOR
direct_media=no
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes
dtmf_mode=rfc4733
[numio-identify]
type=identify
endpoint=numio
match=SERVIDORdisallow=all+allow=alaw,ulaw: só G.711, que é o que a entrega usa.direct_media=no: o áudio passa pelo seu Asterisk — sem isso, NAT no meio costuma resultar em chamada muda.rtp_symmetric,force_rporterewrite_contact: o trio que faz o Asterisk atrás de NAT responder pro IP de onde o pacote realmente veio.expiration=300: o registro se renova a cada 5 minutos, o que também mantém a porta aberta no firewall.
extensions.conf — entrada e saída
extensions.conf
; --- Chamadas que CHEGAM no número ---
[from-numio]
; o número discado chega em ${EXTEN}; mande pra onde fizer sentido
exten => SEU_NUMERO,1,NoOp(Entrada Numio ${CALLERID(num)})
same => n,Dial(PJSIP/100,30) ; ramal 100
same => n,Hangup()
; fallback: qualquer DID entregue neste tronco
exten => _X.,1,Goto(from-numio,SEU_NUMERO,1)
; --- Chamadas que SAEM pelo número ---
[from-internal]
; celular: 0 + DDD + 9 dígitos | fixo: 0 + DDD + 8 dígitos
exten => _0XXXXXXXXXX.,1,NoOp(Saida Numio)
same => n,Set(CALLERID(num)=SEU_NUMERO)
same => n,Dial(PJSIP/${EXTEN:1}@numio,60)
same => n,Hangup()Disque em formato nacional, sem +55: DDD + número. O ${EXTEN:1} do exemplo remove o zero que o usuário digitou antes do DDD — ajuste ao plano de discagem que você já usa.
Como confirmar que subiu
CLI do Asterisk
asterisk -rx "pjsip show registrations" ; precisa aparecer Registered
asterisk -rx "pjsip show endpoint numio" ; Avail / Not in use
asterisk -rx "pjsip set logger on" ; sinalização ao vivo, pra depurarRegistrado mas sem áudio? Quase sempre é RTP bloqueado ou SIP ALG no roteador — o diagnóstico está em chamada sem áudio. Não registra? Veja o número não registra.
E o chan_sip antigo?
O chan_sip foi removido do Asterisk 21 em diante. Se você ainda mantém uma instalação antiga, o equivalente é um register => com SEU_NUMERO:SUA_SENHA@SERVIDOR e um peer com type=friend, host=SERVIDOR, insecure=invite,port, disallow=all, allow=alaw, nat=force_rport,comedia. Vale mais planejar a migração pro PJSIP do que investir nessa configuração.
Perguntas frequentes
PJSIP. O chan_sip foi removido a partir do Asterisk 21 e não recebe correções.
Sim, um registro por número. Dá pra reaproveitar o mesmo endpoint e separar só na rota de entrada, mas cada número tem a própria credencial.
DDD + 9 dígitos, sem +55 e sem zero na frente, no Dial pro endpoint do tronco.
Não adianta: a identificação apresentada é sempre o número do tronco por onde a chamada sai.
alaw e ulaw (G.711). Desabilite o resto com disallow=all antes.
Funciona, com rtp_symmetric, force_rport, rewrite_contact e direct_media=no, como no exemplo.
Dá, quando o servidor tem IP público fixo: você informa o IP no painel e remove o bloco de registration.