Updated DecryptPollVoteDto to use a nested message.key structure and moved remoteJid to the top level. Adjusted the controller and validation schema to match the new structure for consistency and clarity.
Introduces a new API endpoint and supporting logic to decrypt WhatsApp poll votes. Adds DecryptPollVoteDto, validation schema, controller method, and service logic to process and aggregate poll vote results based on poll creation message key.
Refactor message handling and polling updates, including decryption logic for poll votes and cache management for message updates. Improved event processing flow and added handling for various message types.
O Typebot não respondia mensagens vindas de JIDs que terminam com "@lid", apenas "@s.whatsapp.net".
O comportamento ocorria porque o número era sempre extraído via:
remoteJid.split('@')[0]
Com a atualização do WhatsApp Web, algumas mensagens de mídia chegam com JID "@lid", e nesses casos o JID completo precisa ser mantido.
Ajuste realizado:
ANTES:
number: remoteJid.split('@')[0]
DEPOIS:
number: remoteJid.includes('@lid') ? remoteJid : remoteJid.split('@')[0]
Com essa condição, mensagens vindas de ambos os formatos passam a ser tratadas corretamente pelo Typebot.
- Use (extra ?? {}) to handle undefined extra safely
- Spread extra first to prevent overriding core fields like event, instance, data
- Applied fix to all 7 event controllers
Addresses Sourcery AI review feedback.
- Add extra field to EmitData type for additional payload properties
- Update EventManager and sendDataWebhook to support extra parameters
- Update all event controllers (webhook, rabbitmq, sqs, websocket, pusher, kafka, nats) to include extra fields in payload
- Pass isLatest and progress from Baileys messaging-history.set to messages.set webhook
This allows consumers to know when the history sync is complete (isLatest=true) and track sync progress percentage.
Mensagens do WhatsApp estavam sendo perdidas e não eram salvas no banco de dados, especialmente mensagens de canais/newsletters (@lid) e mensagens com criptografia complexa.
O WhatsApp/Baileys envia mensagens criptografadas em duas etapas:
1. Primeiro: Envia um stub (placeholder) com messageStubParameters: ['Message absent from node'] enquanto descriptografa a mensagem
2. Depois: Envia a mensagem real com o conteúdo descriptografado
O problema ocorria porque:
- O stub chegava primeiro e era adicionado ao cache de mensagens duplicadas
- O stub era descartado (corretamente) por não ter conteúdo (!received?.message)
- A mensagem real chegava depois, mas era ignorada como duplicata porque o ID já estava no cache
- Resultado: mensagem nunca era salva no banco de dados
Solução:
- Detectar stubs do WhatsApp através de messageStubParameters contendo 'Message absent from node'
- Não adicionar stubs ao cache de mensagens duplicadas
- Permitir que a mensagem real seja processada quando chegar
- Manter o descarte do stub para evitar salvar placeholders vazios
- Upgraded baileys to version 7.0.0-rc.9 in package.json and package-lock.json.
- Updated AWS SDK packages to version 3.936.0 for improved functionality and compatibility.
- Adjusted various dependencies to ensure stability and performance enhancements.
- Added missing conditional checks for `DATABASE_SAVE_DATA_CONTACTS` in `contacts.upsert` and `contacts.update` handlers.
- Fixed an issue where profile picture updates were attempting to save to the database even when disabled.
- Fixed an unawaited promise in `contacts.upsert` to ensure database operations complete correctly.
- Updated baileys to version 7.0.0-rc.8 in package.json and package-lock.json.
- Downgraded AWS SDK packages to specific versions for compatibility.
- Adjusted various dependencies to maintain stability and performance.