Produto
Rotas de Saída
Rota de Saída casa números discados (regex Asterisk) com uma sequência de troncos. Suporta sequencial / round-robin / random / por DDD, normalização de número e classificador por rota.
Atualizado em
O que é
Rota de Saída é uma camada de configuração entre a Campanha Outbound e o tronco SIP. Em vez de a Campanha discar diretamente por um tronco fixo, ela aponta para uma Rota de Saída — e a Rota decide:
- Qual tronco usar (com base em padrão de número discado e estratégia de seleção).
- Como normalizar o número antes de enviar à operadora.
- Que sequência de troncos tentar se o primeiro falhar.
Para Campanhas simples (um tronco para todas as chamadas), você
pode pular Rotas e amarrar tronco_sip_id direto na Campanha. Para
operações com vários troncos, múltiplas operadoras, fallback ou
roteamento por DDD, Rota de Saída é o caminho.
Modelo conceitual
Campanha Outbound
│
▼
Rota de Saída ──► Match Rules (padrão de número)
│ │
│ ▼ (qual rota / regra aplica)
▼
Trunk Sequence ─► Tronco 1 ─► Tronco 2 ─► ...
(failover na ordem ou conforme estratégia)A rota é composta por:
- Match Rules — quais números essa rota cobre (pattern matching).
- Trunk Sequence — sequência ordenada de troncos a tentar.
- Configurações gerais (prioridade da rota, timeout de discagem, estratégia de seleção, classificador associado).
Match Rules — qual rota cobre qual número
Cada rota tem uma ou mais Match Rules, cada uma com um padrão de discagem estilo Asterisk:
| Símbolo | Significado |
|---|---|
X | Qualquer dígito 0-9. |
Z | Qualquer dígito 1-9 (não zero). |
N | Qualquer dígito 2-9. |
[2-5] | Range — qualquer dígito de 2 a 5. |
. | Wildcard — um ou mais dígitos quaisquer. |
_ (prefixo) | Convenção Asterisk de “padrão começa aqui”. |
Exemplos típicos:
| Padrão | Cobre |
|---|---|
_55XXXXXXXXXXX | Número Brasil completo (55 + DDD + 9 dígitos). |
_0800XXXXXXX | Toll-free 0800. |
_00ZZ. | Internacional (00 + país + qualquer). |
_11XXXXXXXXX | Local SP. |
Cada Match Rule pode ainda:
- Strip prefix — remover dígitos do início (ex.: tirar o “9” de acesso externo).
- Prepend — adicionar dígitos ao início (ex.: prefixar
55quando o número vem só com DDD+local). - Validar min_len / max_len — descartar números mal formados antes de discar.
Quando há múltiplas Match Rules na mesma rota, a prioridade decide qual aplica (menor = avaliada primeiro).
Trunk Sequence — qual tronco usar
A rota tem uma sequência ordenada de troncos. Para cada posição:
- Tronco SIP referenciado.
- Sequence order —
1= primeiro a tentar,2= backup, etc. - Number format — formato do número enviado àquele tronco
específico:
- E164_PLUS —
+5511987654321. - E164_NO_PLUS —
5511987654321(padrão). - NATIONAL —
11987654321(sem código de país). - RAW — exatamente como recebido.
- E164_PLUS —
- Tech prefix override (opcional, sobrescreve padrão da Campanha).
- target_ddds — DDDs de destino que devem usar este tronco
específico (apenas para o modo
ddd).
Estratégias de seleção de tronco
A rota define como escolher entre os troncos da sequência:
| Modo | Como funciona | Quando usar |
|---|---|---|
| sequential | Tenta na ordem (1, 2, 3…). | Failover tradicional — primário/backup. |
| round_robin | Distribui circular entre os troncos. | Equilibrar carga entre troncos similares. |
| random (default) | Sorteia entre os troncos. | Distribuição prática sem o overhead do round-robin coordenado. |
| ddd | Escolhe tronco pelo DDD destino (configurado em target_ddds). | Operadora regional — DDD SP usa tronco A, DDD RJ usa tronco B. |
Para random ser eficaz, a sequência precisa ter troncos
equivalentes (mesma operadora, mesma capacidade); senão a
distribuição vira ruim.
Failover
Independentemente da estratégia, o failover é automático: se a
chamada falha no tronco escolhido (timeout, falha de registro,
canal cheio), a rota tenta o próximo na sequência. Configure
dial_timeout para definir quanto tempo cada tentativa espera
antes de cair para o próximo (padrão 45 s).
Escopo da rota
A rota tem três níveis de escopo, do mais específico ao mais geral:
- Site específico — rota só vale para chamadas processadas por aquele site.
- Tenant — rota vale para qualquer Campanha do tenant.
- Global (sem tenant nem site) — vale para todos.
Quando há múltiplas rotas aplicáveis ao mesmo número, a prioridade da rota desempata (menor = avaliada primeiro). Use prioridades diferentes deliberadamente para cobrir cenários sobrepostos.
Como a Campanha usa a rota
A Campanha Outbound aponta para uma rota via outbound_route_id.
No momento de discar:
- A Campanha resolve a rota — direto da Campanha, ou por cascata (fila → operação → tenant → padrão).
- A rota encontra a Match Rule que cobre o número, aplica
strip_prefix/prepend/ validação de tamanho. - A rota escolhe o tronco conforme a estratégia
(
sequential/round_robin/random/ddd). - Disca com o
number_formatdaquele tronco. - Se falhar, tenta o próximo tronco da sequência.
A Campanha que não tem rota e tem tronco direto pula esse caminho — a rota é opcional, mas recomendada para qualquer operação não- trivial.
Classificador por rota
Cada rota pode ter um
Perfil de Classificação
associado (classifier_profile_id) ou marcar classificador
desabilitado para a rota inteira (classifier_disabled).
Isso permite, por exemplo:
- Rota Outbound padrão usa classificador agressivo (drop voicemail, drop SIT).
- Rota de notificação automatizada (que vai falar com voicemail
intencionalmente) marca
classifier_disabled = true.
Auditoria por rota
Quando ativada (audit_enabled = true), a rota grava o áudio
RAW das chamadas para uso em treinamento do classificador
neural. Configurações:
- Diretório (
audit_rawdir) — pasta onde os arquivos ficam (default/var/spool/asterisk/akanalyzer/raw). - Limite simultâneo (
audit_concurrent_limit) — quantas chamadas podem gravar RAW ao mesmo tempo, para não sobrecarregar storage.
Use com parcimônia — auditoria RAW infla storage rapidamente.
Boas práticas
- Comece com
_55XXXXXXXXXXXpara Brasil completo. Adicione rotas específicas (0800, internacional) só quando a operação exigir. - Mantenha a sequência de troncos curta. Failover de 5 níveis vira ruído — 2 a 3 cobre o caso geral.
- Use
randompor padrão. É o modo mais usado e o que dá resultado mais consistente sem coordenação. dddexige cadastro consistente. Se você marcartarget_dddsem troncos sobrepostos, o resultado fica imprevisível.- Teste com a função de simulação quando disponível
(
POST /api/v1/outbound-routes/simulate). Discar de verdade só depois de confirmar a Match Rule e o tronco escolhido. - Alinhe
number_formatcom cada operadora. Algumas exigem E164 com+, outras rejeitam o sinal. Erro clássico no primeiro cadastro.
Limites conhecidos
- Time groups (rotas por horário) estão previstos no schema mas não disponíveis como funcionalidade pública nesta versão.
- Sem teste end-to-end integrado na UI (“ligar para um número de validação”). Use a simulação ou logs do Asterisk.
- Modo
dddexige curadoria manual das listas de DDDs por tronco — não detecta automaticamente.
Erros comuns
- Pattern errado.
_X.é “1+ dígitos quaisquer” — combina com qualquer coisa. Se você quer “11 dígitos exatos”, use_XXXXXXXXXXX. strip_prefixmal calibrado. Tirar dígito a mais ou a menos manda número inválido para a operadora.- Várias rotas cobrindo o mesmo padrão sem prioridade clara. Resultado vira aleatório dependendo do match — defina prioridades.
- Esperar
randomdistribuir uniformemente em poucas chamadas. Aleatório é aleatório; em pequena escala parece concentrado. Em escala grande converge. - Esquecer
number_format. Operadora que exige+E164recebe número sem+e rejeita.