--- name: WhatsApp Chat - Responder, Apagar, Editar description: Features de responder mensagem (quoted), apagar para mim/todos e editar, via micro-server 8001. Implementado 2026-04-24. type: project originSessionId: 717f106c-cb9a-4b0e-bbff-97d35eddf122 --- # WhatsApp Chat - Quoted Reply + Apagar + Editar (2026-04-24) ## Arquitetura Evitou mexer na API TSeD principal (porta 8000, compartilhada com outras sessoes). **Todos os endpoints novos foram adicionados no micro-server Express da porta 8001** que ja existia em `/root/api-teste2/dist/index.js`. ## Endpoints adicionados em /root/api-teste2/dist/index.js (porta 8001) - `POST /message/:instance_key/delete` — revoke (apagar para todos) - `POST /message/:instance_key/edit` — editar mensagem ja enviada - `POST /message/:instance_key/reply` — responder citando mensagem Acessam `instances[key].instance.socket.sendMessage(jid, { delete/edit/text+quoted })`. Backup original em `/root/api-teste2/dist/index.js.bak_20260424_*`. ## Schema DB (whatsapp_messages) Colunas adicionadas: - `deleted_for_me TINYINT(1)` — soft-hide so no sistema - `deleted_for_all TINYINT(1)` — revoked no WhatsApp - `edited TINYINT(1)` + `edited_at DATETIME` - `quoted_message_id VARCHAR(100)` — stanzaId citado - `quoted_text VARCHAR(500)` — preview do citado - `quoted_from_me TINYINT(1)` - `quoted_sender_name VARCHAR(100)` — (nao usado ainda) `filtroConversa()` do Model ja exclui `deleted_for_me=1`. ## Webhook (app/Controllers/WhatsApp.php) - Captura `contextInfo.stanzaId`/`quotedMessage` e salva nas colunas quoted - `protocolMessage` type=0 (REVOKE): atualiza `deleted_for_all=1` em vez de ignorar - `editedMessage`: faz UPDATE da mensagem existente (edited=1) em vez de INSERT - Metadata-only types (messageContextInfo, senderKeyDistributionMessage, stickerSyncRmrMessage, keepInChatMessage, encReactionMessage) continuam ignorados ## Endpoints PHP (app/Controllers/WhatsAppChat.php) - `POST /whatsapp-chat/responder` → responderMensagem (body: phone_number, message, quoted_id) - `POST /whatsapp-chat/apagar-mensagem` → apagarMensagem (body: message_id, modo=me|all) - `POST /whatsapp-chat/editar-mensagem` → editarMensagem (body: message_id, novo_texto) Regras: - Editar: so outgoing, so text, so com whatsapp_message_id, ate 15min apos envio - Apagar para todos: so outgoing, so com whatsapp_message_id - Apagar para mim: qualquer mensagem ## UI (app/Views/whatsapp_chat/index.php) - Menu 3 pontinhos (`.wa-msg-menu-btn`) aparece no hover da mensagem - Opcoes: Responder, Editar (se outgoing+text+15min), Apagar para mim, Apagar para todos (se outgoing) - Preview de citacao em cima do input (`#replyPreview`) - Bloco citado dentro da bolha (`.wa-msg-quoted`) - clicavel para rolar ate original - `(editada)` ao lado da hora para msgs editadas - `Esta mensagem foi apagada` no lugar do conteudo quando deleted_for_all - SweetAlert2 para confirmacoes ## Limitacoes conhecidas - WhatsApp so permite editar ate 15min apos envio (limite imposto pelo proprio WA) - Apagar para todos so funciona em mensagens proprias (outgoing) com whatsapp_message_id salvo - Responder (quoted) nao suporta midia ainda — so texto (mas preserva o quote em cima de qualquer tipo)