Resumen automatizado de oportunidades laborales con OpenRouter GPT-5 y automatización por correo
Este es unautomatización que contiene 18 nodos.Utiliza principalmente nodos como Code, Html, Merge, Filter, EmailSend. Automatización de resumen de oportunidades laborales con OpenRouter GPT-5 y correo electrónico
- •Pueden requerirse credenciales de autenticación para la API de destino
Nodos utilizados (18)
Categoría
{
"meta": {
"instanceId": "42450f423595f391b7c323eb4191c0bc81df9f6de5483a12f34f76cb4146556c",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "dc1dcca4-8789-4403-841a-690878eb0a53",
"name": "Cada publicación",
"type": "n8n-nodes-base.httpRequest",
"position": [
576,
-96
],
"parameters": {
"url": "={{ $json[\"jobLink\"] }}",
"options": {
"batching": {
"batch": {
"batchSize": 10,
"batchInterval": 5000
}
}
}
},
"typeVersion": 4.2
},
{
"id": "3b059cf0-931e-4ce1-8354-11382920d3d0",
"name": "Extraer título y descripción",
"type": "n8n-nodes-base.html",
"position": [
864,
-240
],
"parameters": {
"options": {},
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "jobDescription",
"attribute": "content",
"cssSelector": "meta[property=\"og:description\"]",
"returnValue": "attribute"
},
{
"key": "jobTitle",
"attribute": "content",
"cssSelector": "meta[property=\"og:title\"]",
"returnValue": "attribute"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "6b041491-47c6-4194-98ab-c410631b16e7",
"name": "Últimos 7 días",
"type": "n8n-nodes-base.filter",
"position": [
352,
32
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "551c6c94-a861-47b7-8850-32fadf883736",
"operator": {
"type": "dateTime",
"operation": "after"
},
"leftValue": "={{ $json.date }}",
"rightValue": "={{$now.minus({days: 7})}} "
}
]
}
},
"typeVersion": 2.2
},
{
"id": "16422542-708f-4af7-8ecc-b0633fa55beb",
"name": "Obtener página de lista",
"type": "n8n-nodes-base.httpRequest",
"position": [
-320,
32
],
"parameters": {
"url": "https://community.n8n.io/c/jobs/13",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "971564de-3d6b-4f55-bfd8-4c4c80635885",
"name": "Extraer publicaciones",
"type": "n8n-nodes-base.html",
"position": [
-96,
32
],
"parameters": {
"options": {},
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "jobLink",
"attribute": "href",
"cssSelector": ".raw-link",
"returnArray": true,
"returnValue": "attribute"
},
{
"key": "date",
"cssSelector": ".topic-list-item td:last-child",
"returnArray": true
}
]
}
},
"typeVersion": 1.2
},
{
"id": "d69d273d-f319-4473-8322-846bdd6c85b7",
"name": "Combinar objetos",
"type": "n8n-nodes-base.code",
"position": [
128,
32
],
"parameters": {
"jsCode": "// Input data from previous node is available in items array\nconst jobLinks = items[0].json[\"jobLink\"];\nconst dates = items[0].json.date;\n\n// Create new array of merged objects\nconst merged = jobLinks.map((link, index) => ({\n \"jobLink\": link,\n \"date\": dates[index],\n \"source\": \"n8n-forum\"\n}));\n\n// Return the merged data\nreturn merged.map(item => ({ json: item }));\n"
},
"typeVersion": 2
},
{
"id": "1237545b-bc8f-4e40-a1f9-be7715d88a1a",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
944,
288
],
"parameters": {
"jsonSchemaExample": "{\n\t\"summary\": \"What the client is looking to build\"\n}"
},
"typeVersion": 1.2
},
{
"id": "86eb1d6b-5fe5-4468-995c-6890286d6432",
"name": "OpenRouter Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
816,
288
],
"parameters": {
"model": "openai/gpt-5-mini",
"options": {}
},
"credentials": {
"openRouterApi": {
"id": "aCsTDT5LGS5D8Ndl",
"name": "OpenRouter account"
}
},
"typeVersion": 1
},
{
"id": "d3bbfe52-65a6-489c-9cba-bd6cf79f0bf2",
"name": "Generar Resumen Laboral",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
800,
64
],
"parameters": {
"text": "=<content> {{ $('Each post').item.json.data }} </content>",
"messages": {
"messageValues": [
{
"message": "=<prompt>\n <purpose>\n Based on this HTML your task is to provide a summary of what the client is looking to build with the automation software n8n\n </purpose>\n\n <instructions>\n <instruction>Output in json format</instruction>\n <instruction>Give a high level summary of what the client wants to build</instruction>\n <instruction>Make sure to only distill the relevant text from all the HTML input</instruction>\n </instructions>\n</prompt>"
}
]
},
"promptType": "define",
"hasOutputParser": true
},
"executeOnce": false,
"typeVersion": 1.5
},
{
"id": "f4ff7c72-e1e9-4473-9a4a-a9e48f464bd1",
"name": "Combinar Datos Laborales y Resumen",
"type": "n8n-nodes-base.merge",
"position": [
1152,
48
],
"parameters": {
"mode": "combine",
"options": {
"includeUnpaired": false
},
"combineBy": "combineByPosition",
"numberInputs": 3
},
"typeVersion": 3
},
{
"id": "84d23d82-e136-4465-8966-4fdbf107dded",
"name": "Formatear Salida del Resumen",
"type": "n8n-nodes-base.code",
"position": [
1376,
64
],
"parameters": {
"jsCode": "return $input.all().map((item) => ({...item.json, summary:item.json.output.summary, output: undefined}))\n"
},
"typeVersion": 2
},
{
"id": "d61c6515-a368-4ee5-bd4d-5508f2b5ff51",
"name": "Agregar Todos los Trabajos",
"type": "n8n-nodes-base.code",
"position": [
1600,
64
],
"parameters": {
"jsCode": "const items = $input.all().map((item) => {\n const itemJson = item.json;\n return {\n ...itemJson\n }\n})\n\nreturn {data: items}\n"
},
"typeVersion": 2
},
{
"id": "2e493107-b36c-4908-b37e-9fe43133e3fd",
"name": "Enviar Resumen Semanal de Trabajos",
"type": "n8n-nodes-base.emailSend",
"position": [
1824,
64
],
"webhookId": "d53405e8-9964-43c2-8fe4-38eeebf65d34",
"parameters": {
"html": "={{(() => {\n const grouped = $json.data.sort((a,b) => new Date(b.date.replace(/\\s/, 'T')) - new Date(a.date.replace(/\\s/, 'T'))).reduce((acc, job) => {\n const source = job.source === 'n8n-forum' ? 'n8n-forum' : \n job.source === 'make-forum' ? 'make-forum' : \n 'reddit';\n if (!acc[source]) acc[source] = [];\n acc[source].push(job);\n return acc;\n }, {});\n \n return Object.entries(grouped).reduce((html, [source, jobs]) => \n html + '<div class=\"section\"><h2>' + \n (source === 'n8n-forum' ? 'n8n Forum Jobs' : \n source === 'make-forum' ? 'Make Forum Jobs' : \n 'Reddit Jobs') + '</h2>' +\n jobs.map(job => \n '<div class=\"job-item\"><h3><a href=\"' + job.jobLink + '\">' + \n job.jobTitle + '</a></h3><div class=\"date\">Posted: ' + \n job.date + '</div><div class=\"source\">Source: ' + \n (job.source === 'n8n-forum' ? 'n8n Forum' : \n job.source === 'make-forum' ? 'Make Forum' : \n 'Reddit - ' + job.origin) + '</div><p class=\"summary\">' + \n job.summary + '</p></div>'\n ).join('') + '</div>',\n '<!DOCTYPE html><html><head><style>body{font-family:Arial,sans-serif;line-height:1.6;color:#333;max-width:800px;margin:0 auto;padding:20px}.section{margin-bottom:30px}.job-item{border:1px solid #ddd;margin-bottom:20px;padding:15px;border-radius:5px}h2{color:#2c5282;border-bottom:2px solid #2c5282;padding-bottom:10px;margin-top:30px}h3{color:#2c5282;margin:0 0 10px}a{color:#2b6cb0;text-decoration:none}a:hover{text-decoration:underline}.date,.source{color:#666;font-size:0.9em;margin-bottom:8px}.summary{background:#f8f9fa;padding:10px;border-left:4px solid #4299e1;margin:10px 0}</style></head><body><h1>Latest Job Opportunities</h1><p>Generated on: ' + new Date().toLocaleString() + '</p>'\n ) + '</body></html>';\n})()}}\n",
"options": {},
"subject": "Job Opportunities",
"toEmail": "test@example.com",
"fromEmail": "test@example.com"
},
"credentials": {
"smtp": {
"id": "JN7BvujMXvFvoUMh",
"name": "SMTP account"
}
},
"typeVersion": 2.1
},
{
"id": "250a3bdf-9a6c-4c86-a837-1ba70c6c0161",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-656,
-240
],
"parameters": {
"width": 320,
"height": 224,
"content": "## 🎯 WORKFLOW START\nThis workflow scrapes job postings from the n8n community forum,\nuses AI to summarize each opportunity, and emails you a digest.\n"
},
"typeVersion": 1
},
{
"id": "caf3a804-e37d-4286-abb8-018933fd10b4",
"name": "Ejecutar Semanalmente el Lunes por la Mañana",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-544,
32
],
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 9 * * 1"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "4b548276-a148-4678-820f-9eef6743f5ed",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
240,
-240
],
"parameters": {
"width": 256,
"height": 208,
"content": "## ⏱️ DATE FILTERING\nOnly processes jobs posted within the last 7 days.\nAdjust the filter condition to change this timeframe.\n"
},
"typeVersion": 1
},
{
"id": "d3a054f0-121d-4120-b485-271e3119d5b3",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
784,
432
],
"parameters": {
"width": 320,
"height": 176,
"content": "## 🤖 AI EXTRACTION\nUses GPT-5-mini to read the job posting HTML and extract a clear summary \nof what the client wants to build. This makes scanning opportunities much faster!\n"
},
"typeVersion": 1
},
{
"id": "2d894203-70de-4283-86cd-fb4c50afa800",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1744,
-176
],
"parameters": {
"width": 256,
"height": 176,
"content": "## 📧 EMAIL FORMATTING\nCreates a beautiful HTML email with jobs organized by source.\nUpdate the fromEmail and toEmail parameters to your addresses.\n"
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"dc1dcca4-8789-4403-841a-690878eb0a53": {
"main": [
[
{
"node": "3b059cf0-931e-4ce1-8354-11382920d3d0",
"type": "main",
"index": 0
},
{
"node": "d3bbfe52-65a6-489c-9cba-bd6cf79f0bf2",
"type": "main",
"index": 0
}
]
]
},
"6b041491-47c6-4194-98ab-c410631b16e7": {
"main": [
[
{
"node": "f4ff7c72-e1e9-4473-9a4a-a9e48f464bd1",
"type": "main",
"index": 1
},
{
"node": "dc1dcca4-8789-4403-841a-690878eb0a53",
"type": "main",
"index": 0
}
]
]
},
"971564de-3d6b-4f55-bfd8-4c4c80635885": {
"main": [
[
{
"node": "d69d273d-f319-4473-8322-846bdd6c85b7",
"type": "main",
"index": 0
}
]
]
},
"16422542-708f-4af7-8ecc-b0633fa55beb": {
"main": [
[
{
"node": "971564de-3d6b-4f55-bfd8-4c4c80635885",
"type": "main",
"index": 0
}
]
]
},
"d69d273d-f319-4473-8322-846bdd6c85b7": {
"main": [
[
{
"node": "6b041491-47c6-4194-98ab-c410631b16e7",
"type": "main",
"index": 0
}
]
]
},
"d61c6515-a368-4ee5-bd4d-5508f2b5ff51": {
"main": [
[
{
"node": "2e493107-b36c-4908-b37e-9fe43133e3fd",
"type": "main",
"index": 0
}
]
]
},
"d3bbfe52-65a6-489c-9cba-bd6cf79f0bf2": {
"main": [
[
{
"node": "f4ff7c72-e1e9-4473-9a4a-a9e48f464bd1",
"type": "main",
"index": 2
}
]
]
},
"84d23d82-e136-4465-8966-4fdbf107dded": {
"main": [
[
{
"node": "d61c6515-a368-4ee5-bd4d-5508f2b5ff51",
"type": "main",
"index": 0
}
]
]
},
"86eb1d6b-5fe5-4468-995c-6890286d6432": {
"ai_languageModel": [
[
{
"node": "d3bbfe52-65a6-489c-9cba-bd6cf79f0bf2",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"1237545b-bc8f-4e40-a1f9-be7715d88a1a": {
"ai_outputParser": [
[
{
"node": "d3bbfe52-65a6-489c-9cba-bd6cf79f0bf2",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"f4ff7c72-e1e9-4473-9a4a-a9e48f464bd1": {
"main": [
[
{
"node": "84d23d82-e136-4465-8966-4fdbf107dded",
"type": "main",
"index": 0
}
]
]
},
"3b059cf0-931e-4ce1-8354-11382920d3d0": {
"main": [
[
{
"node": "f4ff7c72-e1e9-4473-9a4a-a9e48f464bd1",
"type": "main",
"index": 0
}
]
]
},
"caf3a804-e37d-4286-abb8-018933fd10b4": {
"main": [
[
{
"node": "16422542-708f-4af7-8ecc-b0633fa55beb",
"type": "main",
"index": 0
}
]
]
}
}
}¿Cómo usar este flujo de trabajo?
Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.
¿En qué escenarios es adecuado este flujo de trabajo?
Avanzado
¿Es de pago?
Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.
Flujos de trabajo relacionados recomendados
Julian Kaiser
@jksrFull Stack Developer turned AI & Automation Engineer, implementing intelligent solutions with custom code, LLMs & n8n. Use my link to book a free 30-minute call to discuss your AI challenges and see if my services might be a good fit for your needs.
Compartir este flujo de trabajo