Durante o desenvolvimento do Engenhoso AI, encontrei um daqueles problemas que parecem simples quando descritos em uma frase:
uma mensagem era enviada, o sistema aparentemente funcionava, mas o destinatário nem sempre recebia a resposta como esperado.
Mas sistemas distribuídos raramente respondem bem a perguntas excessivamente simples.
Uma mensagem que atravessa WhatsApp, webhook, aplicação, modelo de inteligência artificial e novamente a infraestrutura de mensageria não percorre um único caminho.
Nos logs do serviço que hospeda o webhook do Engenhoso AI, as requisições apareciam normalmente:
Um 200 OK apenas informava que determinada requisição havia sido recebida e tratada pelo endpoint.
era uma mensagem enviada pelo usuário? era apenas uma atualização de status da Meta? a aplicação chamou a OpenAI? a resposta foi gerada? a Meta aceitou a resposta para envio? a mensagem chegou ao telefone do destinatário? ela foi lida?
Foi então que uma distinção aparentemente simples se tornou central para o diagnóstico:
Webhook recebeu ≠ IA respondeu ≠ Meta aceitou ≠ mensagem foi entregue ≠ mensagem foi lida
Em software, duas etapas consecutivas podem parecer uma coisa só quando não temos instrumentos para observá-las.
O Engenhoso AI possui alguns comandos locais que não dependem de geração por inteligência artificial.
A mensagem chegou ao webhook, foi reconhecida e o menu foi devolvido ao usuário.
Durante parte da investigação, o painel da API permaneceu mostrando o mesmo número de solicitações.
O que havia ocorrido era uma diferença temporal entre o acontecimento dentro da aplicação e a atualização que eu observava no painel.
um painel de uso é uma ferramenta de observação, mas não deve ser confundido automaticamente com um log em tempo real da aplicação.
Quando investigamos um sistema distribuído, precisamos saber exatamente o que cada instrumento mede.
O projeto estava configurado para utilizar um modelo definido por variável de ambiente.
Ou seja, o cliente não estava realizando sucessivas tentativas automáticas capazes de explicar sozinho uma espera de vários minutos.
