Parent issue
Reported during QA session
What's wrong
Quando uma mensagem chega via webhook do Pastorini para a conversa atualmente aberta, ela é adicionada ao array global messages da store sem verificar se pertence à conversa ativa. Isso causa dois problemas combinados:
- Mensagens destinadas a outra conversa aparecem na janela de chat atual (contaminação cruzada)
- Mensagens recebidas para uma nova conversa (contato ainda não listado) são adicionadas ao array que será limpo ao selecionar qualquer outra conversa — a mensagem some
O campo direction é corretamente definido no backend (inbound/outbound), então quando a mensagem errada aparece em outra conversa, o alinhamento também fica inconsistente com o contexto.
What I expected
Mensagens recebidas via WebSocket devem aparecer apenas na conversa à qual pertencem. Se a conversa não estiver ativa, apenas os metadados da conversa (unread_count, last_message_at) devem ser atualizados.
Steps to reproduce
- Abrir o ISing e selecionar a conversa com o contato A
- Enviar uma mensagem do WhatsApp de um contato B (diferente) para o número conectado
- Observar que a mensagem de B aparece na janela de chat de A
Additional context
A função addMessage na store checa deduplicação por message.id, mas não filtra pelo activeConversation antes de inserir no array messages. A verificação de qual conversa pertence a mensagem (from_jid/to_jid vs activeConversation.contact.jid) precisa ser feita antes do set({ messages: [...messages, message] }).
Blocked by: None — can start immediately
Parent issue
Reported during QA session
What's wrong
Quando uma mensagem chega via webhook do Pastorini para a conversa atualmente aberta, ela é adicionada ao array global
messagesda store sem verificar se pertence à conversa ativa. Isso causa dois problemas combinados:O campo
directioné corretamente definido no backend (inbound/outbound), então quando a mensagem errada aparece em outra conversa, o alinhamento também fica inconsistente com o contexto.What I expected
Mensagens recebidas via WebSocket devem aparecer apenas na conversa à qual pertencem. Se a conversa não estiver ativa, apenas os metadados da conversa (unread_count, last_message_at) devem ser atualizados.
Steps to reproduce
Additional context
A função
addMessagena store checa deduplicação pormessage.id, mas não filtra peloactiveConversationantes de inserir no arraymessages. A verificação de qual conversa pertence a mensagem (from_jid/to_jidvsactiveConversation.contact.jid) precisa ser feita antes doset({ messages: [...messages, message] }).Blocked by: None — can start immediately