evolution-api icon indicating copy to clipboard operation
evolution-api copied to clipboard

Fix Typebot message routing for @lid JIDs

Open lucascampuus opened this issue 1 month ago • 1 comments

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.

📋 Description

🔗 Related Issue

Closes #(issue_number)

🧪 Type of Change

  • [x] 🐛 Bug fix (non-breaking change which fixes an issue)
  • [ ] ✨ New feature (non-breaking change which adds functionality)
  • [ ] 💥 Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • [ ] 📚 Documentation update
  • [ ] 🔧 Refactoring (no functional changes)
  • [ ] ⚡ Performance improvement
  • [ ] 🧹 Code cleanup
  • [ ] 🔒 Security fix

🧪 Testing

  • [ ] Manual testing completed
  • [ ] Functionality verified in development environment
  • [ ] No breaking changes introduced
  • [ ] Tested with different connection types (if applicable)

📸 Screenshots (if applicable)

✅ Checklist

  • [x] My code follows the project's style guidelines
  • [x] I have performed a self-review of my code
  • [ ] I have commented my code, particularly in hard-to-understand areas
  • [ ] I have made corresponding changes to the documentation
  • [ ] My changes generate no new warnings
  • [ ] I have manually tested my changes thoroughly
  • [ ] I have verified the changes work with different scenarios
  • [ ] Any dependent changes have been merged and published

📝 Additional Notes

Summary by Sourcery

Bug Fixes:

  • Fix Typebot not responding to messages when the WhatsApp JID ends with @lid by preserving the full JID for those cases.

lucascampuus avatar Nov 27 '25 12:11 lucascampuus

Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

Adjusts Typebot WhatsApp routing so that messages from JIDs ending with '@lid' are handled correctly by preserving the full JID instead of stripping the suffix, while keeping the existing behavior for '@s.whatsapp.net' JIDs.

Sequence diagram for WhatsApp JID handling in BaseChatbotService

sequenceDiagram
  actor User
  participant WhatsAppClient
  participant WhatsAppBackend
  participant BaseChatbotService
  participant WhatsappInstance

  User->>WhatsAppClient: Send media or text message
  WhatsAppClient->>WhatsAppBackend: Deliver message
  WhatsAppBackend->>BaseChatbotService: webhook with remoteJid

  alt JID_ends_with_lid
    BaseChatbotService->>BaseChatbotService: number = remoteJid
    BaseChatbotService->>WhatsappInstance: audioWhatsapp_or_mediaMessage_or_textMessage(number)
  else Standard_JID_s_whatsapp_net
    BaseChatbotService->>BaseChatbotService: number = remoteJid_split_at_at_index_0
    BaseChatbotService->>WhatsappInstance: audioWhatsapp_or_mediaMessage_or_textMessage(number)
  end

  WhatsappInstance-->>WhatsAppBackend: Dispatch reply
  WhatsAppBackend-->>WhatsAppClient: Deliver reply
  WhatsAppClient-->>User: Show Typebot response

Flow diagram for number extraction from remoteJid

flowchart TD
  A[Receive_message_with_remoteJid] --> B{remoteJid_includes_lid}
  B -->|yes| C[Set_number_to_remoteJid]
  B -->|no| D[Set_number_to_remoteJid_split_at_at_index_0]
  C --> E[Call_instance_method_with_number]
  D --> E[Call_instance_method_with_number]

File-Level Changes

Change Details Files
Update WhatsApp number extraction logic to preserve full JID for '@lid' senders while keeping legacy behavior for other JIDs.
  • Replace unconditional remoteJid.split('@')[0] extraction with a conditional that returns the full remoteJid when it includes '@lid' and otherwise keeps the previous split-based behavior for number.
  • Apply the updated number extraction logic consistently across audio message sending, media message sending, and text message sending paths so Typebot responds to both '@s.whatsapp.net' and '@lid' JIDs.
src/api/integrations/chatbot/base-chatbot.service.ts

Possibly linked issues

  • #[Bug] Typebot fails to send messages to users with LID - BadRequestException jidOptions.exists false: PR changes number extraction to keep full @lid JIDs, exactly matching the bug’s proposed Option 2 fix.
  • #Erro com alguns números: PR updates number extraction for @lid JIDs, directly addressing Typebot failures described with @lid numbers

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an issue from a review comment by replying to it. You can also reply to a review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull request title to generate a title at any time. You can also comment @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in the pull request body to generate a PR summary at any time exactly where you want it. You can also comment @sourcery-ai summary on the pull request to (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the pull request to resolve all Sourcery comments. Useful if you've already addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull request to dismiss all existing Sourcery reviews. Especially useful if you want to start fresh with a new review - don't forget to comment @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

  • Contact our support team for questions or feedback.
  • Visit our documentation for detailed guides and information.
  • Keep in touch with the Sourcery team by following us on X/Twitter, LinkedIn or GitHub.

sourcery-ai[bot] avatar Nov 27 '25 12:11 sourcery-ai[bot]

Bom dia!

Com essa alteração, a API está enviando de forma correta o telefone para o typebot ? Pois preciso obter o número do telefone do usuário lá no fluxo do typebot...

matheusagnes avatar Dec 01 '25 13:12 matheusagnes

Bom dia!

Com essa alteração, a API está enviando de forma correta o telefone para o typebot ? Pois preciso obter o número do telefone do usuário lá no fluxo do typebot...

Positivo.

lucascampuus avatar Dec 01 '25 14:12 lucascampuus

Please, fix the lint with npm run lint

DavidsonGomes avatar Dec 05 '25 13:12 DavidsonGomes