Skip to main content
Hot reload. Edições aplicam em cerca de 200 ms sem restart.

Uma regra tem quatro partes separadas por dois pontos

Target é uma instância de worker (vendor1, smppserver.smpp), um grupo, ou outra tabela para encadear (MESSAGE). Regras são avaliadas de cima para baixo dentro de uma tabela, e o primeiro match vence.
Uma regra malformada faz o reload inteiro falhar e a tabela anterior é mantida. Cheque o log por Error parsing new routing table depois de editar. O gateway continua funcionando na tabela antiga, então nada parece errado até você se perguntar por que sua mudança não fez nada.

Os dois erros que o parser não vai salvar você

== é um operador numérico. Use equals para strings:
matches é ancorado, startsWith é literal. ^61.* casa com um número inteiro; um 61 puro não. E startsWith compara texto literal. Uma expressão regular passada para ele não casa com nada, em silêncio.

Uma tabela mínima

O catch-all vai no fim. Acima de outras regras ele torna tudo abaixo inalcançável, e nada avisa você. As regras parseiam bem, simplesmente nunca rodam.
product vem do system_type no bind SMPP do cliente, caindo de volta para o product da credencial. Chamadores HTTP sempre usam o valor da credencial.

Grupos de fornecedor

Um grupo é outro nome para o qual uma regra pode enviar. Em vez de nomear um fornecedor, a regra nomeia um grupo e o grupo escolhe um membro. Pulando qualquer um que esteja suspenso ou não aceitando. Que é o failover que uma regra de alvo único não faz.
Blocos de grupo precisam vir antes do primeiro cabeçalho [table]. Dentro de um bloco de tabela uma linha de membro não casa com nada e é descartada em silêncio.Um peso é lido só por weighted. Definir um nos outros dois não muda nada, e o gateway diz isso em WARN em vez de deixar você acreditar que uma divisão está acontecendo.

Tabelas least-cost routing

Uma tabela marcada ->function(LCR) se comporta diferente: em vez de parar na primeira regra que casa, toda regra que casa é candidata e o fornecedor com a tarifa mais barata em rates.conf vence. Ordem de regra é portanto irrelevante em uma tabela LCR. As regras são alternativas, não uma cadeia de fallback.
  • Fornecedores que estão down ou não aceitando são pulados, então o próximo mais barato carrega o tráfego.
  • Um fornecedor com nenhuma tarifa que case é usado só se nada mais casar, então uma linha de tarifa ausente degrada em vez de bloquear.
  • Regras apontando para outra tabela são ignoradas dentro de uma tabela LCR.
Veja Least-cost routing.

Filtros

Uma regra pode referenciar um filtro nomeado da biblioteca de filtros em vez de soletrar as condições inline.
Um filtro ausente ou desabilitado pula toda regra que o referencia, em vez de carregar a regra com menos condições. Descartar uma condição faria a regra casar com mais tráfego, então falhar dessa forma seria silencioso e rotearia as coisas erradas.É por isso que desabilitar um filtro pode fazer uma regra parecer casar com menos, e por que a correção nunca é “só remover a condição”.
Em modo de banco este arquivo não é lido depois do startup; os mesmos dados vivem em app_route_table, app_route_rule e suas tabelas de condição. Veja Banco de dados.