Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 22 additions & 3 deletions docs/wiki/guias-api/api-messages.md
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
```

Expand All @@ -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
Expand All @@ -921,13 +928,25 @@ 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" \
-d '{
"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"
}'
```

---
Expand Down
23 changes: 20 additions & 3 deletions pkg/message/service/message_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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
Expand Down