pnclPULSEObter acesso à API

NOTAS SOBRE ALERTAS DE QUEDA

Encaminhe cada alerta de queda para o canal certo

Um stream, muitos destinos. Coloque uma tabela de rotas entre o filtro e os webhooks para cada esporte e severidade caírem no próprio canal.

Um relay de alertas de queda não precisa mandar tudo para um lugar só. Entre o filtro de limiar e o webhook fica uma tabela de rotas: um pequeno mapa de esporte e severidade para canal, para que quedas de futebol caiam com os leitores de futebol e só os maiores movimentos chamem o canal urgente. Um processo, um stream, muitos destinos.

Onde o roteador fica

A ordem importa: filtre primeiro, deduplique depois, encaminhe em terceiro, envie por último. A filtragem descarta os alertas que você nunca quis. A deduplicação, com as chaves e cooldowns do guia de deduplicação, colapsa repetições do mesmo preço caindo. Só então o roteamento decide para onde o sobrevivente vai, e uma fila por canal o entrega ao trabalhador do webhook.

Esse último salto merece sua própria fila por destino. O guia de relay já mantém o POST do webhook fora do loop de leitura; com vários canais, a mesma regra vale por canal, para que um destino estrangulado não atrase os demais.

Encaminhe por esporte primeiro

O alerta carrega esporte e liga em campos simples, que é tudo o que um roteador precisa. A maioria dos leitores quer um canal por esporte que acompanha, não um feed de tudo:

ROUTES = {
    ("Soccer", "normal"): SOCCER_WEBHOOK,
    ("Tennis", "normal"): TENNIS_WEBHOOK,
}
DEFAULT = GENERAL_WEBHOOK

def pick_webhook(alert, level):
    return ROUTES.get((alert["sport"], level), DEFAULT)

Rotas por liga funcionam do mesmo jeito quando um canal se importa com uma competição só. Mantenha a tabela pequena: cada linha é uma promessa de que alguém lê o que chega ali.

Depois por severidade

O segundo eixo é o tamanho do movimento. O stream envia preços, então o próprio relay calcula a porcentagem: a descida dividida pelo preço antigo, como o guia de alertas de queda documenta. Dois níveis bastam para a maioria dos setups: tudo igual ou acima do seu limiar vai para o canal normal, e uma segunda barra mais alta, digamos 8% onde 5% é o piso, também espelha para um canal urgente que menos gente segue de perto.

Resista a níveis mais finos. Três faixas por esporte viram uma tabela de rotas que ninguém lê, e uma queda grande o bastante para importar se lê claramente em dois níveis.

Respeite o ritmo de cada canal

Cada webhook tem seu próprio limite de postagem, e as plataformas respondem a uma rajada com um 429 e um cabeçalho Retry-After próprios, como as regras de retry do guia de relay cobrem. Com filas por canal, honrar esse cabeçalho pausa só o canal que o enviou. Os limites das plataformas de chat, não o stream, definem seu teto de postagem numa rodada cheia.

Duas configurações do guia de relay absorvem a maioria das rajadas antes de o roteamento importar: poste uma mensagem por evento em vez de uma por resultado, e mantenha um cooldown por seleção para que um preço que continua caindo não poste a cada poucos segundos.

Meça o próprio roteamento

Registre a rota que cada alerta tomou, não só o envio. Uma contagem semanal por canal diz quais linhas da tabela merecem lugar: um canal que recebe quarenta alertas por dia e é lido duas vezes é um problema de filtro, não um sucesso de roteamento. Suba o limiar dele ou funda-o de volta no canal geral.

Filtre, deduplique, encaminhe, envie. O stream entrega os movimentos; a tabela decide quem fica sabendo deles.