diff --git a/cotizador-walmart-connect-reporte-usuario-seguro-sin-env.json b/cotizador-walmart-connect-reporte-usuario-seguro-sin-env.json new file mode 100644 index 0000000..f1a3968 --- /dev/null +++ b/cotizador-walmart-connect-reporte-usuario-seguro-sin-env.json @@ -0,0 +1,1015 @@ +{ + "updatedAt": "2026-08-22T15:03:47.407Z", + "createdAt": "2026-08-22T15:03:47.407Z", + "id": "5JALWgQdOiSV2uSN", + "name": "Cotizador Walmart Connect - Reporte Usuario Seguro - SIN ENV", + "description": null, + "active": true, + "isArchived": false, + "nodes": [ + { + "parameters": { + "httpMethod": "POST", + "path": "cotizador-wmc-reportar", + "responseMode": "responseNode", + "options": { + "allowedOrigins": "*" + } + }, + "type": "n8n-nodes-base.webhook", + "typeVersion": 2.1, + "position": [ + -1968, + 128 + ], + "id": "99fe33b3-7138-40ee-b129-d8c790365090", + "name": "Webhook - Reportar", + "webhookId": "9d4920cc-7e4a-4168-a84f-8bdc846eb5eb" + }, + { + "parameters": { + "jsCode": "const body=$json.body??{}; const headers=$json.headers??{}; const clean=(v,m=5000)=>typeof v==='string'?v.trim().slice(0,m):''; const auth=clean(headers.authorization||headers.Authorization,12000); if(!auth.startsWith('Bearer ')) throw new Error('Falta sesión Supabase.'); const message=clean(body.message,5000); if(!message) throw new Error('El reporte no contiene descripción.'); return [{json:{auth,message,claimedEmail:clean(body.userEmail,320).toLowerCase(),claimedName:clean(body.userName,200),submittedAt:clean(body.submittedAt,100)||new Date().toISOString(),appSessionId:clean(body.appSessionId,250)||`report-${Date.now()}`}}];" + }, + "type": "n8n-nodes-base.code", + "typeVersion": 2, + "position": [ + -1520, + 128 + ], + "id": "5c2a3294-468b-4d56-970c-f98a1c3eb30c", + "name": "Normalizar reporte" + }, + { + "parameters": { + "url": "https://dbit.digitalcompass.agency/auth/v1/user", + "sendHeaders": true, + "headerParameters": { + "parameters": [ + { + "name": "apikey", + "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE" + }, + { + "name": "Authorization", + "value": "={{ $json.auth }}" + } + ] + }, + "options": { + "timeout": 20000 + } + }, + "type": "n8n-nodes-base.httpRequest", + "typeVersion": 4.2, + "position": [ + -1328, + 128 + ], + "id": "30d516a2-c309-44d7-bdfd-618b91725c06", + "name": "Supabase - validar JWT", + "continueOnFail": true + }, + { + "parameters": { + "jsCode": "const req=$node[\"Normalizar reporte\"].json; const u=$json??{}; const id=String(u.id||''); const email=String(u.email||'').trim().toLowerCase(); const jwtValid=Boolean(id&&email.endsWith('@gomezleemarketing.com')&&(!req.claimedEmail||req.claimedEmail===email)); return [{json:{...req,userId:id,verifiedEmail:email,jwtValid}}];" + }, + "type": "n8n-nodes-base.code", + "typeVersion": 2, + "position": [ + -1104, + 128 + ], + "id": "1e5af2a0-8d05-417a-9a54-d967ebb4d307", + "name": "Validar identidad" + }, + { + "parameters": { + "conditions": { + "options": { + "caseSensitive": true, + "leftValue": "", + "typeValidation": "strict", + "version": 2 + }, + "conditions": [ + { + "id": "a9aae0ad-df78-43c8-8bee-eea1e1575b5b", + "leftValue": "={{ $json.jwtValid }}", + "rightValue": true, + "operator": { + "type": "boolean", + "operation": "true", + "singleValue": true + } + } + ], + "combinator": "and" + }, + "options": {} + }, + "type": "n8n-nodes-base.if", + "typeVersion": 2.2, + "position": [ + -880, + 128 + ], + "id": "80bd0a76-bf67-4d9f-a672-873579105458", + "name": "JWT válido?" + }, + { + "parameters": { + "respondWith": "json", + "responseBody": "={{ {ok:false,message:'Sesión inválida.'} }}", + "options": { + "responseCode": 401 + } + }, + "type": "n8n-nodes-base.respondToWebhook", + "typeVersion": 1.4, + "position": [ + -656, + 368 + ], + "id": "7ddfb8ce-50b6-437c-882d-4c9a2a92f232", + "name": "Responder 401" + }, + { + "parameters": { + "url": "={{ 'https://dbit.digitalcompass.agency/rest/v1/cotizador_wmc_access?select=email,full_name,is_active&email=eq.' + encodeURIComponent($json.verifiedEmail) + '&is_active=eq.true' }}", + "sendHeaders": true, + "headerParameters": { + "parameters": [ + { + "name": "apikey", + "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE" + }, + { + "name": "Authorization", + "value": "={{ $json.auth }}" + } + ] + }, + "options": { + "timeout": 20000 + } + }, + "type": "n8n-nodes-base.httpRequest", + "typeVersion": 4.2, + "position": [ + -656, + 48 + ], + "id": "d60c3747-4932-4cd8-8354-12ac0aa85f8c", + "name": "Supabase - acceso", + "continueOnFail": true + }, + { + "parameters": { + "jsCode": "const req=$node[\"Validar identidad\"].json; const rows=Array.isArray($json)?$json:[]; const row=rows[0]||null; return [{json:{...req,accessAllowed:Boolean(row&&row.is_active===true),fullName:row?.full_name||req.claimedName||req.verifiedEmail}}];" + }, + "type": "n8n-nodes-base.code", + "typeVersion": 2, + "position": [ + -448, + 48 + ], + "id": "e0f173b2-d1ab-4e46-a8ac-4d603b647bbe", + "name": "Validar acceso" + }, + { + "parameters": { + "conditions": { + "options": { + "caseSensitive": true, + "leftValue": "", + "typeValidation": "strict", + "version": 2 + }, + "conditions": [ + { + "id": "69a74499-ad7d-4093-9921-133166609367", + "leftValue": "={{ $json.accessAllowed }}", + "rightValue": true, + "operator": { + "type": "boolean", + "operation": "true", + "singleValue": true + } + } + ], + "combinator": "and" + }, + "options": {} + }, + "type": "n8n-nodes-base.if", + "typeVersion": 2.2, + "position": [ + -224, + 48 + ], + "id": "d6aff02f-55b6-48f0-85a3-1061b3181974", + "name": "Acceso permitido?" + }, + { + "parameters": { + "respondWith": "json", + "responseBody": "={{ {ok:false,message:'No tienes acceso activo al Cotizador WMC.'} }}", + "options": { + "responseCode": 403 + } + }, + "type": "n8n-nodes-base.respondToWebhook", + "typeVersion": 1.4, + "position": [ + 0, + 352 + ], + "id": "12c9912b-4e40-4a3f-aba2-ae583b6c4431", + "name": "Responder 403" + }, + { + "parameters": { + "jsCode": "const x=$node[\"Validar acceso\"].json;\nconst esc=v=>String(v??'').replace(/&/g,'&').replace(//g,'>').replace(/\"/g,'"').replace(/'/g,''');\nlet date=x.submittedAt; try{date=new Intl.DateTimeFormat('es-DO',{dateStyle:'long',timeStyle:'short',timeZone:'America/Santo_Domingo'}).format(new Date(x.submittedAt));}catch{}\nconst html=`
\"GomezLee
COTIZADOR WMC · REPORTE DE USUARIO

Nuevo reporte recibido

Usuario${esc(x.fullName)}
Correo${esc(x.verifiedEmail)}
Fecha${esc(date)}
DESCRIPCIÓN DEL REPORTE
${esc(x.message).replace(/\\n/g,'
')}
CONFIDENCIAL — Uso interno GomezLee Marketing · Mensaje generado automáticamente desde Cotizador Walmart Connect.
`;\nreturn [{json:{...x,to:'iaracena@gomezleemarketing.com',subject:`[Cotizador WMC] Reporte de usuario - ${x.fullName}`,html}}];" + }, + "type": "n8n-nodes-base.code", + "typeVersion": 2, + "position": [ + 0, + 0 + ], + "id": "2926807e-09e5-4e6a-950e-04935eea8692", + "name": "Preparar correo GLM" + }, + { + "parameters": { + "sendTo": "={{ $json.to }}", + "subject": "={{ $json.subject }}", + "message": "={{ $json.html }}", + "options": { + "appendAttribution": false, + "senderName": "Cotizador Walmart Connect" + } + }, + "type": "n8n-nodes-base.gmail", + "typeVersion": 2.1, + "position": [ + 224, + 0 + ], + "id": "31e372fb-0f07-411e-804a-76c37850aa6e", + "name": "Enviar a Isaac", + "webhookId": "26bd0d0a-d6b2-4c16-b3da-6b22456cc880", + "credentials": { + "gmailOAuth2": { + "id": "UDcO1FLJqA453V2D", + "name": "Gmail account 3" + } + } + }, + { + "parameters": { + "method": "POST", + "url": "https://dbit.digitalcompass.agency/rest/v1/rpc/glm_track_app_event", + "sendHeaders": true, + "headerParameters": { + "parameters": [ + { + "name": "apikey", + "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE" + }, + { + "name": "Authorization", + "value": "={{ $node[\"Preparar correo GLM\"].json.auth }}" + }, + { + "name": "Content-Type", + "value": "application/json" + } + ] + }, + "sendBody": true, + "contentType": "raw", + "rawContentType": "application/json", + "body": "={{ JSON.stringify({p_app_key:'cotizador_wmc',p_event_name:'report_submitted',p_session_id:$node[\"Preparar correo GLM\"].json.appSessionId,p_metadata:{length:$node[\"Preparar correo GLM\"].json.message.length},p_entity_type:'report',p_entity_id:null,p_display_name:$node[\"Preparar correo GLM\"].json.fullName}) }}", + "options": { + "timeout": 20000 + } + }, + "type": "n8n-nodes-base.httpRequest", + "typeVersion": 4.2, + "position": [ + 448, + 0 + ], + "id": "c2bd31d4-3755-4434-9287-0931224f9b90", + "name": "Registrar métrica reporte", + "continueOnFail": true + }, + { + "parameters": { + "respondWith": "json", + "responseBody": "={{ {ok:true,message:'Reporte enviado correctamente.'} }}", + "options": { + "responseCode": 200 + } + }, + "type": "n8n-nodes-base.respondToWebhook", + "typeVersion": 1.4, + "position": [ + 672, + 0 + ], + "id": "1d11fc02-2e04-44bb-a728-31d3d626e28f", + "name": "Responder OK" + }, + { + "parameters": { + "jsCode": "// Configuración local del workflow: no usa variables de entorno.\nreturn [{json:{...$json,config:{supabaseUrl:\"https://dbit.digitalcompass.agency\",supabaseAnonKey:\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE\"}}}];" + }, + "type": "n8n-nodes-base.code", + "typeVersion": 2, + "position": [ + -1744, + 128 + ], + "id": "9d1eb2b2-8fb9-4689-8b9b-3ddeefbf05b4", + "name": "Configuración - sin ENV" + } + ], + "connections": { + "Webhook - Reportar": { + "main": [ + [ + { + "node": "Configuración - sin ENV", + "type": "main", + "index": 0 + } + ] + ] + }, + "Normalizar reporte": { + "main": [ + [ + { + "node": "Supabase - validar JWT", + "type": "main", + "index": 0 + } + ] + ] + }, + "Supabase - validar JWT": { + "main": [ + [ + { + "node": "Validar identidad", + "type": "main", + "index": 0 + } + ] + ] + }, + "Validar identidad": { + "main": [ + [ + { + "node": "JWT válido?", + "type": "main", + "index": 0 + } + ] + ] + }, + "JWT válido?": { + "main": [ + [ + { + "node": "Supabase - acceso", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Responder 401", + "type": "main", + "index": 0 + } + ] + ] + }, + "Supabase - acceso": { + "main": [ + [ + { + "node": "Validar acceso", + "type": "main", + "index": 0 + } + ] + ] + }, + "Validar acceso": { + "main": [ + [ + { + "node": "Acceso permitido?", + "type": "main", + "index": 0 + } + ] + ] + }, + "Acceso permitido?": { + "main": [ + [ + { + "node": "Preparar correo GLM", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Responder 403", + "type": "main", + "index": 0 + } + ] + ] + }, + "Preparar correo GLM": { + "main": [ + [ + { + "node": "Enviar a Isaac", + "type": "main", + "index": 0 + } + ] + ] + }, + "Registrar métrica reporte": { + "main": [ + [ + { + "node": "Responder OK", + "type": "main", + "index": 0 + } + ] + ] + }, + "Enviar a Isaac": { + "main": [ + [ + { + "node": "Registrar métrica reporte", + "type": "main", + "index": 0 + } + ] + ] + }, + "Configuración - sin ENV": { + "main": [ + [ + { + "node": "Normalizar reporte", + "type": "main", + "index": 0 + } + ] + ] + } + }, + "settings": { + "executionOrder": "v1", + "binaryMode": "separate" + }, + "staticData": null, + "meta": null, + "versionId": "595e83c9-ea18-4d33-855a-8666fbcb0304", + "activeVersionId": "595e83c9-ea18-4d33-855a-8666fbcb0304", + "versionCounter": 3, + "triggerCount": 1, + "shared": [ + { + "updatedAt": "2026-08-22T15:03:47.414Z", + "createdAt": "2026-08-22T15:03:47.414Z", + "role": "workflow:owner", + "workflowId": "5JALWgQdOiSV2uSN", + "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-22T15:04:29.000Z", + "createdAt": "2026-08-22T15:03:47.417Z", + "versionId": "595e83c9-ea18-4d33-855a-8666fbcb0304", + "workflowId": "5JALWgQdOiSV2uSN", + "nodes": [ + { + "parameters": { + "httpMethod": "POST", + "path": "cotizador-wmc-reportar", + "responseMode": "responseNode", + "options": { + "allowedOrigins": "*" + } + }, + "type": "n8n-nodes-base.webhook", + "typeVersion": 2.1, + "position": [ + -1968, + 128 + ], + "id": "99fe33b3-7138-40ee-b129-d8c790365090", + "name": "Webhook - Reportar", + "webhookId": "9d4920cc-7e4a-4168-a84f-8bdc846eb5eb" + }, + { + "parameters": { + "jsCode": "const body=$json.body??{}; const headers=$json.headers??{}; const clean=(v,m=5000)=>typeof v==='string'?v.trim().slice(0,m):''; const auth=clean(headers.authorization||headers.Authorization,12000); if(!auth.startsWith('Bearer ')) throw new Error('Falta sesión Supabase.'); const message=clean(body.message,5000); if(!message) throw new Error('El reporte no contiene descripción.'); return [{json:{auth,message,claimedEmail:clean(body.userEmail,320).toLowerCase(),claimedName:clean(body.userName,200),submittedAt:clean(body.submittedAt,100)||new Date().toISOString(),appSessionId:clean(body.appSessionId,250)||`report-${Date.now()}`}}];" + }, + "type": "n8n-nodes-base.code", + "typeVersion": 2, + "position": [ + -1520, + 128 + ], + "id": "5c2a3294-468b-4d56-970c-f98a1c3eb30c", + "name": "Normalizar reporte" + }, + { + "parameters": { + "url": "https://dbit.digitalcompass.agency/auth/v1/user", + "sendHeaders": true, + "headerParameters": { + "parameters": [ + { + "name": "apikey", + "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE" + }, + { + "name": "Authorization", + "value": "={{ $json.auth }}" + } + ] + }, + "options": { + "timeout": 20000 + } + }, + "type": "n8n-nodes-base.httpRequest", + "typeVersion": 4.2, + "position": [ + -1328, + 128 + ], + "id": "30d516a2-c309-44d7-bdfd-618b91725c06", + "name": "Supabase - validar JWT", + "continueOnFail": true + }, + { + "parameters": { + "jsCode": "const req=$node[\"Normalizar reporte\"].json; const u=$json??{}; const id=String(u.id||''); const email=String(u.email||'').trim().toLowerCase(); const jwtValid=Boolean(id&&email.endsWith('@gomezleemarketing.com')&&(!req.claimedEmail||req.claimedEmail===email)); return [{json:{...req,userId:id,verifiedEmail:email,jwtValid}}];" + }, + "type": "n8n-nodes-base.code", + "typeVersion": 2, + "position": [ + -1104, + 128 + ], + "id": "1e5af2a0-8d05-417a-9a54-d967ebb4d307", + "name": "Validar identidad" + }, + { + "parameters": { + "conditions": { + "options": { + "caseSensitive": true, + "leftValue": "", + "typeValidation": "strict", + "version": 2 + }, + "conditions": [ + { + "id": "a9aae0ad-df78-43c8-8bee-eea1e1575b5b", + "leftValue": "={{ $json.jwtValid }}", + "rightValue": true, + "operator": { + "type": "boolean", + "operation": "true", + "singleValue": true + } + } + ], + "combinator": "and" + }, + "options": {} + }, + "type": "n8n-nodes-base.if", + "typeVersion": 2.2, + "position": [ + -880, + 128 + ], + "id": "80bd0a76-bf67-4d9f-a672-873579105458", + "name": "JWT válido?" + }, + { + "parameters": { + "respondWith": "json", + "responseBody": "={{ {ok:false,message:'Sesión inválida.'} }}", + "options": { + "responseCode": 401 + } + }, + "type": "n8n-nodes-base.respondToWebhook", + "typeVersion": 1.4, + "position": [ + -656, + 368 + ], + "id": "7ddfb8ce-50b6-437c-882d-4c9a2a92f232", + "name": "Responder 401" + }, + { + "parameters": { + "url": "={{ 'https://dbit.digitalcompass.agency/rest/v1/cotizador_wmc_access?select=email,full_name,is_active&email=eq.' + encodeURIComponent($json.verifiedEmail) + '&is_active=eq.true' }}", + "sendHeaders": true, + "headerParameters": { + "parameters": [ + { + "name": "apikey", + "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE" + }, + { + "name": "Authorization", + "value": "={{ $json.auth }}" + } + ] + }, + "options": { + "timeout": 20000 + } + }, + "type": "n8n-nodes-base.httpRequest", + "typeVersion": 4.2, + "position": [ + -656, + 48 + ], + "id": "d60c3747-4932-4cd8-8354-12ac0aa85f8c", + "name": "Supabase - acceso", + "continueOnFail": true + }, + { + "parameters": { + "jsCode": "const req=$node[\"Validar identidad\"].json; const rows=Array.isArray($json)?$json:[]; const row=rows[0]||null; return [{json:{...req,accessAllowed:Boolean(row&&row.is_active===true),fullName:row?.full_name||req.claimedName||req.verifiedEmail}}];" + }, + "type": "n8n-nodes-base.code", + "typeVersion": 2, + "position": [ + -448, + 48 + ], + "id": "e0f173b2-d1ab-4e46-a8ac-4d603b647bbe", + "name": "Validar acceso" + }, + { + "parameters": { + "conditions": { + "options": { + "caseSensitive": true, + "leftValue": "", + "typeValidation": "strict", + "version": 2 + }, + "conditions": [ + { + "id": "69a74499-ad7d-4093-9921-133166609367", + "leftValue": "={{ $json.accessAllowed }}", + "rightValue": true, + "operator": { + "type": "boolean", + "operation": "true", + "singleValue": true + } + } + ], + "combinator": "and" + }, + "options": {} + }, + "type": "n8n-nodes-base.if", + "typeVersion": 2.2, + "position": [ + -224, + 48 + ], + "id": "d6aff02f-55b6-48f0-85a3-1061b3181974", + "name": "Acceso permitido?" + }, + { + "parameters": { + "respondWith": "json", + "responseBody": "={{ {ok:false,message:'No tienes acceso activo al Cotizador WMC.'} }}", + "options": { + "responseCode": 403 + } + }, + "type": "n8n-nodes-base.respondToWebhook", + "typeVersion": 1.4, + "position": [ + 0, + 352 + ], + "id": "12c9912b-4e40-4a3f-aba2-ae583b6c4431", + "name": "Responder 403" + }, + { + "parameters": { + "jsCode": "const x=$node[\"Validar acceso\"].json;\nconst esc=v=>String(v??'').replace(/&/g,'&').replace(//g,'>').replace(/\"/g,'"').replace(/'/g,''');\nlet date=x.submittedAt; try{date=new Intl.DateTimeFormat('es-DO',{dateStyle:'long',timeStyle:'short',timeZone:'America/Santo_Domingo'}).format(new Date(x.submittedAt));}catch{}\nconst html=`
\"GomezLee
COTIZADOR WMC · REPORTE DE USUARIO

Nuevo reporte recibido

Usuario${esc(x.fullName)}
Correo${esc(x.verifiedEmail)}
Fecha${esc(date)}
DESCRIPCIÓN DEL REPORTE
${esc(x.message).replace(/\\n/g,'
')}
CONFIDENCIAL — Uso interno GomezLee Marketing · Mensaje generado automáticamente desde Cotizador Walmart Connect.
`;\nreturn [{json:{...x,to:'iaracena@gomezleemarketing.com',subject:`[Cotizador WMC] Reporte de usuario - ${x.fullName}`,html}}];" + }, + "type": "n8n-nodes-base.code", + "typeVersion": 2, + "position": [ + 0, + 0 + ], + "id": "2926807e-09e5-4e6a-950e-04935eea8692", + "name": "Preparar correo GLM" + }, + { + "parameters": { + "sendTo": "={{ $json.to }}", + "subject": "={{ $json.subject }}", + "message": "={{ $json.html }}", + "options": { + "appendAttribution": false, + "senderName": "Cotizador Walmart Connect" + } + }, + "type": "n8n-nodes-base.gmail", + "typeVersion": 2.1, + "position": [ + 224, + 0 + ], + "id": "31e372fb-0f07-411e-804a-76c37850aa6e", + "name": "Enviar a Isaac", + "webhookId": "26bd0d0a-d6b2-4c16-b3da-6b22456cc880", + "credentials": { + "gmailOAuth2": { + "id": "UDcO1FLJqA453V2D", + "name": "Gmail account 3" + } + } + }, + { + "parameters": { + "method": "POST", + "url": "https://dbit.digitalcompass.agency/rest/v1/rpc/glm_track_app_event", + "sendHeaders": true, + "headerParameters": { + "parameters": [ + { + "name": "apikey", + "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE" + }, + { + "name": "Authorization", + "value": "={{ $node[\"Preparar correo GLM\"].json.auth }}" + }, + { + "name": "Content-Type", + "value": "application/json" + } + ] + }, + "sendBody": true, + "contentType": "raw", + "rawContentType": "application/json", + "body": "={{ JSON.stringify({p_app_key:'cotizador_wmc',p_event_name:'report_submitted',p_session_id:$node[\"Preparar correo GLM\"].json.appSessionId,p_metadata:{length:$node[\"Preparar correo GLM\"].json.message.length},p_entity_type:'report',p_entity_id:null,p_display_name:$node[\"Preparar correo GLM\"].json.fullName}) }}", + "options": { + "timeout": 20000 + } + }, + "type": "n8n-nodes-base.httpRequest", + "typeVersion": 4.2, + "position": [ + 448, + 0 + ], + "id": "c2bd31d4-3755-4434-9287-0931224f9b90", + "name": "Registrar métrica reporte", + "continueOnFail": true + }, + { + "parameters": { + "respondWith": "json", + "responseBody": "={{ {ok:true,message:'Reporte enviado correctamente.'} }}", + "options": { + "responseCode": 200 + } + }, + "type": "n8n-nodes-base.respondToWebhook", + "typeVersion": 1.4, + "position": [ + 672, + 0 + ], + "id": "1d11fc02-2e04-44bb-a728-31d3d626e28f", + "name": "Responder OK" + }, + { + "parameters": { + "jsCode": "// Configuración local del workflow: no usa variables de entorno.\nreturn [{json:{...$json,config:{supabaseUrl:\"https://dbit.digitalcompass.agency\",supabaseAnonKey:\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE\"}}}];" + }, + "type": "n8n-nodes-base.code", + "typeVersion": 2, + "position": [ + -1744, + 128 + ], + "id": "9d1eb2b2-8fb9-4689-8b9b-3ddeefbf05b4", + "name": "Configuración - sin ENV" + } + ], + "connections": { + "Webhook - Reportar": { + "main": [ + [ + { + "node": "Configuración - sin ENV", + "type": "main", + "index": 0 + } + ] + ] + }, + "Normalizar reporte": { + "main": [ + [ + { + "node": "Supabase - validar JWT", + "type": "main", + "index": 0 + } + ] + ] + }, + "Supabase - validar JWT": { + "main": [ + [ + { + "node": "Validar identidad", + "type": "main", + "index": 0 + } + ] + ] + }, + "Validar identidad": { + "main": [ + [ + { + "node": "JWT válido?", + "type": "main", + "index": 0 + } + ] + ] + }, + "JWT válido?": { + "main": [ + [ + { + "node": "Supabase - acceso", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Responder 401", + "type": "main", + "index": 0 + } + ] + ] + }, + "Supabase - acceso": { + "main": [ + [ + { + "node": "Validar acceso", + "type": "main", + "index": 0 + } + ] + ] + }, + "Validar acceso": { + "main": [ + [ + { + "node": "Acceso permitido?", + "type": "main", + "index": 0 + } + ] + ] + }, + "Acceso permitido?": { + "main": [ + [ + { + "node": "Preparar correo GLM", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Responder 403", + "type": "main", + "index": 0 + } + ] + ] + }, + "Preparar correo GLM": { + "main": [ + [ + { + "node": "Enviar a Isaac", + "type": "main", + "index": 0 + } + ] + ] + }, + "Registrar métrica reporte": { + "main": [ + [ + { + "node": "Responder OK", + "type": "main", + "index": 0 + } + ] + ] + }, + "Enviar a Isaac": { + "main": [ + [ + { + "node": "Registrar métrica reporte", + "type": "main", + "index": 0 + } + ] + ] + }, + "Configuración - sin ENV": { + "main": [ + [ + { + "node": "Normalizar reporte", + "type": "main", + "index": 0 + } + ] + ] + } + }, + "authors": "Isaac Aracena", + "name": "Version 595e83c9", + "description": "", + "autosaved": true, + "workflowPublishHistory": [ + { + "createdAt": "2026-08-22T15:04:29.600Z", + "id": 5129, + "workflowId": "5JALWgQdOiSV2uSN", + "versionId": "595e83c9-ea18-4d33-855a-8666fbcb0304", + "event": "activated", + "userId": "0a88c0b1-928e-4412-896e-c5d1c99b2029" + } + ] + } +} \ No newline at end of file