From 5b8eae6baabee661743633419b262f9dbf11ba96 Mon Sep 17 00:00:00 2001 From: josedario87 Date: Thu, 4 Dec 2025 15:13:57 -0600 Subject: [PATCH] Feat: Agregar opcion para eliminar chats completamente - Crear endpoint DELETE /api/messages/:instanceId/:chatId - Agregar boton de eliminar en ChatItem - Crear modal de confirmacion con advertencia - Elimina el chat y todos los mensajes relacionados (CASCADE) - Muestra cantidad de mensajes eliminados en notificacion --- README.md | 180 +++++++++++++++++- app/components/messages/ChatItem.vue | 9 + app/pages/messages/index.vue | 103 ++++++++++ .../[instanceId]/[chatId]/index.delete.ts | 72 +++++++ 4 files changed, 354 insertions(+), 10 deletions(-) create mode 100644 server/api/messages/[instanceId]/[chatId]/index.delete.ts diff --git a/README.md b/README.md index 0ff4c3b..a480ee1 100644 --- a/README.md +++ b/README.md @@ -33,21 +33,181 @@ node .output/server/index.mjs --- -## API Endpoints +## API REST + +### Autenticación + +Todos los endpoints requieren autenticación mediante API Key: + +``` +Authorization: Bearer +``` ### Instancias -- `GET /api/instances` - Lista instancias -- `POST /api/instances` - Crear instancia -- `POST /api/instances/:id/connect` - Conectar instancia -- `POST /api/instances/:id/disconnect` - Desconectar + +| Método | Endpoint | Descripción | +|--------|----------|-------------| +| GET | `/api/instances` | Listar todas las instancias | +| POST | `/api/instances` | Crear nueva instancia | +| GET | `/api/instances/:id` | Obtener detalles de instancia | +| GET | `/api/instances/:id/qr` | Obtener código QR | +| POST | `/api/instances/:id/connect` | Conectar instancia | +| POST | `/api/instances/:id/disconnect` | Desconectar instancia | +| DELETE | `/api/instances/:id` | Eliminar instancia | + +**Ejemplo - Listar instancias:** +```bash +curl -X GET "https://whatsapp.nucleoriofrio.com/api/instances" \ + -H "Authorization: Bearer " +``` + +**Ejemplo - Crear instancia:** +```bash +curl -X POST "https://whatsapp.nucleoriofrio.com/api/instances" \ + -H "Authorization: Bearer " \ + -H "Content-Type: application/json" \ + -d '{"name": "Mi WhatsApp"}' +``` + +### Chats y Contactos + +| Método | Endpoint | Descripción | +|--------|----------|-------------| +| GET | `/api/messages/:instanceId/chats` | Listar todos los chats | +| POST | `/api/messages/:instanceId/new-chat` | Crear nuevo chat | + +**Ejemplo - Listar chats:** +```bash +curl -X GET "https://whatsapp.nucleoriofrio.com/api/messages/{instanceId}/chats" \ + -H "Authorization: Bearer " +``` + +**Respuesta:** +```json +[ + { + "id": "abc123", + "jid": "5491155551234@s.whatsapp.net", + "name": "Juan Pérez", + "isGroup": false, + "unreadCount": 2, + "lastMessageAt": "2025-01-15T10:30:00Z" + } +] +``` ### Mensajes -- `POST /api/messages/:instanceId/:chatId/send` - Enviar mensaje -- `GET /api/messages/:instanceId/:chatId` - Obtener mensajes -- `POST /api/messages/:instanceId/react` - Reaccionar a mensaje -### MCP -- `POST /api/mcp` - Endpoint JSON-RPC para agentes IA +| Método | Endpoint | Descripción | +|--------|----------|-------------| +| GET | `/api/messages/:instanceId/:chatId` | Obtener mensajes del chat | +| POST | `/api/messages/send` | Enviar mensaje (simple) | +| POST | `/api/messages/:instanceId/:chatId/send` | Enviar mensaje (avanzado) | + +**Ejemplo - Obtener mensajes:** +```bash +curl -X GET "https://whatsapp.nucleoriofrio.com/api/messages/{instanceId}/{chatId}?limit=50" \ + -H "Authorization: Bearer " +``` + +**Ejemplo - Enviar mensaje de texto:** +```bash +curl -X POST "https://whatsapp.nucleoriofrio.com/api/messages/send" \ + -H "Authorization: Bearer " \ + -H "Content-Type: application/json" \ + -d '{ + "instanceId": "inst_abc123", + "to": "5491155551234", + "message": "Hola! Este es un mensaje de prueba" + }' +``` + +**Ejemplo - Enviar imagen:** +```bash +curl -X POST "https://whatsapp.nucleoriofrio.com/api/messages/{instanceId}/{chatId}/send" \ + -H "Authorization: Bearer " \ + -F "file=@imagen.jpg" \ + -F "caption=Descripción de la imagen" +``` + +**Ejemplo - Enviar documento:** +```bash +curl -X POST "https://whatsapp.nucleoriofrio.com/api/messages/{instanceId}/{chatId}/send" \ + -H "Authorization: Bearer " \ + -F "file=@documento.pdf" \ + -F "caption=Reporte mensual" +``` + +**Ejemplo - Enviar contacto:** +```bash +curl -X POST "https://whatsapp.nucleoriofrio.com/api/messages/{instanceId}/{chatId}/send" \ + -H "Authorization: Bearer " \ + -H "Content-Type: application/json" \ + -d '{ + "type": "contact", + "contacts": [{ + "displayName": "Juan Pérez", + "phoneNumber": "+5491155551234" + }] + }' +``` + +**Ejemplo - Enviar encuesta:** +```bash +curl -X POST "https://whatsapp.nucleoriofrio.com/api/messages/{instanceId}/{chatId}/send" \ + -H "Authorization: Bearer " \ + -H "Content-Type: application/json" \ + -d '{ + "type": "poll", + "name": "¿Qué día prefieres?", + "options": ["Lunes", "Martes", "Miércoles"], + "selectableCount": 1 + }' +``` + +### Reacciones + +**Ejemplo - Reaccionar a mensaje:** +```bash +curl -X POST "https://whatsapp.nucleoriofrio.com/api/messages/{instanceId}/react" \ + -H "Authorization: Bearer " \ + -H "Content-Type: application/json" \ + -d '{ + "messageId": "3EB0A1B2C3D4E5F6", + "emoji": "👍" + }' +``` + +**Quitar reacción:** enviar `emoji` como string vacío `""` + +### Formato de Destinatarios (JID) + +- **Contacto individual:** `5491155551234@s.whatsapp.net` (código país sin +) +- **Grupo:** `123456789012345678@g.us` + +### Tipos de Mensaje Soportados + +| Tipo | Descripción | +|------|-------------| +| `text` | Mensaje de texto | +| `image` | Imagen con caption opcional | +| `video` | Video con caption opcional | +| `audio` | Audio o nota de voz | +| `document` | Documento/archivo | +| `sticker` | Sticker | +| `contact` | Tarjeta de contacto | +| `poll` | Encuesta (2-12 opciones) | +| `event` | Evento con fecha/ubicación | + +### Límites de Archivos + +| Tipo | Tamaño Máximo | +|------|---------------| +| Imagen | 16 MB | +| Video | 64 MB | +| Audio | 16 MB | +| Documento | 100 MB | +| Sticker | 500 KB | --- diff --git a/app/components/messages/ChatItem.vue b/app/components/messages/ChatItem.vue index f47ca97..d7bebb0 100644 --- a/app/components/messages/ChatItem.vue +++ b/app/components/messages/ChatItem.vue @@ -32,6 +32,14 @@ > + +