Closed TiagoGouvea closed 1 month ago
@TiagoGouvea, estas duas opções fazem coisas distintas. A opção read_messages
faz a leitura de uma mensagem assim que ela é recebida pela evo (mensagem diretas entre usuários ou grupos, etç...).
Já a outra opção read_status
faz a leitura de mensagens do tipo status (aquelas que ficam numa área diferente dentro do app do WhatsApp. Na versão mais recente fica dentro da área "Atualizações").
A key status@broadcast
simboliza uma mensagem do tipo status, por isso que tem este filtro nestas duas condições.
Obrigado pela resposta @jaison-x .
Existe uma forma de marcar a mensagem como recebida (dois checks cinzas) automaticamente (ou via código)?
Sei que posso marcar como lida, mas no meu caso, preciso ter dois status: recebida (dois checks) e lida (dois checks azuis), porém, não encontrei como fazer isso com o Evolution.
Pode me ajudar?
Obrigado pela resposta @jaison-x .
Existe uma forma de marcar a mensagem como recebida (dois checks cinzas) automaticamente (ou via código)?
Sei que posso marcar como lida, mas no meu caso, preciso ter dois status: recebida (dois checks) e lida (dois checks azuis), porém, não encontrei como fazer isso com o Evolution.
Pode me ajudar?
Você tem o evento "message.update" onde recebe os parametros pra gerenciar o recebido e lido da mensagem
Obrigado pela resposta @kodiyak . Mas não entendi exatamente como fazer isso. Tem algum exemplo na documentação de como lidar com os dois estados separadamente?
O objeto que recebo no message.update
é este:
{
event: 'messages.upsert',
instance: 'tiago-dev',
data: {
key: {
remoteJid: '55328....@s.whatsapp.net',
fromMe: false,
id: '3A6C552BB7E9E'
},
pushName: 'Tiago Gouvêa',
message: {
conversation: 'oi',
messageContextInfo: {
deviceListMetadata: {
senderKeyHash: 'PcQUE26..',
senderTimestamp: '1710935366',
recipientKeyHash: '1YpgO9b...',
recipientTimestamp: '1712053417'
},
deviceListMetadataVersion: 2
}
},
messageType: 'conversation',
messageTimestamp: 1712053869,
owner: 'tiago-dev',
source: 'ios'
},
server_url: 'http://localhost:8080',
date_time: '2024-04-02T07:31:09.608Z',
sender: '5532....@s.whatsapp.net',
apikey: 'wqv....'
}
Eu já vi que tem {{baseUrl}}/chat/markMessageAsRead/{{instance}}
, mas, eu queria controlar que 1 - recebi (dois ticks), 2 - li (dois ticks azuis).
Como emitir estes dois status pelo código?
@TiagoGouvea quando você recebe o evento message.update
via webhook, o formato dos dados é mais ou menos este:
{
local: 'WAStartupService.sendDataWebhook-global',
url: '...',
event: 'messages.update',
instance: 'd57ce9fb-f0d8-466e-8c04-83b7f5af6225',
data: {
remoteJid: 'XXXXXXXXXXXX:XX@s.whatsapp.net', // Usuário que emitiu o evento
id: 'BAE578D31203C27F', // ID da mensagem
fromMe: true, // Uma mensagem que foi enviada por você
participant: undefined,
status: 'DELIVERY_ACK', // Status: DELIVERY_ACK | READ
datetime: 1712083045414,
owner: 'd57ce9fb-f0d8-466e-8c04-83b7f5af6225',
pollUpdates: undefined
},
destination: undefined,
date_time: '2024-04-02T15:37:25.417Z',
sender: '5511991174114@s.whatsapp.net',
server_url: 'localhost'
}
O lance está no status deste evento:
Quando for DELIVERY_ACK
significa que foi entregue ao usuário
Quando for READ
significa que o usuário leu sua mensagem
Você pode trabalhar com o gerenciamento desses status
Foi criado o endpoint para marcar chats como não lidos, esta em develop atualmente
Describe the bug
Na interface do manager tem duas opções "Marcar mensagens como lidas" e "Marcar status como visto" que na API fazem a mesma coisa:
Link para o código
Acredito que um input seria "Marcar mensagens como recebidas", que apenas deixa dois "checks", e o outro "Marcar mensagens como lidas" que deixa os dois checks azuis.
Additional context
Até tentei encontrar onde no baileys ele faz isso, mas não tive 100% de certeza.. mas parece que deveria ser atualizar o status da mensagem para
DELIVERY_ACK
.