Interaflow

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ímboloSignificado
XQualquer dígito 0-9.
ZQualquer dígito 1-9 (não zero).
NQualquer 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ãoCobre
_55XXXXXXXXXXXNúmero Brasil completo (55 + DDD + 9 dígitos).
_0800XXXXXXXToll-free 0800.
_00ZZ.Internacional (00 + país + qualquer).
_11XXXXXXXXXLocal 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 55 quando 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 order1 = primeiro a tentar, 2 = backup, etc.
  • Number format — formato do número enviado àquele tronco específico:
    • E164_PLUS+5511987654321.
    • E164_NO_PLUS5511987654321 (padrão).
    • NATIONAL11987654321 (sem código de país).
    • RAW — exatamente como recebido.
  • 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:

ModoComo funcionaQuando usar
sequentialTenta na ordem (1, 2, 3…).Failover tradicional — primário/backup.
round_robinDistribui 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.
dddEscolhe 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:

  1. A Campanha resolve a rota — direto da Campanha, ou por cascata (fila → operação → tenant → padrão).
  2. A rota encontra a Match Rule que cobre o número, aplica strip_prefix / prepend / validação de tamanho.
  3. A rota escolhe o tronco conforme a estratégia (sequential / round_robin / random / ddd).
  4. Disca com o number_format daquele tronco.
  5. 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 _55XXXXXXXXXXX para 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 random por padrão. É o modo mais usado e o que dá resultado mais consistente sem coordenação.
  • ddd exige cadastro consistente. Se você marcar target_ddds em 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_format com 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 ddd exige 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_prefix mal 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 random distribuir uniformemente em poucas chamadas. Aleatório é aleatório; em pequena escala parece concentrado. Em escala grande converge.
  • Esquecer number_format. Operadora que exige +E164 recebe número sem + e rejeita.

Ver também