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=SERVIDOR
  • disallow=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_rport e rewrite_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 depurar

Registrado 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.

Conteúdo de Numio — número fixo virtual. Preços, prazos e limites citados são os praticados pela Numio na data de atualização (16 de setembro de 2026).