O Asterisk permite configurar múltiplos troncos SIP para chamadas externas. No entanto, sem uma configuração específica, o Asterisk sempre usará o primeiro tronco disponível. Este artigo aborda como distribuir chamadas de forma eficiente entre troncos SIP.
1. Configuração Básica dos Troncos SIP
Primeiro, defina seus troncos no sip.conf
:
[general]
context=default
bindport=5060
bindaddr=0.0.0.0
[tronco1]
type=peer host=sip1.provedor.com username=usuario1 secret=senha1 fromuser=usuario1 insecure=port,invite nat=force_rport,comedia context=from-external disallow=all allow=ulaw
[tronco2]
type=peer host=sip2.provedor.com username=usuario2 secret=senha2 fromuser=usuario2 insecure=port,invite nat=force_rport,comedia context=from-external disallow=all allow=ulaw
2. Configuração do Dialplan para Ramais Internos
No extensions.conf
, defina as chamadas internas:
[default]
exten => 1001,1,Dial(SIP/1001)
exten => 1002,1,Dial(SIP/1002)
Agora, vamos configurar as chamadas externas com diferentes estratégias de balanceamento.
3. Métodos para Distribuir Chamadas Entre Múltiplos Troncos
3.1 Seleção por Ordem de Prioridade
Se um tronco falhar, o segundo será utilizado:
[default]
exten => _0X.,1,Dial(SIP/tronco1/${EXTEN:1})
exten => _0X.,n,Dial(SIP/tronco2/${EXTEN:1})
exten => _0X.,n,Hangup()
3.2 Seleção Aleatória de Tronco
Distribui chamadas aleatoriamente entre os troncos:
[default]
exten => _0X.,1,GotoIf($[${RAND(0,1)}=0]?tronco1:tronco2)
exten => tronco1,1,Dial(SIP/tronco1/${EXTEN:1})
exten => tronco1,n,Hangup()
exten => tronco2,1,Dial(SIP/tronco2/${EXTEN:1})
exten => tronco2,n,Hangup()
3.3 Balanceamento Automático com Contagem de Chamadas
Alterna os troncos a cada chamada:
[default]
exten => _0X.,1,Set(GROUP()=chamadas_externas)
exten => _0X.,n,GotoIf($[${GROUP_COUNT(chamadas_externas@default)}%2=0]?tronco1:tronco2)
exten => tronco1,1,Dial(SIP/tronco1/${EXTEN:1})
exten => tronco1,n,Hangup()
exten => tronco2,1,Dial(SIP/tronco2/${EXTEN:1})
exten => tronco2,n,Hangup()
4. Configuração para Recebimento de Chamadas
Quando uma chamada entra pelo tronco, você pode direcioná-la para um ramal:
[from-external]
exten => s,1,Dial(SIP/1001)
exten => s,n,Hangup()
5. Solução de Problemas Comuns
5.1 Erro “Forbidden”
Se ao discar aparece Received response: "Forbidden"
, verifique:
- O provedor aceita o número no formato discado?
- Seu
fromuser
eusername
estão corretos? - A autenticação está correta?
5.2 O Tronco Não Está Registrando
Se sip show peers
mostra Unreachable
, tente:
- Conferir o firewall e liberar portas (5060 UDP e RTP 10000-20000)
- Verificar
nat=force_rport,comedia
caso esteja atrás de NAT
5.3 A Chamada Está Indo para o Contexto Errado
Se um erro indica extension not found in context
, revise:
- O contexto no
sip.conf
do tronco deve corresponder aoextensions.conf
Conclusão
Essas estratégias ajudam a configurar e balancear múltiplos troncos no Asterisk, garantindo melhor distribuição de carga e confiabilidade nas chamadas externas. Teste cada abordagem conforme sua necessidade e ajuste conforme necessário.