This workflow follows the Agent → Gmail Tool recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"nodes": [
{
"parameters": {
"descriptionType": "manual",
"toolDescription": "Utiliz\u00e1 esta herramienta para generar reportes t\u00e9cnicos, informes semanales de clima o documentos de an\u00e1lisis profesional. El output debe ser profesional y seguir la estructura de Resumen, An\u00e1lisis, Recomendaciones y Proyecci\u00f3n.\nUtiliz\u00e1 esta herramienta para crear nuevos informes, leer contenido de documentos existentes o actualizar archivos con nuevas recomendaciones t\u00e9cnicas.",
"folderId": "default",
"title": "=Informe T\u00e9cnico - {{ $now.format('dd/MM/yyyy') }}"
},
"type": "n8n-nodes-base.googleDocsTool",
"typeVersion": 2,
"position": [
5456,
512
],
"id": "5983bdfe-e038-4e9c-8d7b-ea57a9282e95",
"name": "Tool_docs",
"credentials": {
"googleDocsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"httpMethod": "POST",
"path": "chat",
"responseMode": "responseNode",
"options": {
"allowedOrigins": "https://tuclima-mundial.onrender.com",
"binaryPropertyName": "data0",
"responseHeaders": {
"entries": [
{
"name": "Access-Control-Allow-Origin",
"value": "*"
},
{
"name": "Access-Control-Allow-Headers",
"value": "Content-Type, Authorization, X-N8N-Secret"
}
]
}
}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
3696,
32
],
"id": "4253a590-d7f2-4a08-baf6-fb6e6d5bebfe",
"name": "Webhook"
},
{
"parameters": {
"jsCode": "// Validacion de origen \u2014 sin autenticacion activa\n// Para activar: reemplazar '' por el secreto y configurar X-N8N-Secret en Django\nconst secretEsperado = '';\nconst secretRecibido = $input.first().json.headers?.['x-n8n-secret'] || '';\n\nif (secretEsperado && secretRecibido !== secretEsperado) {\n throw new Error('401 Unauthorized: X-N8N-Secret invalido o ausente');\n}\n\nreturn $input.all();"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
3896,
32
],
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "Validar Secreto"
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 3
},
"conditions": [
{
"leftValue": "={{ $binary.data00.mimeType }}",
"rightValue": "image",
"operator": {
"type": "string",
"operation": "contains"
},
"id": "fccdd151-fb23-4661-9846-6cacec402021"
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 3
},
"conditions": [
{
"id": "14a5d0f6-4cfa-46a1-b2bb-17bfe61dc19a",
"leftValue": "={{ $binary.data00.mimeType }}",
"rightValue": "pdf",
"operator": {
"type": "string",
"operation": "contains"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 3
},
"conditions": [
{
"id": "8e10dc55-d6f2-420e-8014-175aee9f316b",
"leftValue": "={{ $binary.data00.mimeType }}",
"rightValue": "sheet",
"operator": {
"type": "string",
"operation": "contains"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 3
},
"conditions": [
{
"id": "9e173d69-8a7a-4ba8-b534-ccc948eb2b34",
"leftValue": "={{ $binary.data00.mimeType }}",
"rightValue": "csv",
"operator": {
"type": "string",
"operation": "contains"
}
}
],
"combinator": "and"
}
}
]
},
"options": {
"fallbackOutput": "extra"
}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.4,
"position": [
3856,
192
],
"id": "bfe2e228-8d63-4135-9451-bd71749fbfc5",
"name": "Switch"
},
{
"parameters": {
"operation": "pdf",
"binaryPropertyName": "data00",
"options": {}
},
"type": "n8n-nodes-base.extractFromFile",
"typeVersion": 1.1,
"position": [
4240,
176
],
"id": "38e2cc6b-58f0-47c5-ad32-cdc2b40396ce",
"name": "Extract from File (PDF)"
},
{
"parameters": {
"operation": "xlsx",
"binaryPropertyName": "data00",
"options": {
"headerRow": true
}
},
"type": "n8n-nodes-base.extractFromFile",
"typeVersion": 1.1,
"position": [
4240,
320
],
"id": "b7db1146-52c4-4263-af74-c654c1d4da59",
"name": "Extract from File (EXCEL)"
},
{
"parameters": {
"binaryPropertyName": "data00",
"options": {}
},
"type": "n8n-nodes-base.extractFromFile",
"typeVersion": 1.1,
"position": [
4240,
448
],
"id": "55b36b53-4ed9-4ce8-b150-cec4393f0cf2",
"name": "Extract from File (CSV)"
},
{
"parameters": {
"aggregate": "aggregateAllItemData",
"options": {}
},
"type": "n8n-nodes-base.aggregate",
"typeVersion": 1,
"position": [
4432,
256
],
"id": "86b6e583-e2bc-4fd8-8e05-d529bf8aa361",
"name": "Aggregate"
},
{
"parameters": {
"operation": "getAll",
"tableId": "conversaciones_memoria",
"limit": 10,
"filters": {
"conditions": [
{
"keyName": "session_id",
"condition": "eq",
"keyValue": "={{ $json.body.sessionId }}"
}
]
}
},
"type": "n8n-nodes-base.supabase",
"typeVersion": 1,
"position": [
3968,
-208
],
"id": "fa88e8ce-333b-4a77-b547-691c8bcbe239",
"name": "Get many rows",
"alwaysOutputData": true,
"retryOnFail": true,
"credentials": {
"supabaseApi": {
"name": "<your credential>"
}
},
"disabled": true
},
{
"parameters": {
"mode": "combine",
"combineBy": "combineByPosition",
"options": {
"includeUnpaired": true
}
},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.2,
"position": [
4736,
32
],
"id": "8673cd64-b3ea-46c8-93b2-5bf122ca6bc1",
"name": "Merge"
},
{
"parameters": {
"modelName": "models/gemini-3.1-pro-preview-customtools",
"options": {
"maxOutputTokens": 5000
}
},
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"typeVersion": 1,
"position": [
4656,
224
],
"id": "3900c164-f433-4da3-b9b9-08b8c0b57174",
"name": "Google Gemini Chat Model",
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"sessionIdType": "customKey",
"sessionKey": "={{ $('Webhook').item.json.body?.sessionId || $('Webhook').item.json.body?.userId || 'default_session' }}"
},
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"typeVersion": 1.3,
"position": [
4816,
192
],
"id": "bcd7fbf1-c34e-4eb4-81bd-631daa268a93",
"name": "Simple Memory"
},
{
"parameters": {
"toolDescription": "Obtiene datos oce\u00e1nicos exclusivos: altura de olas, direcci\u00f3n del oleaje y periodo. \u00dasala SOLO si el usuario pregunta por condiciones del mar, navegaci\u00f3n o surf.",
"url": "https://marine-api.open-meteo.com/v1/marine",
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "latitude",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', ``, 'string') }}"
},
{
"name": "longitude",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters1_Value', ``, 'string') }}"
},
{
"name": "current",
"value": "wave_height,wave_direction,wave_period,swell_wave_height,swell_wave_period,swell_wave_direction"
},
{
"name": "timezone",
"value": "auto"
},
{
"name": "hourly",
"value": "wave_height,wave_period,swell_wave_height"
}
]
},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "User-Agent",
"value": "TuClimaApp"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequestTool",
"typeVersion": 4.4,
"position": [
4656,
528
],
"id": "a8c65fe3-dd6e-454e-ac80-1a7c792df999",
"name": "obtener_mar",
"rewireOutputLogTo": "ai_tool"
},
{
"parameters": {
"url": "https://api.open-meteo.com/v1/forecast",
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "longitude",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', ``, 'string') }}"
},
{
"name": "latitude",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters1_Value', ``, 'string') }}"
},
{
"name": "timezone",
"value": "auto"
},
{
"name": "forecast_days",
"value": "14"
},
{
"name": "current",
"value": "temperature_2m,relative_humidity_2m,is_day,precipitation,rain,weather_code,cloud_cover,pressure_msl,surface_pressure,wind_speed_10m,wind_direction_10m,soil_temperature_0cm,soil_temperature_6cm,soil_temperature_18cm,soil_temperature_54cm,soil_moisture_0_to_1cm,soil_moisture_3_to_9cm,soil_moisture_9_to_27cm,vapor_pressure_deficit,shortwave_radiation"
},
{
"name": "hourly",
"value": "temperature_2m,relative_humidity_2m,dew_point_2m,precipitation,precipitation_probability,weather_code,pressure_msl,wind_speed_10m,wind_direction_10m,vapor_pressure_deficit,et0_fao_evapotranspiration"
},
{
"name": "daily",
"value": "weather_code,temperature_2m_max,temperature_2m_min,precipitation_sum,precipitation_probability_max,et0_fao_evapotranspiration"
}
]
},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "User-Agent",
"value": "TuClimaApp"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequestTool",
"typeVersion": 4.4,
"position": [
4816,
528
],
"id": "1f881a4d-eed6-4e15-a53c-05e6e2d0b138",
"name": "consultar_agro"
},
{
"parameters": {
"url": "https://api.open-meteo.com/v1/forecast",
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "latitude",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', ``, 'string') }}"
},
{
"name": "longitude",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters1_Value', ``, 'string') }}"
},
{
"name": "models",
"value": "gfs_seamless"
},
{
"name": "timezone",
"value": "auto"
},
{
"name": "daily",
"value": "sunrise,sunset"
},
{
"name": "current",
"value": "temperature_2m,relative_humidity_2m,is_day,weather_code,cloud_cover,pressure_msl,wind_speed_10m,wind_direction_10m,wind_gusts_10m,visibility"
},
{
"name": "hourly",
"value": "temperature_2m,dew_point_2m,cloud_cover,cloud_cover_low,cloud_cover_mid,cloud_cover_high,wind_speed_10m,wind_speed_950hPa,wind_direction_950hPa,temperature_950hPa,wind_speed_850hPa,wind_direction_850hPa,temperature_850hPa,wind_speed_700hPa,wind_direction_700hPa,temperature_700hPa,wind_speed_300hPa,wind_direction_300hPa,temperature_300hPa,cape,lifted_index"
}
]
},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "User-Agent",
"value": "TuClimaApp"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequestTool",
"typeVersion": 4.4,
"position": [
4848,
368
],
"id": "ab01e105-6d48-4edb-81c9-3a53ddab48f8",
"name": "consultar_aereo"
},
{
"parameters": {
"descriptionType": "manual",
"toolDescription": "Usa esta herramienta SOLO cuando el usuario te diga su nombre, su cargo o rol, o informaci\u00f3n personal importante para guardar en su perfil.",
"tableId": "usuarios",
"fieldsUi": {
"fieldValues": [
{
"fieldId": "nombre",
"fieldValue": "={{ $fromAI(\"nombre\") }}"
},
{
"fieldId": "rol",
"fieldValue": "usuario"
},
{
"fieldId": "ultima_interaccion",
"fieldValue": "={{ $now }}"
},
{
"fieldId": "resumen",
"fieldValue": "={{ $fromAI(\"resumen\") }}"
},
{
"fieldId": "email",
"fieldValue": "={{ $fromAI(\"email\") }}"
},
{
"fieldId": "ubicacion",
"fieldValue": "={{ $fromAI(\"ubicacion\") }}"
},
{
"fieldId": "trabajo",
"fieldValue": "={{ $fromAI(\"trabajo\") }}"
}
]
}
},
"type": "n8n-nodes-base.supabaseTool",
"typeVersion": 1,
"position": [
5328,
512
],
"id": "b6ea0368-1bb8-459b-8cf1-797a628629a0",
"name": "tool_guardar_usuario",
"notesInFlow": false,
"credentials": {
"supabaseApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"url": "https://api.open-meteo.com/v1/forecast",
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "latitude",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', ``, 'string') }}"
},
{
"name": "longitude",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters1_Value', ``, 'string') }}"
},
{
"name": "timezone",
"value": "auto"
},
{
"name": "current",
"value": "shortwave_radiation,direct_radiation,diffuse_radiation,wind_speed_10m,temperature_2m,weather_code,pressure_msl,relative_humidity_2m"
},
{
"name": "hourly",
"value": "shortwave_radiation,wind_speed_10m,temperature_2m,pressure_msl"
}
]
},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "User-Agent",
"value": "TuClimaApp"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequestTool",
"typeVersion": 4.4,
"position": [
4992,
368
],
"id": "09d1838b-01e2-45ad-8e21-d67b05eca106",
"name": "consultar_energia"
},
{
"parameters": {
"url": "https://power.larc.nasa.gov/api/temporal/climatology/point",
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "latitude",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', ``, 'string') }}"
},
{
"name": "longitude",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters1_Value', ``, 'string') }}"
},
{
"name": "parameters",
"value": "ALLSKY_SFC_SW_DWN,T2M,WS10M"
},
{
"name": "community",
"value": "RE"
},
{
"name": "format",
"value": "JSON"
}
]
},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "User-Agent",
"value": "TuClimaApp"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequestTool",
"typeVersion": 4.4,
"position": [
4976,
512
],
"id": "78986d53-eff8-441e-a6d6-571a864dc506",
"name": "consultar_nasa"
},
{
"parameters": {
"descriptionType": "manual",
"toolDescription": "\u00dasala SIEMPRE al inicio de la conversaci\u00f3n o cuando necesites saber el nombre del usuario, su correo, su ubicaci\u00f3n (latitud/longitud) o sus cultivos. No preguntes datos que ya est\u00e9n en esta base de datos.",
"operation": "getAll",
"tableId": "usuarios",
"returnAll": true
},
"type": "n8n-nodes-base.supabaseTool",
"typeVersion": 1,
"position": [
5152,
512
],
"id": "733bdb4c-7bad-407d-9769-1378758e27be",
"name": "consultar_perfil",
"credentials": {
"supabaseApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"descriptionType": "manual",
"toolDescription": "\u00dasala SOLAMENTE cuando el usuario pida expl\u00edcitamente recibir reportes diarios autom\u00e1ticos por correo. Requiere el email del usuario.\nEs OBLIGATORIO pedirle el 'email' y la 'hora' (n\u00famero del 0 al 23) y 'zona' (pa\u00eds o ciudad) a la que quiere recibir el reporte.\nSi no te dice el pa\u00eds, PREG\u00daNTALE, es obligatorio. Convierte su respuesta a formato IANA (ej: si dice 'Espa\u00f1a', env\u00eda 'Europe/Madrid').",
"operation": "update",
"tableId": "usuarios",
"filters": {
"conditions": [
{
"keyName": "email",
"condition": "eq",
"keyValue": "={{ $fromAI(\"email\") }}"
}
]
},
"fieldsUi": {
"fieldValues": [
{
"fieldId": "suscripcion_diaria",
"fieldValue": "={{ true }}"
},
{
"fieldId": "hora_preferida",
"fieldValue": "={{ $fromAI(\"hora\") }}"
},
{
"fieldId": "zona_horaria",
"fieldValue": "={{ $fromAI(\"zona\") }}"
}
]
}
},
"type": "n8n-nodes-base.supabaseTool",
"typeVersion": 1,
"position": [
5312,
368
],
"id": "7fd47e25-07a9-4d2f-b1ff-76fd27996987",
"name": "activar_alertas",
"credentials": {
"supabaseApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"descriptionType": "manual",
"toolDescription": "Usa esta herramienta cuando el usuario pida un 'reporte', 'informe' o 'bit\u00e1cora'. Debes redactar un resumen t\u00e9cnico formal del clima o de algunos de los modos profesionales (agro, naval, a\u00e9reo o energ\u00eda) y pasarlo en el campo 'texto_reporte', junto con el nombre del usuario en 'nombre_capitan'.",
"operation": "append",
"documentId": {
"__rl": true,
"value": "1z0ujWhoyvGjfc9rhHdf6CrENCKc44VK-9QXxaZtVMXE",
"mode": "list",
"cachedResultName": "DB_TuClima_Usuarios",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1z0ujWhoyvGjfc9rhHdf6CrENCKc44VK-9QXxaZtVMXE/edit?usp=drivesdk"
},
"sheetName": {
"__rl": true,
"value": 558154433,
"mode": "list",
"cachedResultName": "reportes",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1z0ujWhoyvGjfc9rhHdf6CrENCKc44VK-9QXxaZtVMXE/edit#gid=558154433"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"Fecha": "={{ $now }}",
"Capit\u00e1n": "={{ $fromAI(\"nombre_capitan\") }}",
"Informe T\u00e9cnico": "={{ $fromAI(\"texto_reporte\") }}"
},
"matchingColumns": [],
"schema": [
{
"id": "Fecha",
"displayName": "Fecha",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "Capit\u00e1n",
"displayName": "Capit\u00e1n",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "Informe T\u00e9cnico",
"displayName": "Informe T\u00e9cnico",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"type": "n8n-nodes-base.googleSheetsTool",
"typeVersion": 4.7,
"position": [
5456,
384
],
"id": "d781246b-a73a-4f9b-8b7d-44e257270a72",
"name": "Tool_Reportes",
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"descriptionType": "manual",
"toolDescription": "\u00dasala SOLO cuando el usuario pida expl\u00edcitamente enviar un correo, reporte o notificaci\u00f3n. Debes generar el contenido del correo basado en la conversaci\u00f3n o los datos del clima.",
"sendTo": "={{ $fromAI(\"destinatario\") }}",
"subject": "={{ $fromAI(\"asunto\") }}",
"message": "={{ $fromAI(\"mensaje\") }}",
"options": {}
},
"type": "n8n-nodes-base.gmailTool",
"typeVersion": 2.2,
"position": [
5600,
400
],
"id": "4eca6d9e-60d7-4213-a996-52a7e67b4431",
"name": "enviar_correo",
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.toolSerpApi",
"typeVersion": 1,
"position": [
5152,
384
],
"id": "3be712e0-76c7-4f35-a2d8-1aa347846c76",
"name": "SerpAPI",
"credentials": {
"serpApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"description": "Genera un PDF. Debes enviar el texto del reporte en el par\u00e1metro llamado 'contenido_reporte'. Devuelve un link\n\n\u00dasalo \u00daNICAMENTE cuando el usuario pida expl\u00edcitamente generar un archivo PDF, documento o reporte para descargar. NO lo uses si pide gr\u00e1ficos interactivos, visualizaciones o un Power BI",
"workflowId": {
"__rl": true,
"value": "AOjex81dUN9cod1j",
"mode": "list",
"cachedResultUrl": "/workflow/AOjex81dUN9cod1j",
"cachedResultName": "Modulo_Generar_Reporte"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {
"contenido_reporte": "={{ $fromAI(\"contenido_reporte\", \"Texto del reporte redactado en formato HTML puro\", \"string\") }}"
},
"matchingColumns": [
"contenido_reporte"
],
"schema": [
{
"id": "contenido_reporte",
"displayName": "contenido_reporte",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
}
},
"type": "@n8n/n8n-nodes-langchain.toolWorkflow",
"typeVersion": 2.2,
"position": [
5600,
528
],
"id": "6b2376ad-7972-40da-adb9-eb746ffb3a67",
"name": "Modulo_Generar_Reporte",
"rewireOutputLogTo": "ai_tool"
},
{
"parameters": {
"promptType": "define",
"text": "={{ $('Webhook').item.json.body.chatInput }}\n{{ \n /* Si es una lista de Excel (Array/Objeto), convi\u00e9rtela a texto */\n ($json.data && typeof $json.data !== 'string') ? JSON.stringify($json.data) : \n /* Si es PDF (Texto), \u00fasalo directo */\n ($json.data || $json.text || \n /* Si no es nada de lo anterior, muestra todo lo que haya */\n JSON.stringify($json)) \n}}",
"options": {
"systemMessage": "\n### \ud83d\udc41\ufe0f PRIORIDAD 0 \u2014 VISI\u00d3N ARTIFICIAL (AN\u00c1LISIS DE IM\u00c1GENES) ###\n\nCuando el contexto incluya **[AN\u00c1LISIS VISUAL \u2014 VISI\u00d3N IA]**, significa que el usuario envi\u00f3 una imagen\nque YA fue pre-procesada por Gemini Vision. El an\u00e1lisis t\u00e9cnico visual est\u00e1 incluido en el contexto.\n\n**TU ROL EN ESTE CASO:**\n1. \ud83d\udccb Presentar el an\u00e1lisis visual de forma clara y estructurada\n2. \ud83c\udf26\ufe0f Usar `obtener_clima` + herramienta sectorial (`obtener_mar`, `consultar_agro`, `consultar_aereo` o `consultar_energia`) \n para enriquecer con datos meteorol\u00f3gicos reales de la zona identificada en la imagen\n3. \ud83d\udd17 Cruzar el an\u00e1lisis visual con los datos clim\u00e1ticos actuales\n4. \u26a0\ufe0f Emitir diagn\u00f3stico de riesgos operativos y recomendaciones concretas\n\n**CASOS DE USO POR SECTOR:**\n\n\ud83d\udea2 **Naval / \u2688 A\u00e9reo:**\n- Radar meteorol\u00f3gico \u2192 frentes, celdas convectivas, zonas de turbulencia, gradientes de presi\u00f3n\n- Mapa sin\u00f3ptico \u2192 an\u00e1lisis de sistemas, pron\u00f3stico de movimiento\n- Carta de navegaci\u00f3n \u2192 riesgos en ruta, SIGMET activos, zonas de icing\n\u2192 SIEMPRE cruzar con `obtener_mar` u `obtener_clima` para datos actuales\n\n\ud83c\udf3e **Agro / \u26a1 Energ\u00eda:**\n- Foto de cultivo \u2192 estr\u00e9s h\u00eddrico, estado fenol\u00f3gico, da\u00f1os por eventos clim\u00e1ticos\n- Foto de lote/suelo \u2192 an\u00e1lisis de condiciones para siembra/cosecha\n- Infraestructura solar/e\u00f3lica \u2192 evaluaci\u00f3n de condiciones operativas\n\u2192 SIEMPRE cruzar con `consultar_agro` o `consultar_energia` + `obtener_clima`\n\n**FORMATO DE RESPUESTA PARA IM\u00c1GENES:**\n\ud83d\udcf8 **An\u00e1lisis Visual**\n\u2705 Observaciones t\u00e9cnicas de la imagen\n\n\ud83c\udf26\ufe0f **Datos Clim\u00e1ticos Actuales**\n[Datos de herramientas]\n\n\u26a0\ufe0f **Diagn\u00f3stico de Riesgos**\n[Riesgos combinados imagen + clima]\n\n\ud83d\udca1 **Recomendaciones Operativas**\n[Acciones concretas basadas en an\u00e1lisis completo]\n\n### \ud83d\udee1\ufe0f PROTOCOLO DE USO DE HERRAMIENTAS (JERARQU\u00cdA ACTUALIZADA) ###\n\nTU MISI\u00d3N ES SER UN OFICIAL T\u00c9CNICO. Sigues este orden estricto de decisi\u00f3n:\n\n1. \ud83e\udd47 **PRIORIDAD 1: HERRAMIENTAS B\u00c1SICAS (An\u00e1lisis Normal)**\n *Para consultas normales de datos, ESTAS son tu primera opci\u00f3n:*\n \n **\u2705 CASOS DE USO PRINCIPAL:**\n - **\ud83c\udf24\ufe0f Clima General:** \"\u00bfLlueve en Madrid?\" \u2192 `obtener_clima`\n - **\ud83d\ude9c An\u00e1lisis Agr\u00edcola:** \"\u00bfC\u00f3mo est\u00e1n las condiciones para cultivos?\" \u2192 `obtener_agro` + `obtener_clima`\n - **\u2693 An\u00e1lisis Naval:** \"\u00bfC\u00f3mo est\u00e1 el puerto?\" \u2192 `obtener_mar` + `obtener_clima`\n - **\u2708\ufe0f An\u00e1lisis A\u00e9reo:** \"Condiciones de vuelo en X\" \u2192 `obtener_clima` + an\u00e1lisis aeron\u00e1utico\n - **\u26a1 An\u00e1lisis Energ\u00e9tico:** \"\u00bfQu\u00e9 tal la energ\u00eda solar?\" \u2192 `obtener_energia` + `obtener_clima`\n - **\ud83d\udcc4 Generaci\u00f3n PDF:** Para completar reportes profesionales \u2192 Cualquier herramienta\n - **\u2708\ufe0f Vuelos Comerciales:** Estado de vuelos \u2192 `AviationStack`\n - **\ud83d\udd22 Matem\u00e1ticas:** C\u00e1lculos \u2192 `Calculator`\n\n2. \ud83e\udd48 **PRIORIDAD 2: SUBWORKFLOWS ESPECIALIZADOS (Solo Gr\u00e1ficos y Visualizaciones)**\n *Para solicitudes ESPEC\u00cdFICAS de gr\u00e1ficos, modelos y visualizaciones:*\n \n **\ud83d\udccb CRITERIOS DE ACTIVACI\u00d3N DE SUBWORKFLOWS:**\n - **\ud83d\ude9c Agro + Gr\u00e1ficos:** Solicitud de GR\u00c1FICO + agricultura \u2192 USA `Modulo_Agro_BI`\n - **\u2693 Naval + Gr\u00e1ficos:** Solicitud de GR\u00c1FICO + naval \u2192 USA `Modulo_Naval_BI`\n - **\u2708\ufe0f A\u00e9reo + Gr\u00e1ficos:** Solicitud de GR\u00c1FICO + aviaci\u00f3n \u2192 USA `Modulo_Aereo_BI`\n - **\u26a1 Energ\u00eda + Gr\u00e1ficos:** Solicitud de GR\u00c1FICO + energ\u00eda \u2192 USA `Modulo_Energia_BI`\n\n **\ud83d\udccb PALABRAS CLAVE QUE ACTIVAN SUBWORKFLOWS:**\n - \"arma/hace/generar gr\u00e1fico\", \"dashboard\", \"visualizaci\u00f3n\", \"chart\", \"plot\"\n - \"trending\", \"comparativa visual\", \"gr\u00e1fico de tendencias\", \"modelo\"\n\n\ud83d\udea8 REGLA DE DATOS METEOROL\u00d3GICOS:\nEres un asistente profesional. Tienes PROHIBIDO inventar o adivinar datos del clima. Si el usuario te pregunta por el clima actual o el pron\u00f3stico de CUALQUIER lugar, DEBES usar OBLIGATORIAMENTE la herramienta obtener_clima antes de responder.\n\n\ud83d\udea8 SECUENCIA OBLIGATORIA PARA GR\u00c1FICOS Y AN\u00c1LISIS:\nSi el usuario solicita un gr\u00e1fico, dashboard, visualizaci\u00f3n o an\u00e1lisis de un lugar espec\u00edfico (ej: Madrid), DEBES seguir exactamente estos DOS PASOS en orden:\nPASO 1: Usa SIEMPRE la herramienta obtener_clima y los nodos de busqueda para areas especificas (cunsultar_agro, consultar_aereo, conulstar_energia o obtener_mar ).\nPASO 2: Una vez que obtener_clima y los nodos de \u00e1reas espec\u00edficas te devuelvan los datos, env\u00edalos COMPLETOS usando la herramienta BI correspondiente (Agro_BI, Naval_BI, Aereo_BI o Energia_BI) para que genere los datos del gr\u00e1fico din\u00e1mico.\nPROHIBIDO: Nunca intentes usar el m\u00f3dulo BI sin haber obtenido primero el clima. Nunca uses el m\u00f3dulo de Reporte/PDF a menos que el usuario pida expl\u00edcitamente descargar un documento. No menciones \"Power BI\" ni \"links\", los gr\u00e1ficos ahora se dibujan directamente en la pantalla del chat.\n\nSi el usuario pide un \"PDF\" o \"Reporte\", usa el m\u00f3dulo de generar reportes.\n\nNUNCA mezcles ambas acciones. NUNCA ofrezcas un PDF si el usuario te pidi\u00f3 un gr\u00e1fico interactivo.\n \n \ud83d\udce4 **FLUJO DE DATOS A SUBWORKFLOWS:**\n Cuando detectes solicitud de gr\u00e1fico:\n 1. Recopilar datos b\u00e1sicos con herramientas normales\n 2. Pasar TODA la informaci\u00f3n al subworkflow correspondiente\n 3. El subworkflow procesa y genera la visualizaci\u00f3n \n 4. NO necesitas explicar qu\u00e9 tipo de gr\u00e1fico - el subworkflow lo decide autom\u00e1ticamente\n \n **EJEMPLOS DE ACTIVACI\u00d3N:**\n * \u2705 \"Arma un gr\u00e1fico de energ\u00eda solar para la semana\" \u2192 `Modulo_Energia_BI`\n * \u2705 \"Genera una visualizaci\u00f3n de condiciones navales\" \u2192 `Modulo_Naval_BI`\n * \u2705 \"Quiero un dashboard de las condiciones agr\u00edcolas\" \u2192 `Modulo_Agro_BI`\n\n**\ud83d\udccd PROTOCOLO DE ENRUTAMIENTO INTELIGENTE:**\n\n\ud83e\udd16 **DECISI\u00d3N AUTOM\u00c1TICA SIMPLE:**\n1. **Sin gr\u00e1ficos** \u2192 Herramientas b\u00e1sicas (obtener_clima, obtener_agro, etc.)\n2. **Con gr\u00e1ficos** \u2192 Subworkflows (Modulo_Agro_BI, Modulo_Naval_BI, Modulo_Aereo_BI, Modulo_Energia_BI)\n3. **Ubicaci\u00f3n** \u2192 Siempre requerida\n\nEJEMPLOS DE ROUTING:\n\u2705 \"\u00bfC\u00f3mo est\u00e1 la energ\u00eda en Sevilla?\" \u2192 obtener_energia\n\u2705 \"Arma un gr\u00e1fico de energ\u00eda en Sevilla\" \u2192 Modulo_Energia_BI\n\n3. \ud83e\udd49 **PRIORIDAD 3: AN\u00c1LISIS DE ARCHIVOS**\n - Si el usuario subi\u00f3 un documento (PDF, Excel, CSV, Imagen), tu prioridad absoluta es leer y analizar ese contenido antes de buscar nada fuera.\n\n4. \ud83d\udd0d **PRIORIDAD 4: B\u00daSQUEDA WEB (\u00daltimo Recurso)**\n - USA `SerpAPI` / `Google` **SOLO** si:\n A) Piden noticias de actualidad (ej: \"\u00bfPor qu\u00e9 se inund\u00f3 Brasil ayer?\").\n B) Piden explicaciones te\u00f3ricas (ej: \"\u00bfQu\u00e9 es la ciclog\u00e9nesis?\").\n C) Tus herramientas t\u00e9cnicas no tienen la respuesta.\n\n\ud83d\udcc4 **PROTOCOLO PARA GENERACI\u00d3N DE ARCHIVOS PDF**\nCuando generes un PDF profesional o documento t\u00e9cnico, usa libremente las herramientas b\u00e1sicas:\n- `obtener_clima`, `obtener_mar`, `obtener_agro`, `obtener_aereo`, `obtener_energia`\n- Estas herramientas te dan datos complementarios para enriquecer el reporte\n\n\n\ud83c\udfaf **FLUJO RECOMENDADO:**\n1. **An\u00e1lisis normal:** Herramientas b\u00e1sicas \u2192 Datos + respuesta\n2. **Gr\u00e1ficos:** Subworkflows \u2192 Datos + Visualizaci\u00f3n \n3. **PDFs:** Herramientas b\u00e1sicas \u2192 An\u00e1lisis + Documento\n\n**\ud83d\udccd REGLA CR\u00cdTICA DE UBICACI\u00d3N:**\nTodos los an\u00e1lisis REQUIEREN ubicaci\u00f3n geogr\u00e1fica espec\u00edfica. Si el usuario no la menciona:\n- Pregunta: \"\u00bfPara qu\u00e9 ubicaci\u00f3n necesitas el an\u00e1lisis?\"\n- Solo procede cuando tengas la ubicaci\u00f3n confirmada\n\nEres el Asistente Virtual experto de la plataforma 'TuClima'. Tu tono es profesional, c\u00e1lido y fluido. Nunca menciones que eres una IA de Google, pres\u00e9ntate siempre como parte del equipo de TuClima.\n\nINSTRUCCI\u00d3N DE MEMORIA:\nAl iniciar la conversaci\u00f3n, REVISA SIEMPRE si tienes contexto de memoria previo:\n- Si \"es_primera_vez: true\" \u2192 Usa herramienta \"consultar_perfil\" si es necesario para obtener datos del usuario\n- Si \"es_primera_vez: false\" \u2192 Contin\u00faa la conversaci\u00f3n bas\u00e1ndote en el historial de memoria\n- Si tienes los datos del usuario, personaliza respuestas usando su nombre y trabajo cuando sea relevante\n- Si no tienes datos del usuario, NO preguntes informaci\u00f3n personal, simplemente responde lo solicitado\n- MANT\u00c9N el contexto de conversaciones anteriores y haz referencia a ellas cuando sea \u00fatil\n\n---\n\n### \ud83d\udeab REGLA DE ORO: PROTOCOLO DE FLUIDEZ (\u00a1CRUCIAL!)\nEl usuario odia la repetici\u00f3n. Act\u00faa como si estuvieras en una llamada telef\u00f3nica continua, no en correos electr\u00f3nicos separados.\n\n1\ud83d\udde3\ufe0f PROTOCOLO DE CONVERSACI\u00d3N NATURAL (ANTI-ROBOT):\n1. CERO REPETICI\u00d3N DE NOMBRE: Ya sabes qui\u00e9n es el usuario. NO uses su nombre en cada frase. \u00dasalo solo 1 vez cada 5 o 6 interacciones, o si es estrictamente necesario para enfatizar.\n2. NO VUELVAS A SALUDAR: Si el usuario te hace una pregunta directa (\"dame el clima\"), NO respondas \"\u00a1Hola Santino! Aqu\u00ed tienes...\". Responde DIRECTO al dato: \"Aqu\u00ed tienes el reporte...\".\n3. MEMORIA CONTINUA: Utiliza el sistema de memoria persistente para mantener contexto. Si hay conversaciones anteriores, haz referencia a ellas de manera natural. No act\u00faes como si nos acab\u00e1ramos de conocer si ya hay historial de conversaci\u00f3n.\n4. ESTILO EJECUTIVO: S\u00e9 breve, conciso y profesional. Evita muletillas como \"Es un placer ayudarte\" o \"Como asistente de IA\".\n\n---\n\n\ud83d\udd75\ufe0f PROTOCOLO DE IDENTIDAD (SILENCIOSO):\n1. Si el usuario se presenta (ej: \"Soy Juan\"): Responde CORTAMENTE: \"Un gusto, Juan. \u00bfEn qu\u00e9 puedo ayudarte hoy?\".\n2. PROHIBIDO PREGUNTAR EL ROL O PROFESI\u00d3N: Nunca detengas la conversaci\u00f3n para preguntar \"\u00bfQu\u00e9 rol tienes?\" o \"\u00bfA qu\u00e9 te dedicas?\". Asume que es un usuario general hasta que \u00e9l mismo te diga lo contrario espont\u00e1neamente.\n3. Si el usuario NO se presenta: NO preguntes su nombre. Responde directamente a su consulta clim\u00e1tica con amabilidad. Tu prioridad es SERVIR, no registrar datos.\n\nINSTRUCCI\u00d3N INICIAL DE INTERACCI\u00d3N:\n1. Saluda al usuario por su Nombre (SOLO si ya lo sabes). Si no lo sabes, usa un simple \"\u00a1Hola!\" o \"Buenos d\u00edas\".\n2. ANTES de mostrar cualquier tabla, escribe una frase amable sobre la situaci\u00f3n (ej: \"El clima en Barcelona est\u00e1 tranquilo...\").\n3. DESPU\u00c9S de esa frase, muestra los datos.\n\n---\n\n\ud83d\udcac **PROTOCOLO MEJORADO DE ESCRITURA:**\n\n**Regla 1: Uso inteligente de emojis**\nNo llenes de emojis los mensajes. \u00dasalos \u00fanicamente para:\n- Clarificar mensajes complejos\n- Alertas importantes o cr\u00edticas \n- Llamar la atenci\u00f3n sobre datos cruciales\n- Mantener coherencia visual profesional\n\n**Regla 2: Enfoque y relevancia**\n- Responde directamente lo que pregunta el usuario\n- Proporciona detalles \u00fatiles y contexto relevante\n- No pierdas el foco principal de la consulta\n- Agrega informaci\u00f3n complementaria solo si enriquece la respuesta\n\n**Regla 3: Claridad y profesionalismo**\n- Estructura respuestas de forma l\u00f3gica y prolija\n- Proporciona recomendaciones espec\u00edficas cuando sean necesarias\n- Justifica t\u00e9cnicamente tus sugerencias\n- Mant\u00e9n un lenguaje profesional pero accesible\n- Ayuda de forma proactiva identificando necesidades impl\u00edcitas\n\n---\n\n### \ud83d\udcdd PROTOCOLO DE REPORTES EJECUTIVOS (ESTRICTO) ###\n\nCuando el usuario pida un \"reporte\", \"PDF\", \"googledocs\", \"documento\", o \"resumen ejecutivo\", DEBES redactarlo utilizando EXCLUSIVAMENTE c\u00f3digo HTML puro.\n\n\ud83d\udeab **TIENES ESTRICTAMENTE PROHIBIDO** usar Markdown (no uses asteriscos ** ni numerales #).\n\n**Utiliza estas etiquetas HTML para darle un formato visual profesional:**\n\n- `<h1>` para el t\u00edtulo principal\n- `<h2>` para subt\u00edtulos de secci\u00f3n \n- `<b>` o `<strong>` para resaltar datos cr\u00edticos en negrita\n- `<ul>` y `<li>` para hacer listas con vi\u00f1etas\n- `<table>`, `<tr>`, `<th>` y `<td>` si necesitas hacer un cuadro comparativo del clima\n- Puedes usar `<span style=\"color: red;\">` para alertas de clima severo\n\n**Env\u00eda TODO este c\u00f3digo HTML directamente a la herramienta correspondiente. NUNCA envuelvas el HTML en bloques de c\u00f3digo (no uses ```html). Entr\u00e9galo como texto plano.**\n\n---\n\n### \ud83d\ude9c MODO 1: AGRO INTELLIGENCE (L\u00f3gica Web TuClima)\nTu objetivo es replicar EXACTAMENTE los c\u00e1lculos del backend de la plataforma.\n\nMOTORES DE C\u00c1LCULO (Basado en views.py):\n\n1. \ud83c\udf31 MOTOR DE CRECIMIENTO (GDD - Base 10 Ma\u00edz):\n - F\u00f3rmula: ((T_Max + T_Min) / 2) - 10. (Si < 0, es 0).\n - Interpretaci\u00f3n: Acumulaci\u00f3n t\u00e9rmica para fotos\u00edntesis.\n - Estado: > 15 Diario = \"Crecimiento Vigoroso\".\n\n2. \ud83d\ude9c MOTOR DE PULVERIZACI\u00d3N (Delta T - Calidad de Gota):\n - F\u00f3rmula: Temp - (Temp * Humedad / 100) - 1.5. (Si < 0, usar 0.5).\n - \ud83d\udfe1 RIESGO INVERSI\u00d3N (< 2): La gota no desciende, queda suspendida. Deriva masiva.\n - \ud83d\udfe2 \u00d3PTIMA (2 - 8): M\u00e1xima absorci\u00f3n sist\u00e9mica.\n - \ud83d\udfe1 MARGINAL (8 - 10): Usar gota gruesa o coadyuvantes.\n - \ud83d\udd34 CR\u00cdTICA (> 10 O Viento > 15 km/h): Evaporaci\u00f3n instant\u00e1nea. P\u00e9rdida econ\u00f3mica.\n\n3. \ud83e\ude7a MOTOR DE SUELO (Estratigraf\u00eda T\u00e9rmica):\n - 0 cm (Superficie): Riesgo de \"golpe de calor\" en cuello de pl\u00e1ntula. Volatilidad de herbicidas.\n - 6 cm (Cama de Siembra): CR\u00cdTICO GERMINACI\u00d3N. Ma\u00edz requiere >10\u00b0C estables.\n - 18 cm (Ra\u00edz Activa): Absorci\u00f3n de nutrientes. Si T < 15\u00b0C, bloqueo de F\u00f3sforo (hojas violetas).\n - 54 cm (Profundo): Inercia t\u00e9rmica y reserva.\n\n4. \ud83d\udca7 BALANCE H\u00cdDRICO & ESTR\u00c9S (VPD):\n - Balance: Lluvia - ETo (Evapotranspiraci\u00f3n).\n - VPD > 1.6 kPa: \ud83d\udd34 ESTR\u00c9S (Cierre de Estomas).\n - VPD < 0.4 kPa: \ud83d\udfe1 RIESGO F\u00daNGICO (Hoja mojada).\n\n\ud83d\udcca FORMATO CHAT (Dashboard Agro Web):\n[Frase Humana]\n\"\ud83d\ude9c REPORTE AGRO INTELLIGENCE: [Ubicaci\u00f3n]\n\ud83c\udf21\ufe0f GDD Diario: [Calc] ([Estado])\n\ud83d\udca6 PULVERIZACI\u00d3N (Delta T: [Calc]): [Estado]\n - Condici\u00f3n: [\ud83d\udfe2/\ud83d\udfe1/\ud83d\udd34] | Viento: [X] km/h\n\ud83c\udf31 SUELO (Temp): Cama(6cm): [X]\u00b0C | Ra\u00edz(18cm): [X]\u00b0C\n\ud83d\udca7 BALANCE (Hoy): Lluvia [X]mm - ETo [X]mm = [Neto]mm\n\u26a0\ufe0f ESTR\u00c9S: VPD [X] kPa ([Estado])\"\n---\n\n### \u2693 MODO 2: NAVAL COMMAND (L\u00f3gica Web TuClima)\nTu objetivo es replicar EXACTAMENTE los c\u00e1lculos del backend.\nHERRAMIENTAS: 'obtener_clima' + 'obtener_mar'.\n\nMOTORES DE C\u00c1LCULO (Basado en views.py):\n\n1. \ud83c\udf2c\ufe0f VIENTO (Factor 0.54):\n - Convertir SIEMPRE: km/h * 0.5399 = NUDOS (kt).\n - ESCALA BEAUFORT:\n * 0-1: Calma/Ventolina.\n * 4-6: Brisa Muy D\u00e9bil.\n * 7-10: Brisa D\u00e9bil.\n * 11-16: Brisa Moderada.\n * 17-21: Brisa Fresca.\n * 22-27: Brisa Fuerte (\u26a0\ufe0f Atenci\u00f3n).\n * 28-33: Viento Fuerte.\n * >34: TEMPORAL (\u26d4 Peligro).\n\n2. \ud83c\udf0a ESTADO DEL MAR (Escala Douglas):\n - 0-0.1m: Calma/Rizada.\n - 0.1-0.5m: Marejadilla.\n - 0.5-1.25m: Marejada.\n - 1.25-2.5m: Fuerte Marejada.\n - >2.5m: GRUESA (\u26d4 Peligro).\n\n3. \ud83d\udea6 SEM\u00c1FORO DE PUERTO (Regla Cr\u00edtica):\n - \ud83d\udfe2 ABIERTO: Condiciones normales.\n - \ud83d\udfe1 PRECAUCI\u00d3N: Olas 1.5-2.5m O Viento 15-25 kt.\n - \ud83d\udd34 CERRADO: Olas > 2.5m O Viento > 25 kt.\n\n4. \ud83e\uddea F\u00cdSICA Y SUPERVIVENCIA:\n - VISIBILIDAD: Metros / 1852 = Millas N\u00e1uticas (NM).\n - TEMP AGUA (Estimada): (Temp_Aire * 0.85) + 2.\n - HIPOTERMIA (Regla): Si Agua < 15\u00b0C -> Tiempo supervivencia < 6 horas. Si < 5\u00b0C -> < 45 min.\n\nFORMATO CHAT (Dashboard Naval):\n[Frase Humana]\n\"\u2693 REPORTE NAVAL: [Ubicaci\u00f3n]\n\ud83d\udccd Coordenadas: [Lat, Lon]\n\ud83d\udea6 CONDICI\u00d3N DE PUERTO: [\ud83d\udfe2/\ud83d\udfe1/\ud83d\udd34] ([Raz\u00f3n])\n\ud83c\udf0a MAR (Douglas): Olas [X]m ([Estado]) | Periodo [X]s\n\ud83c\udf2c\ufe0f VIENTO (Beaufort): [X] kt ([Desc]) | R\u00e1fagas [X] kt\n\ud83e\udded VIS: [X] NM | Agua (Est): [Calc]\u00b0C | QNH: [X] hPa\n\u26a0\ufe0f TENDENCIA: [Consejo breve]\"\n\n---\n\n### \u2708\ufe0f MODO 3: FLIGHT DECK (A\u00c9REO)\nPara pilotos y aviaci\u00f3n.\n\nMOTORES DE C\u00c1LCULO:\n1. BASE DE NUBES (Techo): (Temp - Punto_Rocio) * 400 = Pies (ft).\n2. DENSIDAD DE ALTITUD: (1013 - QNH) * 30 + 120 * (Temp - 15) = Pies (ft).\n3. ALERTA WIND SHEAR: Si (R\u00e1faga - Viento) > 15kt.\n4. CATEGOR\u00cdA: LIFR / IFR / MVFR / VFR.\n\nTu objetivo es replicar EXACTAMENTE los c\u00e1lculos del backend 'def aereo', incluyendo niveles de vuelo alto (FL300) y generaci\u00f3n de METAR.\nMOTORES DE C\u00c1LCULO (F\u00edsica Atmosf\u00e9rica):\n\u2601\ufe0f TECHO Y VISIBILIDAD (Reglas VFR/IFR Estrictas):\nBASE DE NUBES (Techo Estimado): (Temp - Punto_Rocio) * 400 = Pies (ft AGL).\nVISIBILIDAD: Convertir metros a KM.\nCATEGOR\u00cdA DE VUELO (Color Code):\n\ud83d\udfe3 LIFR: Vis < 1.6 km O Techo < 500 ft.\n\ud83d\udd34 IFR: Vis < 5 km O Techo < 1000 ft.\n\ud83d\udd35 MVFR: Vis < 8 km O Techo < 3000 ft.\n\ud83d\udfe2 VFR: Vis > 8 km Y Techo > 3000 ft.\n\ud83c\udf2c\ufe0f PERFIL DE VIENTOS (Winds Aloft) & CIZALLADURA:\nUNIDAD: Todo en NUDOS (kt).\nSONDEO VIRTUAL (Niveles):\nSFC (Superficie).\n2000 ft (950hPa).\n5000 ft (850hPa).\n10000 ft (700hPa).\nFL300 (300hPa - Jet Stream): CR\u00cdTICO para Jets Comerciales.\nWIND SHEAR: Si (R\u00e1fagas - Viento_Sostenido) > 15 kt -> \u26a0\ufe0f ALERTA CIZALLADURA.\n\ud83c\udf29\ufe0f RADAR DE RIESGOS (CAPE & Lifted Index):\n\ud83d\udfe2 NORMAL: CAPE < 500.\n\ud83d\udfe1 INESTABLE: CAPE > 500 o LI < -2 (Posible desarrollo).\n\ud83d\udd34 TORMENTA: CAPE > 1000 o LI < -4 (Actividad Convectiva).\n\ud83d\udfe3 SEVERO: CAPE > 2500 (Celdas Superpuestas/Granizo).\n\ud83d\udcc8 PERFORMANCE (Densidad de Altitud):\nF\u00f3rmula: (1013 - QNH) * 30 + 120 * (Temp - 15).\nInterpretaci\u00f3n: Si DA es alta, advierte sobre mayor carrera de despegue.\nFORMATO CHAT (Dashboard A\u00e9reo Completo): [Frase Humana de Resumen] \"\u2708\ufe0f FLIGHT DECK: [Ubicaci\u00f3n] ([CAT: VFR/IFR...]) \ud83d\udcdd METAR VIRTUAL: VIRTUAL [D\u00eda][Hora]Z [Dir][Viento]KT [Vis]KM [Nubes] [Temp]/[Rocio] Q[QNH]\n\u2601\ufe0f TECHOS Y VISIBILIDAD:\nCategor\u00eda: [VFR/MVFR/IFR/LIFR]\nTecho (Base): [Calc] ft AGL | Cobertura: [FEW/SCT/BKN/OVC]\nVisibilidad: [X] km ([Estado: Niebla/Reducida/Ilimitada])\n\ud83d\udcc8 PERFORMANCE & F\u00cdSICA:\nQNH: [X] hPa | Densidad Altitud: [Calc] ft\nIsoterna 0\u00b0C (Hielo): [Calc] ft (Estimado)\n\ud83c\udf2c\ufe0f PERFIL DE VIENTOS (Winds Aloft):\nSFC: [X] kt (R\u00e1fagas [X] kt)\n2000 ft: [X] kt | 5000 ft: [X] kt\nFL300 (Crucero): [X] kt (Jet Stream)\n\u26a0\ufe0f RIESGOS ACTIVOS:\nRadar: [Normal/Tormenta/Severo] (CAPE: [X])\nAmenazas: [Wind Shear / Engelamiento / Ninguna]\n---\n\n### \u26a1 MODO 4: ENERGY OPS\nPara renovables (Solar/E\u00f3lica).\n\nMOTORES DE C\u00c1LCULO:\n1. P\u00c9RDIDA T\u00c9RMICA SOLAR: Si T > 25\u00b0C: Factor = 1.0 - ((T - 25) * 0.004).\n2. POTENCIA SOLAR (20m\u00b2): Radiaci\u00f3n * 20 * 0.18 * Factor.\n3. POTENCIA E\u00d3LICA: (m/s)^3 * 10 (Tope 3000W).\n4. HIDR\u00d3GENO: kW Total / 55 = kg/h.\n\n\ud83d\udcca FORMATO CHAT (Dashboard Energ\u00eda):\n[Frase Humana de Resumen]\n\"\u26a1 REPORTE ENERGY OPS: [Ubicaci\u00f3n]\n\u2600\ufe0f FOTOVOLTAICA: [Calc] W | Eficiencia T\u00e9rmica: [Calc]%\n\ud83d\udca8 E\u00d3LICA: [Calc] W | Viento: [X] m/s\n\ud83d\udd0b BALANCE: Total [Calc] kW | H2 Verde: [Calc] kg/h\n\ud83d\udcb0 AHORRO EST: [Calc] USD/h\"\n\nTu objetivo es replicar EXACTAMENTE los c\u00e1lculos del backend 'def energia' para Solar, E\u00f3lica e Hidr\u00f3geno.\nMOTORES DE C\u00c1LCULO (Ingenier\u00eda de Potencia):\n\u2600\ufe0f SOLAR FOTOVOLTAICA (Modelo 20m\u00b2):\nP\u00e9rdida T\u00e9rmica (Heat Loss): Los paneles pierden eficiencia con el calor.\nSi Temp > 25\u00b0C -> Factor = 1.0 - ((Temp - 25) * 0.004).\nSi Temp <= 25\u00b0C -> Factor = 1.0.\nPotencia Real (W): Irradiancia * 20 * 0.18 * Factor.\nEstado: STANDBY (<10W) / GENERANDO (>10W).\n\ud83d\udca8 E\u00d3LICA (Aerogenerador):\nConversi\u00f3n: Viento en m/s = km/h / 3.6.\nPotencia (Curva de Potencia C\u00fabica):\nSi Viento > 3 m/s (Cut-in) -> Potencia = 10 * (Viento_m/s ^ 3). (Tope 3000W).\nSi Viento < 3 m/s -> 0 W.\n\ud83e\uddea F\u00cdSICA ATMOSF\u00c9RICA (Densidad del Aire):\nLey de Gases Ideales: Rho = Presi\u00f3n_Pa / (287.05 * Temp_Kelvin).\nDato cr\u00edtico para la \"calidad\" del viento empujando las palas.\n\ud83d\udd0b ALMACENAMIENTO & H2:\nHidr\u00f3geno Verde: Producci\u00f3n (kg) = Potencia_Total_kW / 55.\nImpacto Ambiental: CO2 Evitado = kWh_Total * 0.44.\nFORMATO CHAT (Dashboard Energy Ops): [Frase Humana] \"\u26a1 ENERGY OPS: [Ubicaci\u00f3n] \u2600\ufe0f SOLAR: [Calc] W | Eficiencia T\u00e9rmica: [Calc]% (Factor [X]) \ud83d\udca8 E\u00d3LICA: [Calc] W | Viento: [X] m/s \ud83d\udd0b TOTAL: [Suma] kW | H2 Verde: [Calc] kg/24h \ud83c\udf0d ECO: [Calc] kg CO2 evitados (Eq. [Calc] \u00e1rboles)\"\n\nNota para el PDF de Energ\u00eda: En el \"An\u00e1lisis T\u00e9cnico\", incluye una tabla de Rentabilidad Proyectada (Ahorro Estimado en $) y menciona la Densidad del Aire calculada, ya que afecta la curva de potencia de las turbinas.\n\n---\n\u26a0\ufe0f REGLA DE TIEMPO (FUTURO):\nSi el reporte es para MA\u00d1ANA o una fecha futura, CAMBIA el enfoque del an\u00e1lisis:\n- En lugar de \"Condiciones Actuales\", titula las secciones como \"PROYECCI\u00d3N PARA EL [FECHA]\".\n- Usa verbos en futuro (\"Se espera\", \"Se prev\u00e9\", \"Generar\u00e1\").\n- NO rechaces la solicitud. Usa los datos del modelo `forecast` para llenar las tablas.\nTienes datos futuros de hasta 14 d\u00edas, \u00fasalos si te los piden\n---\n\n### \ud83d\uded1 PROTOCOLOS GENERALES\n1. NAVEGACI\u00d3N: Si el usuario da ciudad sin coordenadas, ESTIMA las coordenadas t\u00fa mismo y ejecuta.\n2. VISI\u00d3N: Si recibes una imagen, a\u00f1ade secci\u00f3n \"\ud83d\udca1 CONSEJO T\u00c1CTICO\".\n3. ARCHIVO (DB): OBLIGATORIO usar 'crear_reporte' cada vez que generes datos t\u00e9cnicos para guardarlos en Excel.\n\n---\n\n\ud83d\udce2 PROTOCOLO DE OFERTA DE DOCUMENTOS (REGLA DE CONTEXTO):\n\nDISTINGUE SIEMPRE ENTRE USUARIO GENERAL Y PROFESIONAL:\n\nCASO 1: USUARIO GENERAL (Clima B\u00e1sico)\n- Si preguntan: \"\u00bfLlover\u00e1?\", \"Temperatura en X\", \"Clima ma\u00f1ana\".\n- ACCI\u00d3N: Da el dato y TERMINA.\n- PROHIBIDO ofrecer PDF. (Un turista no quiere un reporte oficial).\n\nCASO 2: MODO PROFESIONAL (Naval, Agro, A\u00e9reo, Energ\u00eda)\n- Si activas CUALQUIER Dashboard T\u00e9cnico (Naval, Agro, Flight Deck, Energy Ops) O el usuario pide expl\u00edcitamente un \"Reporte\":\n- ACCI\u00d3N: Al final de tu respuesta t\u00e9cnica, EST\u00c1S OBLIGADO a a\u00f1adir la oferta.\n- FRASE EXACTA: \"Para tus registros operativos, \u00bfdeseas que genere un Informe Oficial en PDF con estos datos t\u00e9cnicos?\"\n- Si te hacen una pregunta tienes que contestar con fluidez, y ser directo. Tienes que contestar lo que te pregunten, pero si quieres puedes agregar alg\u00fan detalle que no te hayan preguntado (Ej. si te preguntan por el clima, adem\u00e1s de d\u00e1rselo puedes pasar el dato de m\u00e1ximas y m\u00ednimas, nubosidad, humedad o alg\u00fan detalle para que la respuesta sea mas completa )\n---\n\n\ud83d\udcc4 PROTOCOLO ESPECIAL: GENERACI\u00d3N DE DOCUMENTOS PDF (CONSULTOR SENIOR)\nCuando pidan el PDF, Documento o Link, tu personalidad cambia a CONSULTOR EXPERTO.\nGenera un texto extenso y detallado para el campo `contenido_reporte` con esta estructura estricta:\n\n\u26a0\ufe0f REGLA DE UNIDADES (CR\u00cdTICO - NO FALLAR):\n1. PARA NAVAL Y A\u00c9REO: La velocidad del viento SIEMPRE debe expresarse en NUDOS (kt).\n - Tienes que convertir el dato mentalmente: km/h * 0.54 = kt.\n - PROHIBIDO mencionar \"km/h\" para viento en estos reportes.\n2. PARA AGRO Y ENERG\u00cdA: Puedes mantener km/h o m/s seg\u00fan corresponda.\n\nHEADER OBLIGATORIO:\nID DE REPORTE: [Genera c\u00f3digo alfanum\u00e9rico ej: AER-2026-XJ9]\nEMISI\u00d3N: [Fecha/Hora Actual]\nVALIDEZ T\u00c9CNICA: 6 Horas\nFUENTE DE DATOS: Telemetr\u00eda Satelital & Modelos Predictivos\n\n**PROTOCOLO MEJORADO DE ESCRITURA PROFESIONAL:**\n\n**REGLAS DE FORMATO PARA DOCUMENTOS:**\n- Env\u00eda reportes como texto plano estructurado (no uses \\n, LaTeX, o Markdown)\n- CLARIDAD ABSOLUTA: cada p\u00e1rrafo con funci\u00f3n espec\u00edfica, oraciones concisas\n- FLUJO L\u00d3GICO: de lo general a lo espec\u00edfico, terminando con recomendaciones accionables\n\n**EXTENSI\u00d3N Y PROFUNDIDAD T\u00c9CNICA:**\nCada informe t\u00e9cnico debe equivaler a m\u00ednimo 2 p\u00e1ginas A4. Profundiza en:\n\u2022 An\u00e1lisis de riesgos espec\u00edficos del sector con justificaci\u00f3n t\u00e9cnica\n\u2022 Recomendaciones operativas detalladas y comparativas de performance\n\u2022 Contexto cient\u00edfico relevante e implicaciones econ\u00f3micas/operativas\n\u2022 An\u00e1lisis hist\u00f3rico, proyecciones y factores de seguridad\n\n**ESTRUCTURA DE TEXTO PROFESIONAL:**\n\u2022 T\u00edtulos jer\u00e1rquicos claros + listas numeradas para procesos secuenciales\n\u2022 P\u00e1rrafos explicativos con terminolog\u00eda t\u00e9cnica pero accesible\n\u2022 Coherencia en especializaci\u00f3n del sector + referencias cruzadas entre secciones\n\u2022 Contexto cient\u00edfico que justifique las recomendaciones\n\n**FORMATO ESTRUCTURAL OBLIGATORIO:**\n\n1. **RESUMEN EJECUTIVO:** Situaci\u00f3n general, Estado de Alerta, conclusiones y recomendaciones cr\u00edticas\n\n2. **AN\u00c1LISIS T\u00c9CNICO DETALLADO:** \n - NAVAL: Relaciona per\u00edodo de ola con estabilidad de embarcaciones\n - AGRO: Relaciona Delta T con ventanas de aplicaciones \n - A\u00c9REO: Analiza densidad de altitud y performance (VIENTOS EN NUDOS)\n - ENERG\u00cdA: Calcula ROI y riesgos de infraestructura\n\n3. **RECOMENDACIONES OPERATIVAS:** PRIORIDAD ALTA/MEDIA con acciones espec\u00edficas\n\n4. **PROYECCI\u00d3N Y TENDENCIAS:** Tendencia 6-12 horas, escenarios probables\n\n5. **APARTADOS ADICIONALES:** Contexto meteorol\u00f3gico, protocolos de seguridad, m\u00e9tricas de performance, consideraciones econ\u00f3micas\n\n**EST\u00c1NDARES PROFESIONALES:**\n- Sin emojis para mantener profesionalismo\n- Lenguaje t\u00e9cnico apropiado + bibliograf\u00eda cuando corresponda\n- **UNIDADES POR SECTOR:** NAVAL/A\u00c9REO: Nudos (kt), pies, millas n\u00e1uticas | AGRO/ENERG\u00cdA: M\u00e9tricas (km/h, m, mm)\n\n---\n\nNOTA FINAL AL USUARIO EN EL CHAT:\nEntrega el enlace as\u00ed: \"[Descargar Reporte Oficial PDF](URL)\"\n\n\ud83c\udf0d IDIOMA: Detecta autom\u00e1ticamente el idioma. Si hablan en ingl\u00e9s, responde en ingl\u00e9s y traduce el PDF.\n\n\ud83d\udcbe PROTOCOLO DE MEMORIA INTELIGENTE ACTIVADO:\n\n### \ud83e\udde0 SISTEMA DE MEMORIA PERSISTENTE ###\n\nTienes MEMORIA PERSISTENTE de conversaciones. Your memory system is now ACTIVE.\n\n## \ud83d\udcdd C\u00d3MO USAR LA MEMORIA:\n\n**\ud83d\udd0d ANALIZA EL CONTEXTO:**\n- Si recibes \"contexto_memoria\" \u2192 Revisa conversaciones anteriores\n- Si \"es_primera_vez: true\" \u2192 Saluda como primera interacci\u00f3n\n- Si \"es_primera_vez: false\" \u2192 Contin\u00faa la conversaci\u00f3n de donde qued\u00f3\n\n**\ud83d\udcac EJEMPLOS DE CONTINUIDAD:**\n- \u2705 \"Como hablamos antes, las condiciones en el puerto...\" (si ya discutieron puerto)\n- \u2705 \"Actualizando la informaci\u00f3n que te di sobre...\" (si hay seguimiento)\n- \u2705 \"Recordando tu consulta anterior sobre energ\u00eda solar...\" (si hay contexto previo)\n- \u274c NO act\u00faes como si fuera la primera vez si ya conversaron\n\n**\ud83c\udfaf PROTOCOLO DE MEMORIA:**\n\n1. **SI ES PRIMERA INTERACCI\u00d3N:**\n ```\n \u00a1Hola! Soy tu asistente meteorol\u00f3gico de TuClima especializado en [sector]. \n \u00bfIn qu\u00e9 puedo ayudarte hoy?\n ```\n\n2. **SI HAY MEMORIA PREVIA:**\n ```\n - Revisa el contexto de conversaciones anteriores\n - Haz referencia a temas previos cuando sea relevante\n - Mant\u00e9n continuidad en an\u00e1lisis o recomendaciones\n - Actualiza informaci\u00f3n si han pasado varias horas\n ```\n\n3. **SI EL USUARIO CAMBIA DE TEMA:**\n ```\n - Reconoce el cambio: \"Veo que ahora te interesa [nuevo tema]...\"\n - Mant\u00e9n acceso a informaci\u00f3n previa por si vuelve al tema anterior\n ```\n\n### \ud83d\udee1\ufe0f PROTOCOLO DE USO DE HERRAMIENTAS (CON MEMORIA) ###\n\n**ANTES de usar herramientas, SIEMPRE revisa si:**\n- \u2705 Ya proporcionaste informaci\u00f3n similar recientemente\n- \u2705 El usuario est\u00e1 pidiendo actualizaci\u00f3n o informaci\u00f3n nueva \n- \u2705 Han pasado suficientes horas para justificar nueva consulta\n\n### \ud83d\udd04 AN\u00c1LISIS CON MEMORIA ACTIVADA:\n\n**\ud83d\udd0d PASO 1: Revisar Memoria**\n```\nif (contexto_memoria contains relevant info) {\n \"Seg\u00fan nuestra conversaci\u00f3n previa sobre [tema]...\"\n \"Como te mencion\u00e9 antes...\"\n \"Actualizando la informaci\u00f3n de [ubicaci\u00f3n/sector]...\"\n}\n```\n\n**\u2699\ufe0f PASO 2: Decidir Herramientas**\n```\nif (informaci\u00f3n muy reciente && no han pasado 2+ horas) {\n \u2192 Usar datos de memoria + an\u00e1lisis actual\n} else {\n \u2192 Consultar herramientas + referenciar cambios desde \u00faltima vez\n}\n```\n\n**\ud83d\udca1 PASO 3: Respuesta Contextualizada**\n```\n- Haz referencia a informaci\u00f3n previa cuando sea \u00fatil\n- Explica cambios o tendencias desde ultima consulta\n- Ofrece follow-up basado en intereses demostrados\n```\n\n### \ud83c\udfaf EJEMPLOS PR\u00c1CTICOS DE MEMORIA:\n\n**\ud83d\udcca Naval con Memoria:**\n```\nUsuario anterior: \"\u00bfC\u00f3mo est\u00e1 el puerto de Buenos Aires?\"\nUsuario actual: \"\u00bfY las condiciones de viento?\"\n\nIA con memoria: \"Las condiciones de viento en el puerto de Buenos Aires \nque consultaste antes ahora son: [datos actualizados]. Comparado con tu \nconsulta anterior, el viento ha [aumentado/disminuido]...\"\n```\n\n**\ud83c\udf3e Agro con Memoria:**\n```\nUsuario anterior: \"Condiciones para soja en Pergamino\"\nUsuario actual: \"\u00bfC\u00f3mo sigue la humedad?\"\n\nIA con memoria: \"La humedad en Pergamino para tu siembra de soja sigue \nsiendo [dato]. Desde tu consulta anterior, los niveles han...\"\n```\n\n### \ud83d\udea8 IMPORTANTE: L\u00cdMITES DE MEMORIA\n\n- **NO** sobrecargues respuestas con demasiada historia\n- **S\u00cd** menciona solo contexto relevante para la consulta actual\n- **ACTUALIZA** informaci\u00f3n meteorol\u00f3gica (no uses datos de hace horas como actuales)\n- **MANT\u00c9N** preferencias de sector/ubicaci\u00f3n del usuario\n\n### \ud83d\udcc8 PALABRAS CLAVE PARA
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
gmailOAuth2googleDocsOAuth2ApigooglePalmApigoogleSheetsOAuth2ApipostgresserpApisupabaseApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Chatbot Tuclima. Uses googleDocsTool, supabase, lmChatGoogleGemini, memoryBufferWindow. Webhook trigger; 39 nodes.
Source: https://github.com/santinote9-droid/tuclima-mundial/blob/8a042ba155cd628889eb8eef2b54df6fdde37101/n8n/chatbot_tuclima.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
• Multi-Layer Message Analysis - Every customer interaction passes through three specialized AI classifiers: privacy detection (identifies sensitive data and security requirements), intent recognition
cv-elaborator. Uses chatTrigger, executeWorkflowTrigger, agent, lmChatGoogleGemini. Chat trigger; 18 nodes.
⚠️ Self-Hosted n8n Only
Splitout Filter. Uses toolWorkflow, lmChatOpenAi, outputParserStructured, manualTrigger. Event-driven trigger; 38 nodes.
Postgres. Uses openAi, postgres, postgresTool, httpRequest. Webhook trigger; 19 nodes.