Todos os artigos
Integração

Mensagem repetida no WhatsApp, uma só encomenda

Mensagem repetida no WhatsApp, uma só encomenda

«Eu só pedi uma vez. Porque é que tenho duas encomendas?»

É a conversa que queres evitar com o teu cliente. Ele confirma um pedido pelo WhatsApp. A integração recebe a notificação, cria a encomenda no ERP e, por uma falha na comunicação, volta a receber o mesmo evento. Se tratar cada entrega como uma nova intenção de compra, tens duas encomendas para um único pedido.

A resposta do assistente até pode estar impecável. O problema está no que aconteceu depois: duas tarefas de preparação, duas reservas de stock ou trabalho administrativo para desfazer o erro.

A diferença entre responder bonito e integrar o teu ERP aparece aqui. Não na capacidade de escrever «pedido recebido», mas na capacidade de provar que uma confirmação só produz uma encomenda, mesmo quando a infraestrutura repete a entrega.

Responsável de armazém consulta uma conversa no telemóvel junto de uma caixa preparada para expedição

A mesma notificação pode chegar mais de uma vez

Um webhook é uma notificação enviada de um sistema para outro. Quando chega uma mensagem, a plataforma avisa a tua integração por HTTP. A integração acusa a receção e trata o evento.

Segundo a documentação de webhooks do WhatsApp da Meta consultada para este artigo, as entregas que falham ou não recebem a resposta HTTP 200 podem ser novamente tentadas durante até sete dias. A própria documentação admite notificações repetidas. Isto não significa que todas as mensagens sejam repetidas nem que a plataforma duplique encomendas. Significa que quem constrói a integração não pode assumir uma entrega única.

Pensa numa chamada telefónica que cai depois de dizeres «está confirmado». A outra pessoa não sabe se ouviste. Repetir a frase é uma forma razoável de recuperar a comunicação. Repetir a compra não é.

Há também relatos públicos da dor na conversa. Na issue 221827 do Odoo, aberta em agosto de 2025 sobre a versão 18.0, um utilizador descreve que o cliente recebe a mensagem duas vezes quando mensagens de entrada e saída se cruzam. O relato é sobre mensagens, não sobre encomendas duplicadas. Não prova uma falha de criação de encomendas. Mostra por que motivo convém separar o que aparece no chat do que ficou efetivamente registado no ERP.

O exemplo: dez caixas, uma confirmação, duas entregas

Imagina um distribuidor. Este é um exemplo de teste, não um resultado de uma instalação Leiritech.

O cliente pede dez caixas de um artigo. O sistema identifica o cliente e a referência no ERP, apresenta o resumo e recebe a confirmação. Essa confirmação fica associada a uma operação concreta, por exemplo pedido-482. O nome é ilustrativo; interessa existir uma identidade estável para aquela decisão de compra.

A primeira entrega do evento leva à criação da encomenda. O ERP grava-a, mas a resposta perde-se antes de a integração conseguir registar o sucesso. Entretanto, chega outra entrega da mesma confirmação.

Uma implementação ingénua volta a executar «criar encomenda». Uma implementação preparada reconhece a operação e apura o resultado anterior antes de avançar. Se confirmar que a encomenda já existe, associa-lhe a operação e devolve a referência existente. Não cria uma segunda.

É isto que se procura com idempotência: repetir a mesma operação não acrescenta outro efeito de negócio. Não significa impedir que um cliente faça duas compras iguais. Significa impedir que a infraestrutura transforme uma compra em duas.

Essa distinção muda o desenho da integração. Há duas identidades a preservar: a do evento recebido, para reconhecer a repetição da notificação, e a da operação confirmada, para reconhecer a mesma encomenda ao longo das tentativas de execução.

O texto da mensagem não chega para nenhuma das duas. «Quero dez caixas» pode ser uma compra legítima hoje e outra amanhã. Eliminar mensagens iguais durante alguns minutos pode esconder a falha técnica à custa de apagar pedidos válidos.

A proteção tem de existir antes da escrita

Uma memória da conversa não é um mecanismo de exclusão. Dizer ao modelo «não dupliques encomendas» também não é. Dois processos podem receber o mesmo evento ao mesmo tempo, consultar o histórico, não encontrar nada e avançar ambos.

O primeiro controlo é uma receção durável. A integração valida a origem da notificação e guarda o evento antes de acusar a receção. A identificação deve incluir o contexto necessário, como a empresa ou conta e o identificador da mensagem ou do evento relevante. Não basta marcar um pacote inteiro como tratado se esse pacote contiver vários eventos distintos.

O registo tem de impedir duplicados de forma atómica: numa base de dados, uma restrição de unicidade pode garantir que apenas um processo consegue registar aquela identidade. Consultar primeiro e inserir depois, sem essa proteção, deixa aberta a corrida entre processos.

Só depois de guardar duravelmente o evento faz sentido devolver o HTTP 200 e continuar o trabalho através de uma fila. Assim, a receção não fica dependente de esperar pela criação da encomenda. Mas isto resolve apenas a entrada. Se o processo cair depois de guardar o evento, tem de existir uma forma de retomar o trabalho; «já recebido» não pode passar a significar «esquecido».

A operação precisa, portanto, de um estado persistente: recebida, em processamento, confirmada ou com resultado por apurar. Uma segunda entrega consulta esse estado. Não volta a entregar ao modelo uma autorização em branco para comprar.

O ponto difícil: o ERP gravou, mas ninguém recebeu a resposta

Responsável de operações verifica um registo num ecrã de gestão no escritório contíguo ao armazém

Um timeout diz que não recebeste a resposta a tempo. Não diz que o ERP recusou a operação.

Esta é a falha que uma demonstração sem interrupções não revela. A integração pode guardar todos os eventos corretamente e, ainda assim, duplicar uma encomenda se repetir uma escrita cujo resultado desconhece.

A melhor proteção depende da API concreta. Se aceitar uma chave de idempotência, todas as tentativas daquela operação devem usar a mesma chave. Se permitir uma referência externa com unicidade efetivamente imposta na criação, essa referência pode cumprir uma função semelhante. É preciso verificar a garantia, a duração e o âmbito dessa proteção na versão utilizada; um campo chamado «referência» não implica unicidade.

Pesquisar a referência antes de criar ajuda a reconciliar, mas, isoladamente, não fecha o problema. Duas tentativas podem pesquisar ao mesmo tempo e ambas concluir que ainda não existe encomenda. A proteção da escrita tem de ser garantida no destino ou por um mecanismo que controle efetivamente as tentativas e as falhas relevantes.

Se a API não oferecer uma forma fiável de distinguir «não foi criado» de «foi criado, mas a resposta perdeu-se», a opção segura é suspender a repetição automática e encaminhar a operação para reconciliação. Nesse momento, a mensagem correta é «estamos a verificar o registo», não «a encomenda falhou» nem «já está confirmada».

Há aqui uma escolha operacional: perante incerteza, preferes atrasar uma confirmação ou arriscar uma segunda encomenda? A integração deve tornar essa decisão explícita. Prometer «exatamente uma vez» sem explicar esta fronteira entre sistemas não resolve nada.

Consultar o ERP não é ter autorização para escrever nele

Na Leiritech, o acesso conversacional ao ERP é apresentado como só de leitura, auditado e fundamentado nos dados do cliente. Essa fronteira importa: consultar uma encomenda e criar uma encomenda são permissões diferentes.

Um assistente só de leitura pode verificar a existência do pedido, consultar o estado e apresentar a referência que encontrou. Não cria documentos, não reserva stock e não deve alegar que executou uma ação que as suas permissões não permitem.

Para acrescentar criação de encomendas, é necessário um fluxo de escrita separado, autorizado e implementado para o teu sistema. O modelo pode ajudar a interpretar o pedido e a apresentar o resumo. A execução deve passar por regras determinísticas: identidade do cliente, empresa certa, artigos válidos, confirmação, permissões e controlo de repetição.

Ter a resposta fundamentada nos dados reais reduz o espaço para inventar referências ou estados. Não substitui a proteção transacional. A linguagem natural trata da conversa; o conector e o ERP têm de garantir o efeito da operação.

O desenho aqui descrito é uma proposta de implementação e teste. Não é uma afirmação de que qualquer ERP, versão ou conector disponível já oferece estas garantias.

O custo da duplicação muda conforme o teu trabalho

Num armazém, uma encomenda repetida pode originar uma segunda tarefa de preparação. Mesmo que alguém detete o erro antes da expedição, já houve tempo gasto a separar material ou a desfazer reservas. O teste deve acompanhar a encomenda até à tarefa que ela desencadeia, não terminar quando o chat responde.

Num laboratório de calibração, a confirmação de um serviço pode abrir um processo de trabalho associado a equipamentos concretos. Receber outra vez a mesma confirmação não deve criar um segundo processo para a mesma operação. Dois serviços efetivamente encomendados continuam, naturalmente, a precisar de identidades diferentes.

Na saúde ou num lar, considera um pedido autorizado de consumíveis à farmácia ou ao fornecedor. Uma confirmação repetida não deve duplicar a requisição. Isto não autoriza um assistente a alterar medicação ou a executar decisões clínicas; o exemplo limita-se ao circuito de aprovisionamento e às suas permissões.

Na faturação eletrónica, quando o processo inclui emissão, uma resposta perdida não permite concluir que o documento não existe. Antes de repetir a operação, tens de consultar e reconciliar o resultado pelos mecanismos do sistema aplicável. Um identificador de conversa não substitui a identidade documental nem as regras fiscais.

Nos quatro casos, o objetivo é o mesmo: a repetição técnica não pode passar silenciosamente a ser uma nova decisão de negócio.

Operadora de expedição consulta uma lista de preparação num tablet ao lado de uma caixa aberta com os artigos separados

«Mas um bot de 25 euros também recebe pedidos»

Pode receber, organizar a conversa e encaminhar para a equipa. Isso pode ser exatamente o que precisas. O problema começa quando «receber um pedido» é vendido ou entendido como «executar uma encomenda segura no ERP».

Na oferta publicada pela 3HASH em junho de 2026, o conjunto site e WhatsApp soma 25 euros por mês, com IVA incluído, e tem 100 euros de configuração. A página descreve respostas, recolha de contactos e encaminhamento. Não especifica uma integração ERP nesse pacote. A mesma empresa anuncia integrações empresariais noutra oferta, sob consulta. Não seria correto concluir que não as sabe construir.

Também não seria correto dizer que só a Leiritech conhece este problema. A Agathas, num artigo de outubro de 2026 sobre integração ERP–WhatsApp, já descreve fila e deduplicação. A oportunidade não está em usar uma palavra técnica que ninguém conhece. Está em demonstrar que a proteção funciona no teu ERP, na tua operação e quando a comunicação falha.

O preço mensal, por si só, não prova essa capacidade. Pede o âmbito e o teste. Um assistente de atendimento e uma integração com responsabilidade sobre escritas podem partilhar a janela de chat sem serem o mesmo produto.

O teste que vale mais do que uma resposta bonita

A Black Friday de 2026 é a 27 de novembro, data indicada no Calendarr: a 23 de outubro, faltam 35 dias. Não é uma previsão de tráfego nem uma razão para ligar escritas à pressa. É uma janela para testar antes de dependeres do fluxo.

Num ambiente controlado, sem expedições ou emissão fiscal reais, confirma uma encomenda de teste e entrega duas vezes o mesmo evento. Repete também com as duas entregas em simultâneo. Depois simula a interrupção no ponto mais incómodo: o ERP já gravou, mas a integração ainda não sabe.

O resultado aceitável não é apenas «o bot respondeu uma vez». Deves conseguir seguir a cadeia: evento recebido, operação identificada, tentativa de execução, referência efetiva no ERP e tratamento da repetição. Se o resultado estiver incerto, deve ficar visivelmente pendente, sem nova criação automática.

Consulta também os efeitos seguintes. Uma encomenda única com duas tarefas de preparação continua a ser uma falha. E faz o teste inverso: duas compras legítimas com conteúdo igual têm de continuar a produzir duas operações distintas.

A auditoria deve permitir reconstruir o que aconteceu, com identificadores, estados, instantes e autorizações relevantes. Não exige guardar indefinidamente conversas completas nem expor dados pessoais a quem não precisa deles. Exige prova suficiente para distinguir uma repetição evitada de um pedido perdido.

Envia para hello@leiritech.com o nome e a versão do teu ERP e a operação que queres ligar ao WhatsApp. O próximo passo é definir um teste de repetição controlado: duas entregas da mesma confirmação, uma só encomenda e um registo que explique porquê.

Escrito por

Equipa Leiritech

A equipa Leiritech — a construir software com inteligência artificial a partir de Leiria, Portugal.

Deixe um comentário

O seu endereço de email não será publicado.