diff --git a/docs/wiki/guias-api/api-messages.md b/docs/wiki/guias-api/api-messages.md index 394c17e..ceb7456 100644 --- a/docs/wiki/guias-api/api-messages.md +++ b/docs/wiki/guias-api/api-messages.md @@ -894,8 +894,10 @@ Deleta uma mensagem para todos (revoke). **Body**: ```json { - "chat": "5511999999999@s.whatsapp.net", - "messageId": "3EB0C5A277F7F9B6C599" + "chat": "120363XXXXXXXXXX@g.us", + "messageId": "3EB0C5A277F7F9B6C599", + "fromMe": false, + "participant": "5511888888888@s.whatsapp.net" } ``` @@ -905,8 +907,13 @@ Deleta uma mensagem para todos (revoke). |-------|------|-------------|-----------| | `chat` | string | ✅ Sim | JID do chat | | `messageId` | string | ✅ Sim | ID da mensagem a deletar | +| `fromMe` | bool | ❌ Não | Se a mensagem foi enviada por você (padrão: true) | +| `participant` | string | ❌ Não | JID do autor (obrigatório se fromMe=false em grupos) | -**Nota**: Só é possível deletar mensagens enviadas por você. O WhatsApp tem limite de tempo para deletar mensagens (geralmente até 1 hora). +**Nota**: +- Para deletar suas próprias mensagens, use `fromMe: true` (ou omita). +- Para deletar mensagens de **outros usuários** (Admin Revoke), você deve ser **administrador** do grupo e passar `fromMe: false` e o `participant` (JID do autor). +- O WhatsApp tem um limite de tempo para deletar suas próprias mensagens (geralmente ~2 dias), mas admins podem deletar mensagens de outros a qualquer momento. **Resposta de Sucesso (200)**: ```json @@ -921,6 +928,7 @@ Deleta uma mensagem para todos (revoke). **Exemplo cURL**: ```bash +# Deletar sua própria mensagem curl -X POST http://localhost:4000/message/delete \ -H "Content-Type: application/json" \ -H "apikey: SUA-CHAVE-API" \ @@ -928,6 +936,17 @@ curl -X POST http://localhost:4000/message/delete \ "chat": "5511999999999@s.whatsapp.net", "messageId": "3EB0C5A277F7F9B6C599" }' + +# Deletar mensagem de outro (Admin Revoke) +curl -X POST http://localhost:4000/message/delete \ + -H "Content-Type: application/json" \ + -H "apikey: SUA-CHAVE-API" \ + -d '{ + "chat": "120363XXXXXXXXXX@g.us", + "messageId": "3EB0C5A277F7F9B6C599", + "fromMe": false, + "participant": "5511888888888@s.whatsapp.net" + }' ``` --- diff --git a/pkg/message/service/message_service.go b/pkg/message/service/message_service.go index 36ffb68..2ecc2c5 100644 --- a/pkg/message/service/message_service.go +++ b/pkg/message/service/message_service.go @@ -68,8 +68,10 @@ type MessageStatusStruct struct { } type MessageStruct struct { - Chat string `json:"chat"` - MessageID string `json:"messageId"` + Chat string `json:"chat"` + MessageID string `json:"messageId"` + FromMe *bool `json:"fromMe"` + Participant string `json:"participant,omitempty"` } type EditMessageStruct struct { @@ -376,12 +378,27 @@ func (m *messageService) DeleteMessageEveryone(data *MessageStruct, instance *in return "", "", errors.New("invalid phone number") } + var senderJID types.JID + if data.FromMe == nil || *data.FromMe { + senderJID = types.EmptyJID + } else { + if data.Participant == "" { + return "", "", errors.New("participant is required to delete a message from another user") + } + parsedJID, ok := utils.ParseJID(data.Participant) + if !ok { + m.loggerWrapper.GetLogger(instance.Id).LogError("[%s] Error parsing participant JID for non-FromMe message: %s", instance.Id, data.Participant) + return "", "", errors.New("invalid participant JID") + } + senderJID = parsedJID + } + m.loggerWrapper.GetLogger(instance.Id).LogInfo("Revoking message %s from %s", data.MessageID, recipient) resp, err := client.SendMessage( context.Background(), recipient, - client.BuildRevoke(recipient, types.EmptyJID, data.MessageID)) + client.BuildRevoke(recipient, senderJID, data.MessageID)) if err != nil { m.loggerWrapper.GetLogger(instance.Id).LogError("[%s] error revoking message: %v", instance.Id, err) return "", "", err