Commit Graph

101 Commits

Author SHA1 Message Date
b8541503f1 Style: Actualizar widget de chat a nuevo estilo flotante
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m7s
- Usar contenedor .floating-widget como en la implementación de referencia
- El web component ahora maneja internamente el botón flotante y ventana de chat
- Aplicar color primario de WhatsApp (#25D366) via CSS variable --chat-primary
2025-12-10 16:38:08 -06:00
cc62153393 Fix: Usar UUID correcto del agente de WhatsApp
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m0s
2025-12-10 12:57:01 -06:00
f6ed5a1032 Fix: Corregir integración del widget de chat
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m3s
- Usar nombre correcto del web component: chat-widget (no agents-chat-widget)
- Usar atributos correctos: api-url, agent-id, user-id (no server-url, agent-slug, external-user-id)
- Insertar widget dinámicamente en el DOM con posición flotante
2025-12-10 12:39:20 -06:00
e7cf999da2 Feat: Integrar widget de chat de agentes
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m39s
- Agregar script externo del widget desde gamdias.nucleoriofrio.com
- Crear plugin client-side para inicializar AgentsChatWidget
- Configurar widget con tema dark y color WhatsApp (#25D366)
- Usuario único whatsapp-user para todas las conversaciones
2025-12-10 12:32:56 -06:00
9a7f270e3f Sec: Restringir CORS a dominios autorizados
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m8s
Solo permite origenes de:
- *.nucleoriofrio.com (produccion)
- localhost:* (desarrollo)

Esto mejora la seguridad al no aceptar solicitudes
de cualquier origen arbitrario.
2025-12-04 17:39:27 -06:00
6ba9dee293 Feat: Middleware CORS para manejar preflight requests
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m8s
El problema era que Authentik interceptaba las solicitudes OPTIONS
antes de llegar a la app. Ahora el middleware 00.cors.ts:
- Se ejecuta antes de 01.api-auth.ts
- Responde OPTIONS con 204 y headers CORS
- Permite solicitudes cross-origin desde cualquier dominio
2025-12-04 16:49:20 -06:00
939cc8e08c Feat: Agregar CORS para endpoints de API externa
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 4m20s
Configura headers CORS en nuxt.config.ts para permitir
llamadas desde otros orígenes a:
- /api/messages/send
- /api/mcp

Esto permite que aplicaciones externas como el sistema
de asistencia puedan enviar mensajes de WhatsApp.
2025-12-04 16:42:05 -06:00
0edec1e975 Docs: Documentar API REST con endpoints de API Key
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m10s
- Agregar tabla resumen de endpoints disponibles
- Documentar endpoint principal POST /api/messages/send
- Documentar GET /api/messages/:instanceId/chats para listar contactos
- Documentar GET /api/messages/:instanceId/:chatId con paginación
- Documentar POST /api/messages/:instanceId/react para reacciones
- Eliminar documentación de endpoints OAuth (solo interfaz web)
2025-12-04 16:22:04 -06:00
a848adf4f8 Fix: Preservar alias al recargar lista de chats
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m9s
El endpoint chats.get no retornaba el campo alias, lo que causaba
que al recargar los chats (cuando llega un mensaje nuevo) el alias
se perdiera.

Cambios:
- Agregar alias a la query de chats.get
- Priorizar alias sobre name en la respuesta
- Incluir originalName para referencia en el modal
2025-12-04 16:04:47 -06:00
5b8eae6baa Feat: Agregar opcion para eliminar chats completamente
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m8s
- 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
2025-12-04 15:13:57 -06:00
08964ec18f Feat: Agregar sistema de alias para chats
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m10s
- Agregar campo alias a tabla chats con migración 003
- Crear endpoint PUT /api/messages/:instanceId/:chatId/alias
- Modificar MCP para priorizar alias sobre nombres automáticos
- Crear modal ChatAliasModal para editar alias desde UI
- Agregar botón de editar alias en ChatItem
- Integrar modal en página de mensajes

El alias permite asignar nombres personalizados a chats que tienen
prioridad sobre los nombres de WhatsApp tanto en la interfaz como
en el MCP para agentes IA.
2025-12-04 15:06:46 -06:00
67b54d4ad9 Feat: Sincronizar contactos y grupos, mejorar nombres en MCP
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m8s
- Agregar listeners contacts.upsert y contacts.update
- Agregar listeners groups.upsert y groups.update
- Guardar contactos del historial en messaging-history.set
- Modificar MCP para hacer JOIN con contacts y group_metadata
- Ahora los chats muestran nombres reales en lugar de números/IDs
2025-12-04 14:51:09 -06:00
42f0dcafc1 Fix: Agregar fromMe al key de reacciones para mensajes propios
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m11s
2025-12-04 14:34:15 -06:00
f6a58a4d16 Feat: Agregar middleware global de autenticación API
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m9s
- Valida Bearer token para rutas expuestas (/api/messages/send, /api/mcp)
- Valida x-authentik-username para rutas protegidas por Authentik
- Rutas públicas (/api/health) sin autenticación
- Defensa en profundidad: cualquier endpoint /api/* está protegido
2025-12-04 14:32:18 -06:00
ae4c674a0f Fix: Agregar /api/mcp al router sin Authentik
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m10s
2025-12-04 14:10:46 -06:00
7abad2b6c3 Feat: Agregar MCP Server para agentes IA
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m10s
- Endpoint JSON-RPC 2.0 en /api/mcp
- 8 herramientas: list_instances, list_chats, get_chat, search_chats, send_message, get_messages, react_message, get_guide
- Soporte para todos los tipos de mensaje (text, image, video, audio, document, sticker, contact, poll, event)
- Guías de uso integradas con ejemplos JSON
- Autenticación via NUXT_MASTER_API_KEY
2025-12-04 14:05:27 -06:00
23e78fb0b2 Feat: Agregar botón para iniciar conversación con número nuevo
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m11s
- Nuevo endpoint POST /api/messages/:instanceId/new-chat
- Valida que el número esté registrado en WhatsApp
- Crea el chat en la DB si no existe
- Modal en UI para ingresar número de teléfono
- Botón verde "+" junto a la barra de búsqueda
2025-12-04 12:59:01 -06:00
af5ed0f0c5 Fix: shouldSyncHistoryMessage debe retornar true cuando no hay timestamp
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m9s
El check inicial de Baileys pasa un objeto sin messageTimestamp.
Cuando era undefined, la comparación retornaba false y Baileys
deshabilitaba la sincronización de historial completamente.
2025-12-04 12:38:09 -06:00
32f66c8fe0 Fix: fetchMessageHistory con evento SSE y logs de debug
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m9s
- Agregar logs detallados en /api/debug/history/fetch para diagnosticar
- Emitir evento SSE 'history.synced' cuando llegan mensajes del historial
- Frontend ahora escucha el evento SSE en vez de timeout fijo de 3 segundos
- Agregar script y documentación para referencia de Baileys message history
2025-12-04 12:33:22 -06:00
a9e786a8bd Fix: Envío de eventos usando proto directo (bypass sendMessage)
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m12s
Baileys no maneja 'event' en generateWAMessageContent, causando
"Invalid media type" error. Se usa generateWAMessageFromContent
con proto.Message.IEventMessage y relayMessage directamente.
2025-12-04 12:28:17 -06:00
b0101c791a Fix: Agregar soporte para recepción de Polls y Events
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m8s
- manager.ts: Detectar pollCreationMessage y eventMessage en getMessageType
- manager.ts: Extraer y guardar datos de poll/event como JSON en content
- index.get.ts: Parsear poll/event desde raw_message y content
- index.get.ts: Incluir poll y event en respuesta de la API
2025-12-04 12:14:45 -06:00
cb846d0c56 Feat: Agregar soporte para envío de Contacts, Polls y Events
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m8s
- Backend: Nuevo soporte en endpoint /send para tipos contact, poll, event
- UI: Modales para crear y enviar contactos, encuestas y eventos
- Visualización: Componentes MessagePoll y MessageEvent para mostrar mensajes recibidos
- Tipos: Agregar PollInfo, EventInfo y tipo 'event' a MessageType
2025-12-04 12:06:35 -06:00
48f23c512b Clean: Eliminar logs y divs de debug, mantener panel de debug del input
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m8s
2025-12-04 11:50:25 -06:00
7b4b3e035c Fix: Usar nombre correcto del componente MessagesMediaPreview
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m9s
2025-12-04 11:47:38 -06:00
f1c3306890 Debug: Agregar info de debug en MediaPreview
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m8s
2025-12-04 11:45:35 -06:00
565b66b2d2 Debug: Agregar indicador visual para archivos seleccionados
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m8s
2025-12-04 11:43:05 -06:00
91173775a4 Fix: Usar UButton para debug y agregar logs de selección de archivos
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m10s
2025-12-04 11:40:08 -06:00
3ef09c7b4d Add: Debug panel al input de mensajes para ver estado de archivos y mensaje
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m7s
2025-12-04 11:36:18 -06:00
828eb406a5 Fix: Corregir contenedor de input para que no se comprima y muestre preview
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m8s
2025-12-04 11:30:43 -06:00
8e5dccd8d5 Debug: Agregar boton para probar expansion del area de input
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m7s
2025-12-04 10:43:29 -06:00
6cb13f6907 Fix: Mejorar animacion de crecimiento del area de input
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m7s
- Cambiar animacion a translateY para mejor rendimiento
- Agregar transition-all al contenedor del input
- El contenedor crece suavemente cuando hay archivos seleccionados
2025-12-04 10:40:15 -06:00
5df59747fe Feat: Agregar animacion de crecimiento vertical para previews
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m9s
- Usar Vue Transition con slide-up para MediaPreview y ReplyPreview
- Animar altura, opacidad y espaciado
- Duracion 0.3s con ease
2025-12-04 10:33:42 -06:00
3a3fa70092 Debug: Agregar logs para depurar envio de stickers
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m8s
2025-12-04 10:31:14 -06:00
f09ce37897 Fix: Forzar mimetype ogg para notas de voz PTT
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m11s
- Preferir grabacion en ogg/opus en el navegador
- Forzar mimetype a audio/ogg; codecs=opus para PTT en servidor
- WhatsApp requiere ogg para notas de voz
2025-12-04 10:24:53 -06:00
9f90b8cd2b Fix: Mejorar manejo de duracion de audio y errores de envio
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m10s
- Validar que duration sea numero finito en MessageAudio
- Obtener duracion del elemento audio si no esta en metadata
- Agregar toast de error para envio de notas de voz
2025-12-04 10:22:49 -06:00
9667738604 Feat: Validacion de tamaño de archivos y notificaciones de error
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m9s
- Agregar validacion de tamaño en frontend antes de enviar
- Mostrar toast con error cuando archivo excede limite
- Mostrar toast con mensaje de error del servidor cuando falla envio
- Limites: imagen 16MB, video 64MB, audio 16MB, documento 100MB
2025-12-04 10:14:35 -06:00
f4cf23f1ee Fix: Agregar placeholder dinamico y mejorar reactividad de archivos
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m9s
- Placeholder muestra cantidad de archivos seleccionados
- Usar filter() en removeFile para mantener reactividad
- Remover console.logs de debug
2025-12-04 10:07:17 -06:00
efba6dbf31 Fix: Corregir reactividad de selectedFiles en MediaPreview
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m10s
- Usar spread operator en lugar de push() para que Vue detecte cambios
- Agregar console.logs temporales para debug
2025-12-04 10:03:10 -06:00
0e2b707f3b Fix: Actualizar UDropdown a UDropdownMenu para Nuxt UI 4
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m9s
- Cambiar UDropdown a UDropdownMenu
- Cambiar :popper a :content con side/align
- Cambiar click a onSelect en items del menú
2025-12-04 09:50:34 -06:00
9cf4faedec Fix: Corregir UModal en MessageContact usando v-model:open
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m7s
El modal de contacto usaba v-model en lugar de v-model:open según
la documentación de Nuxt UI 4. También se actualizó la estructura
para usar los slots correctos del UModal (#header, #body, #footer).
2025-12-04 09:45:25 -06:00
ec40cd6826 Unificar endpoint de envío y agregar soporte para stickers
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 2m28s
- Consolidar send.post.ts y send-media.post.ts en un único endpoint /send
- Agregar servicio sticker-processor.ts para convertir imágenes a WebP 512x512
- Agregar toggle Imagen/Sticker en MediaPreview para enviar imágenes como stickers
- Actualizar MessageInput y página de mensajes para usar endpoint unificado
- Instalar dependencia sharp para procesamiento de imágenes
2025-12-04 09:33:03 -06:00
09d3c5398a Fix: Pasar quoted como opción de Baileys, no dentro del content
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m8s
El campo quoted debe ir en el tercer parámetro (opciones) de sendMessage,
no dentro del objeto content. Esto corrige el envío de respuestas.
2025-12-03 11:07:06 -06:00
e8b74e71de Fix: Agregar soporte para mensajes de respuesta (reply) en envío de texto
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m30s
El endpoint send.post.ts ignoraba el campo quotedMessageId que el frontend
enviaba, causando que los mensajes de respuesta llegaran como mensajes normales.
2025-12-03 10:56:10 -06:00
f1d7be175b Fix: ReactionPicker se alinea a la izquierda en mensajes propios
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m7s
- Agregada prop 'align' al ReactionPicker (left/right)
- Mensajes propios (fromMe): picker se alinea a la izquierda (right-0)
- Mensajes recibidos: picker se alinea a la derecha (left-0)
- Evita que el picker extienda la página horizontalmente
2025-12-03 10:44:47 -06:00
5007049bcf UI: Botones de acción flotantes con position absolute
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s
- Botones ahora flotan fuera de la burbuja sin ocupar espacio
- Para mensajes propios: botones a la izquierda (right-full)
- Para mensajes recibidos: botones a la derecha (left-full)
- Agregado fondo y sombra a los botones para mejor visibilidad
2025-12-03 10:26:45 -06:00
8213864ad1 UI: Mover botones de acción fuera del overflow-hidden
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m7s
- Botones de responder/reaccionar/debug ahora están fuera del contenedor con overflow
- ReactionPicker ya no se trunca y flota correctamente
- Botones siempre aparecen al lado izquierdo de la burbuja (usando flex-row-reverse para fromMe)
2025-12-03 10:01:24 -06:00
fec189d5a5 Fix: Corregir uso de UModal según API de Nuxt UI v4
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m7s
- Usar v-model:open en lugar de v-model
- Usar slot #content para contenido personalizado
- Usar slots #body/#footer para estructura predefinida
- Corregir modal de imagen fullscreen
- Corregir modal de selector de emojis
2025-12-03 09:57:30 -06:00
b335405ac9 Fix: Corregir bugs en interfaz de mensajes
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m8s
- Corregir modal de imagen vacío (agregar template #default a UModal)
- Agregar soporte para click derecho y long press en selector de reacciones
- Agregar fondo sólido al card de reacciones (bg-[var(--wa-surface)])
2025-12-03 09:51:56 -06:00
768d8ee8e2 UI: Agregar notificaciones toast a todas las funciones de copiar en Mensajes
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m43s
2025-12-03 09:37:55 -06:00
c0af0a3478 Feature: Cargar historial de WhatsApp desde la UI
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m5s
- Agregar endpoint oldest.get.ts para obtener mensaje mas antiguo de un chat
- Agregar boton 'Cargar historial de WhatsApp' en vista de mensajes
- Mejorar HistorySection.vue con selector de chats y auto-deteccion
2025-12-02 21:59:27 -06:00