diff --git a/chat-de-whatsapp-propuestas-ejecutadas-version-final.json b/chat-de-whatsapp-propuestas-ejecutadas-version-final.json index 1e7a700..e63e4f3 100644 --- a/chat-de-whatsapp-propuestas-ejecutadas-version-final.json +++ b/chat-de-whatsapp-propuestas-ejecutadas-version-final.json @@ -1,9 +1,9 @@ { - "updatedAt": "2026-07-04T22:33:50.467Z", + "updatedAt": "2026-07-16T16:14:30.458Z", "createdAt": "2026-06-24T14:10:15.435Z", "id": "CdosDIWBgnDMnPdr", "name": "Chat de WhatsApp - Propuestas Ejecutadas - Versión Final", - "description": null, + "description": "Gestiona por WhatsApp la recepción de propuestas ejecutadas o externas, procesa notas de voz, imágenes y videos, organiza los archivos y genera automáticamente la presentación correspondiente.", "active": true, "isArchived": false, "nodes": [ @@ -42,8 +42,8 @@ "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.4, "position": [ - 15680, - 1632 + 15344, + 1648 ], "id": "dad797ac-f70a-4550-a1bb-297d2f296dc4", "name": "WhatsApp - Enviar mensaje TEST" @@ -8355,7 +8355,7 @@ { "parameters": { "content": "## 🧾 CONTROL DE SESIONES\n\nEste bloque controla si el usuario puede iniciar, continuar o cancelar un reporte.\n\nDecisiones:\n- CREAR_SESION: inicia nuevo reporte con Hey.\n- AVISO_SESION_ACTIVA: ya existe una sesión abierta.\n- CONTINUAR_SESION: sigue el reporte actual.\n- CANCELAR_SESION: cancela sesión activa.\n- SIN_SESION_ACTIVA: no hay reporte abierto.\n- SIN_SESION_PARA_CANCELAR: intento de cancelar sin sesión.\n\nRegla:\nuna propuesta/reporte activo por usuario dentro del grupo.", - "height": 672, + "height": 624, "width": 1024, "color": 4 }, @@ -8387,7 +8387,7 @@ { "parameters": { "content": "## 🧭 ROUTER DEL REPORTE ACTIVO\n\nEste bloque decide qué hacer según la etapa actual de la sesión.\n\nEtapas:\n- ESPERANDO_AUDIO\n- ESPERANDO_IMAGENES\n- ESPERANDO_VIDEOS\n- PROCESANDO\n\nDecisiones principales:\n- Guardar audio\n- Pedir audio\n- Guardar imágenes\n- Validar FOTOS LISTAS\n- Guardar videos\n- Cerrar sin video\n- Cerrar con videos\n- Avisar procesamiento\n- Ignorar eventos no válidos\n\nRegla:\ncada mensaje se procesa según la etapa activa, no de forma aislada.", - "height": 944, + "height": 896, "width": 1024, "color": 2 }, @@ -8404,13 +8404,13 @@ "parameters": { "content": "## 🎙️ PASO 1 — AUDIO OBLIGATORIO\n\nEl reporte no avanza sin nota de voz.\n\nCuando llega un audio:\n- Se guarda el evento en wa_ejecuciones_eventos.\n- Se actualiza la sesión.\n- Se incrementa audio_count.\n- La etapa cambia a ESPERANDO_IMAGENES.\n- El bot pide las imágenes obligatorias.\n\nLa nota de voz debe explicar:\n- Propuesta o referencia\n- Marca/cliente\n- País\n- Ubicación\n- Qué se ejecutó o reportó\n- Comentarios o resultados", "height": 640, - "width": 2448, + "width": 2064, "color": 7 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ - -5952, + -5568, -2800 ], "id": "cf2e46cc-9bb7-469c-9335-a578a24fc23e", @@ -8468,13 +8468,13 @@ "parameters": { "content": "## 🤖 ANÁLISIS IA Y CONTROL REDIS\n\nGemini analiza cada evidencia multimedia:\n- Audio\n- Imágenes\n- Videos opcionales\n\nCada análisis se guarda en:\nwa_ejecuciones_analisis_media\n\nRedis controla el cierre:\n- Cuenta análisis completados.\n- Verifica si ya están todos listos.\n- Usa lock para evitar cierre duplicado.\n- Si faltan análisis, espera y reintenta.\n\nRegla:\nel JSON final solo se genera cuando el análisis multimedia está completo.", "height": 1504, - "width": 6304, + "width": 5712, "color": 3 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ - -2112, + -1520, 1440 ], "id": "4400f1ea-39b9-4302-86b4-a0c463f8e76c", @@ -8483,8 +8483,8 @@ { "parameters": { "content": "## ✅ CIERRE FINAL DEL REPORTE\n\nEste bloque genera el resultado final del reporte.\n\nProceso:\n1. Consolida análisis multimedia.\n2. Gemini genera JSON final estructurado.\n3. Se normaliza la respuesta.\n4. Se hace match contra el Banco de Propuestas.\n5. Se verifica duplicado.\n6. Se guarda en propuestas_ejecutadas.\n7. Se crea carpeta de ejecución en Drive.\n8. Se copia la plantilla de Slides.\n9. Se insertan imágenes y se borran slides vacíos.\n10. Se actualiza el link final.\n11. Si el match es alto, se actualiza el banco original.\n12. Se envía el link final por WhatsApp.\n\nRegla:\npropuestas externas o match bajo no actualizan el banco original.", - "height": 1216, - "width": 11408, + "height": 1024, + "width": 10848, "color": 6 }, "type": "n8n-nodes-base.stickyNote", @@ -8495,6 +8495,22 @@ ], "id": "a3245658-be74-4ea6-8a58-a104803896ac", "name": "Sticky Note9" + }, + { + "parameters": { + "content": "## Fotos Listas\n\nActualizar a Fotos listas y preparar solicitud de videos", + "height": 272, + "width": 944, + "color": 4 + }, + "type": "n8n-nodes-base.stickyNote", + "typeVersion": 1, + "position": [ + -3792, + -1264 + ], + "id": "0ce97fde-e030-4175-baa9-b804cdc18803", + "name": "Sticky Note10" } ], "connections": { @@ -10081,15 +10097,15 @@ "settings": { "executionOrder": "v1", "binaryMode": "separate", - "availableInMCP": false + "availableInMCP": true }, "staticData": null, "meta": { "templateCredsSetupCompleted": true }, - "versionId": "135d4b16-b87e-4b14-8234-57a60538586e", - "activeVersionId": "135d4b16-b87e-4b14-8234-57a60538586e", - "versionCounter": 218, + "versionId": "4d721462-7812-496f-9339-30107ebe2e83", + "activeVersionId": "4d721462-7812-496f-9339-30107ebe2e83", + "versionCounter": 249, "triggerCount": 1, "shared": [ { @@ -10112,9 +10128,9 @@ ], "tags": [], "activeVersion": { - "updatedAt": "2026-07-04T22:34:01.000Z", - "createdAt": "2026-07-04T22:33:50.475Z", - "versionId": "135d4b16-b87e-4b14-8234-57a60538586e", + "updatedAt": "2026-07-15T15:06:52.000Z", + "createdAt": "2026-07-15T15:06:50.616Z", + "versionId": "4d721462-7812-496f-9339-30107ebe2e83", "workflowId": "CdosDIWBgnDMnPdr", "nodes": [ { @@ -10152,8 +10168,8 @@ "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.4, "position": [ - 15680, - 1632 + 15344, + 1648 ], "id": "dad797ac-f70a-4550-a1bb-297d2f296dc4", "name": "WhatsApp - Enviar mensaje TEST" @@ -18465,7 +18481,7 @@ { "parameters": { "content": "## 🧾 CONTROL DE SESIONES\n\nEste bloque controla si el usuario puede iniciar, continuar o cancelar un reporte.\n\nDecisiones:\n- CREAR_SESION: inicia nuevo reporte con Hey.\n- AVISO_SESION_ACTIVA: ya existe una sesión abierta.\n- CONTINUAR_SESION: sigue el reporte actual.\n- CANCELAR_SESION: cancela sesión activa.\n- SIN_SESION_ACTIVA: no hay reporte abierto.\n- SIN_SESION_PARA_CANCELAR: intento de cancelar sin sesión.\n\nRegla:\nuna propuesta/reporte activo por usuario dentro del grupo.", - "height": 672, + "height": 624, "width": 1024, "color": 4 }, @@ -18497,7 +18513,7 @@ { "parameters": { "content": "## 🧭 ROUTER DEL REPORTE ACTIVO\n\nEste bloque decide qué hacer según la etapa actual de la sesión.\n\nEtapas:\n- ESPERANDO_AUDIO\n- ESPERANDO_IMAGENES\n- ESPERANDO_VIDEOS\n- PROCESANDO\n\nDecisiones principales:\n- Guardar audio\n- Pedir audio\n- Guardar imágenes\n- Validar FOTOS LISTAS\n- Guardar videos\n- Cerrar sin video\n- Cerrar con videos\n- Avisar procesamiento\n- Ignorar eventos no válidos\n\nRegla:\ncada mensaje se procesa según la etapa activa, no de forma aislada.", - "height": 944, + "height": 896, "width": 1024, "color": 2 }, @@ -18514,13 +18530,13 @@ "parameters": { "content": "## 🎙️ PASO 1 — AUDIO OBLIGATORIO\n\nEl reporte no avanza sin nota de voz.\n\nCuando llega un audio:\n- Se guarda el evento en wa_ejecuciones_eventos.\n- Se actualiza la sesión.\n- Se incrementa audio_count.\n- La etapa cambia a ESPERANDO_IMAGENES.\n- El bot pide las imágenes obligatorias.\n\nLa nota de voz debe explicar:\n- Propuesta o referencia\n- Marca/cliente\n- País\n- Ubicación\n- Qué se ejecutó o reportó\n- Comentarios o resultados", "height": 640, - "width": 2448, + "width": 2064, "color": 7 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ - -5952, + -5568, -2800 ], "id": "cf2e46cc-9bb7-469c-9335-a578a24fc23e", @@ -18578,13 +18594,13 @@ "parameters": { "content": "## 🤖 ANÁLISIS IA Y CONTROL REDIS\n\nGemini analiza cada evidencia multimedia:\n- Audio\n- Imágenes\n- Videos opcionales\n\nCada análisis se guarda en:\nwa_ejecuciones_analisis_media\n\nRedis controla el cierre:\n- Cuenta análisis completados.\n- Verifica si ya están todos listos.\n- Usa lock para evitar cierre duplicado.\n- Si faltan análisis, espera y reintenta.\n\nRegla:\nel JSON final solo se genera cuando el análisis multimedia está completo.", "height": 1504, - "width": 6304, + "width": 5712, "color": 3 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ - -2112, + -1520, 1440 ], "id": "4400f1ea-39b9-4302-86b4-a0c463f8e76c", @@ -18593,8 +18609,8 @@ { "parameters": { "content": "## ✅ CIERRE FINAL DEL REPORTE\n\nEste bloque genera el resultado final del reporte.\n\nProceso:\n1. Consolida análisis multimedia.\n2. Gemini genera JSON final estructurado.\n3. Se normaliza la respuesta.\n4. Se hace match contra el Banco de Propuestas.\n5. Se verifica duplicado.\n6. Se guarda en propuestas_ejecutadas.\n7. Se crea carpeta de ejecución en Drive.\n8. Se copia la plantilla de Slides.\n9. Se insertan imágenes y se borran slides vacíos.\n10. Se actualiza el link final.\n11. Si el match es alto, se actualiza el banco original.\n12. Se envía el link final por WhatsApp.\n\nRegla:\npropuestas externas o match bajo no actualizan el banco original.", - "height": 1216, - "width": 11408, + "height": 1024, + "width": 10848, "color": 6 }, "type": "n8n-nodes-base.stickyNote", @@ -18605,6 +18621,22 @@ ], "id": "a3245658-be74-4ea6-8a58-a104803896ac", "name": "Sticky Note9" + }, + { + "parameters": { + "content": "## Fotos Listas\n\nActualizar a Fotos listas y preparar solicitud de videos", + "height": 272, + "width": 944, + "color": 4 + }, + "type": "n8n-nodes-base.stickyNote", + "typeVersion": 1, + "position": [ + -3792, + -1264 + ], + "id": "0ce97fde-e030-4175-baa9-b804cdc18803", + "name": "Sticky Note10" } ], "connections": { @@ -20189,15 +20221,15 @@ } }, "authors": "Isaac Aracena", - "name": "Version 135d4b16", + "name": "Version 4d721462", "description": "", - "autosaved": true, + "autosaved": false, "workflowPublishHistory": [ { - "createdAt": "2026-07-04T22:34:01.172Z", - "id": 2460, + "createdAt": "2026-07-15T15:06:52.705Z", + "id": 2961, "workflowId": "CdosDIWBgnDMnPdr", - "versionId": "135d4b16-b87e-4b14-8234-57a60538586e", + "versionId": "4d721462-7812-496f-9339-30107ebe2e83", "event": "activated", "userId": "0a88c0b1-928e-4412-896e-c5d1c99b2029" }