Faixa 06 · Em desenvolvimento · Python, Django e a API do TOTVS

Rastreio de pedidos

Um e-mail a cada etapa da entrega. Uma vez só.

1 aviso por etapamesmo com a sincronização rodando de novo e de novo

A história

O sistema de rastreio da Kallifon já mostrava cada etapa da entrega para a equipe. O cliente não via nada. Minha parte é fazer o cliente saber também.

O difícil é o “real” e o “um”. A sincronização se repete o dia todo, e ver a mesma etapa de novo não pode virar outro e-mail. E se o servidor de e-mail cair, o rastreio não pode travar junto.

Cada mudança de etapa vira uma linha numa fila, no máximo uma por pedido e etapa, e é o próprio banco que garante isso. Um processo separado envia a cada 5 minutos e registra cada tentativa.

O rastreio nunca espera o e-mail: a mensagem vai para uma fila, e a fila cuida do resto.

Um pedido fictício. Avance as etapas, sincronize de novo, derrube o servidor de e-mail e observe a fila.

  1. Vinculado
  2. Em preparação
  3. Em trânsito
  4. Em separação
  5. Saiu para entrega
  6. Entregue

Fila de e-mails · pedido DEMO-4821

EtapaSituaçãoTentativas

Diário

    Por dentrorestrições, passos e detalhes

    O que não podia acontecer

    • A sincronização, que se repete, gerar um segundo e-mail para a mesma etapa.
    • O servidor de e-mail fora do ar derrubar ou atrasar o rastreio.
    • Pedidos que já estavam no meio da entrega receberem uma avalanche de e-mails atrasados.

    Como a fila funciona

    1. Sincronizar: o rastreio segue o próprio ritmo.
    2. Mudou de etapa? Só mudança real conta.
    3. Enfileirar: uma linha por pedido e etapa.
    4. Processar: a cada 5 minutos, em lotes.
    5. Enviar: com o e-mail vindo do TOTVS.
    6. Registrar: enviado ou falhou, com as tentativas.

    O destinatário vem do cadastro no TOTVS, pela API: o endereço marcado como padrão ou, sem ele, o primeiro preenchido. Para os pedidos antigos, um comando prepara o destinatário sem criar e-mails retroativos. Cada mensagem tenta até 5 vezes; depois disso, só com uma nova rodada liberada pelo admin. E o envio nasce desligado, até o servidor de e-mail ser validado.