From a3eab17075fb241427d45098c173149393241f68 Mon Sep 17 00:00:00 2001 From: Isaac_Aracena Date: Sun, 23 Aug 2026 04:00:51 +0000 Subject: [PATCH] Create backup: Cruces GLM - Reporte de Usuario --- cruces-glm-reporte-de-usuario.json | 285 +++++++++++++++++++++++++++++ 1 file changed, 285 insertions(+) create mode 100644 cruces-glm-reporte-de-usuario.json diff --git a/cruces-glm-reporte-de-usuario.json b/cruces-glm-reporte-de-usuario.json new file mode 100644 index 0000000..ca657b5 --- /dev/null +++ b/cruces-glm-reporte-de-usuario.json @@ -0,0 +1,285 @@ +{ + "updatedAt": "2026-08-20T11:59:57.945Z", + "createdAt": "2026-08-20T02:02:12.197Z", + "id": "SpYWL8T5KPiL3yvb", + "name": "Cruces GLM - Reporte de Usuario", + "description": null, + "active": true, + "isArchived": false, + "nodes": [ + { + "parameters": { + "httpMethod": "POST", + "path": "cruces-glm-reportar", + "responseMode": "responseNode", + "options": { + "allowedOrigins": "*" + } + }, + "type": "n8n-nodes-base.webhook", + "typeVersion": 2.1, + "position": [ + -144, + -64 + ], + "id": "2761e921-ab46-4d9f-a8f1-4a85952fe216", + "name": "Webhook - Reportar", + "webhookId": "0baf1e89-c6ee-4c05-805f-0a42c5cd6045" + }, + { + "parameters": { + "jsCode": "const body = $json.body ?? {};\n\nconst clean = (value, fallback = \"\") => {\n const text = typeof value === \"string\" ? value.trim() : \"\";\n return text || fallback;\n};\n\nconst escapeHtml = (value) =>\n String(value)\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n\nconst userEmail = clean(body.userEmail, \"Usuario no identificado\");\nconst userName = clean(body.userName, userEmail);\nconst rawMessage = clean(body.message);\n\nif (!rawMessage) {\n throw new Error(\"El reporte llegó sin mensaje. No se enviará el correo.\");\n}\n\nconst message = rawMessage.slice(0, 5000);\nconst submittedAt = clean(body.submittedAt, new Date().toISOString());\n\nlet dateLabel = submittedAt;\ntry {\n dateLabel = new Intl.DateTimeFormat(\"es-DO\", {\n dateStyle: \"long\",\n timeStyle: \"short\",\n timeZone: \"America/Santo_Domingo\",\n }).format(new Date(submittedAt));\n} catch {}\n\nconst htmlMessage = escapeHtml(message).replace(/\\n/g, \"
\");\nconst safeName = escapeHtml(userName);\nconst safeEmail = escapeHtml(userEmail);\nconst safeDate = escapeHtml(dateLabel);\n\nconst html = `\n\n\n \n \n\n\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 
\n \"GomezLee\n
\n
CRUCES GLM · REPORTE DE USUARIO
\n

Nuevo reporte recibido

\n

Un usuario envió un reporte desde la aplicación Cruces GLM.

\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
Usuario${safeName}
Correo${safeEmail}
Fecha${safeDate}
\n
\n
MENSAJE DEL USUARIO
\n
${htmlMessage}
\n
\n
CONFIDENCIAL — Uso interno GomezLee Marketing · Mensaje generado automáticamente desde Cruces GLM.
\n
\n
\n\n`;\n\nreturn [{\n json: {\n to: \"iaracena@gomezleemarketing.com\",\n subject: `[Cruces GLM] Reporte de usuario - ${userName}`,\n html,\n userEmail,\n userName,\n message,\n submittedAt,\n },\n}];" + }, + "type": "n8n-nodes-base.code", + "typeVersion": 2, + "position": [ + 112, + -64 + ], + "id": "8e21116c-30ab-44cd-9465-7c1b524d30e3", + "name": "Preparar correo GLM" + }, + { + "parameters": { + "sendTo": "={{ $json.to }}", + "subject": "={{ $json.subject }}", + "message": "={{ $json.html }}", + "options": { + "appendAttribution": false, + "senderName": "Cruces GLM" + } + }, + "type": "n8n-nodes-base.gmail", + "typeVersion": 2.1, + "position": [ + 368, + -64 + ], + "id": "cfb2f106-79c8-4c08-8d63-644c40fee8ea", + "name": "Enviar a Isaac - Seleccionar credencial Gmail", + "webhookId": "faa6af23-dca1-4bac-af3f-d955a5c6bf08", + "credentials": { + "gmailOAuth2": { + "id": "UDcO1FLJqA453V2D", + "name": "Gmail account 3" + } + } + }, + { + "parameters": { + "respondWith": "json", + "responseBody": "={{ { ok: true, message: 'Reporte enviado correctamente.' } }}", + "options": { + "responseCode": 200 + } + }, + "type": "n8n-nodes-base.respondToWebhook", + "typeVersion": 1.4, + "position": [ + 656, + -64 + ], + "id": "821e390e-ea6c-4cf7-bb22-b3f7a7f6ba8d", + "name": "Responder OK" + } + ], + "connections": { + "Preparar correo GLM": { + "main": [ + [ + { + "node": "Enviar a Isaac - Seleccionar credencial Gmail", + "type": "main", + "index": 0 + } + ] + ] + }, + "Enviar a Isaac - Seleccionar credencial Gmail": { + "main": [ + [ + { + "node": "Responder OK", + "type": "main", + "index": 0 + } + ] + ] + }, + "Webhook - Reportar": { + "main": [ + [ + { + "node": "Preparar correo GLM", + "type": "main", + "index": 0 + } + ] + ] + } + }, + "settings": { + "executionOrder": "v1", + "binaryMode": "separate" + }, + "staticData": null, + "meta": { + "templateCredsSetupCompleted": true + }, + "versionId": "07d10357-550f-42de-a354-6b592fd38563", + "activeVersionId": "07d10357-550f-42de-a354-6b592fd38563", + "versionCounter": 12, + "triggerCount": 1, + "shared": [ + { + "updatedAt": "2026-08-20T02:02:12.203Z", + "createdAt": "2026-08-20T02:02:12.203Z", + "role": "workflow:owner", + "workflowId": "SpYWL8T5KPiL3yvb", + "projectId": "PJpTANzTXIFibWsW", + "project": { + "updatedAt": "2026-04-22T14:25:09.686Z", + "createdAt": "2026-04-22T14:22:54.790Z", + "id": "PJpTANzTXIFibWsW", + "name": "Isaac Aracena ", + "type": "personal", + "icon": null, + "description": null, + "creatorId": "0a88c0b1-928e-4412-896e-c5d1c99b2029" + } + } + ], + "tags": [], + "activeVersion": { + "updatedAt": "2026-08-20T02:40:43.000Z", + "createdAt": "2026-08-20T02:40:34.437Z", + "versionId": "07d10357-550f-42de-a354-6b592fd38563", + "workflowId": "SpYWL8T5KPiL3yvb", + "nodes": [ + { + "parameters": { + "httpMethod": "POST", + "path": "cruces-glm-reportar", + "responseMode": "responseNode", + "options": { + "allowedOrigins": "*" + } + }, + "type": "n8n-nodes-base.webhook", + "typeVersion": 2.1, + "position": [ + -144, + -64 + ], + "id": "2761e921-ab46-4d9f-a8f1-4a85952fe216", + "name": "Webhook - Reportar", + "webhookId": "0baf1e89-c6ee-4c05-805f-0a42c5cd6045" + }, + { + "parameters": { + "jsCode": "const body = $json.body ?? {};\n\nconst clean = (value, fallback = \"\") => {\n const text = typeof value === \"string\" ? value.trim() : \"\";\n return text || fallback;\n};\n\nconst escapeHtml = (value) =>\n String(value)\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n\nconst userEmail = clean(body.userEmail, \"Usuario no identificado\");\nconst userName = clean(body.userName, userEmail);\nconst rawMessage = clean(body.message);\n\nif (!rawMessage) {\n throw new Error(\"El reporte llegó sin mensaje. No se enviará el correo.\");\n}\n\nconst message = rawMessage.slice(0, 5000);\nconst submittedAt = clean(body.submittedAt, new Date().toISOString());\n\nlet dateLabel = submittedAt;\ntry {\n dateLabel = new Intl.DateTimeFormat(\"es-DO\", {\n dateStyle: \"long\",\n timeStyle: \"short\",\n timeZone: \"America/Santo_Domingo\",\n }).format(new Date(submittedAt));\n} catch {}\n\nconst htmlMessage = escapeHtml(message).replace(/\\n/g, \"
\");\nconst safeName = escapeHtml(userName);\nconst safeEmail = escapeHtml(userEmail);\nconst safeDate = escapeHtml(dateLabel);\n\nconst html = `\n\n\n \n \n\n\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 
\n \"GomezLee\n
\n
CRUCES GLM · REPORTE DE USUARIO
\n

Nuevo reporte recibido

\n

Un usuario envió un reporte desde la aplicación Cruces GLM.

\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
Usuario${safeName}
Correo${safeEmail}
Fecha${safeDate}
\n
\n
MENSAJE DEL USUARIO
\n
${htmlMessage}
\n
\n
CONFIDENCIAL — Uso interno GomezLee Marketing · Mensaje generado automáticamente desde Cruces GLM.
\n
\n
\n\n`;\n\nreturn [{\n json: {\n to: \"iaracena@gomezleemarketing.com\",\n subject: `[Cruces GLM] Reporte de usuario - ${userName}`,\n html,\n userEmail,\n userName,\n message,\n submittedAt,\n },\n}];" + }, + "type": "n8n-nodes-base.code", + "typeVersion": 2, + "position": [ + 112, + -64 + ], + "id": "8e21116c-30ab-44cd-9465-7c1b524d30e3", + "name": "Preparar correo GLM" + }, + { + "parameters": { + "sendTo": "={{ $json.to }}", + "subject": "={{ $json.subject }}", + "message": "={{ $json.html }}", + "options": { + "appendAttribution": false, + "senderName": "Cruces GLM" + } + }, + "type": "n8n-nodes-base.gmail", + "typeVersion": 2.1, + "position": [ + 368, + -64 + ], + "id": "cfb2f106-79c8-4c08-8d63-644c40fee8ea", + "name": "Enviar a Isaac - Seleccionar credencial Gmail", + "webhookId": "faa6af23-dca1-4bac-af3f-d955a5c6bf08", + "credentials": { + "gmailOAuth2": { + "id": "UDcO1FLJqA453V2D", + "name": "Gmail account 3" + } + } + }, + { + "parameters": { + "respondWith": "json", + "responseBody": "={{ { ok: true, message: 'Reporte enviado correctamente.' } }}", + "options": { + "responseCode": 200 + } + }, + "type": "n8n-nodes-base.respondToWebhook", + "typeVersion": 1.4, + "position": [ + 656, + -64 + ], + "id": "821e390e-ea6c-4cf7-bb22-b3f7a7f6ba8d", + "name": "Responder OK" + } + ], + "connections": { + "Preparar correo GLM": { + "main": [ + [ + { + "node": "Enviar a Isaac - Seleccionar credencial Gmail", + "type": "main", + "index": 0 + } + ] + ] + }, + "Enviar a Isaac - Seleccionar credencial Gmail": { + "main": [ + [ + { + "node": "Responder OK", + "type": "main", + "index": 0 + } + ] + ] + }, + "Webhook - Reportar": { + "main": [ + [ + { + "node": "Preparar correo GLM", + "type": "main", + "index": 0 + } + ] + ] + } + }, + "authors": "Isaac Aracena", + "name": "Version 07d10357", + "description": "", + "autosaved": true, + "workflowPublishHistory": [ + { + "createdAt": "2026-08-20T02:40:43.318Z", + "id": 5012, + "workflowId": "SpYWL8T5KPiL3yvb", + "versionId": "07d10357-550f-42de-a354-6b592fd38563", + "event": "activated", + "userId": "0a88c0b1-928e-4412-896e-c5d1c99b2029" + } + ] + } +} \ No newline at end of file