Optimizar la claridad de los títulos usando Google Sheets y notificaciones por correo electrónico
Este es unContent Creation, Multimodal AIflujo de automatización del dominio deautomatización que contiene 14 nodos.Utiliza principalmente nodos como If, Code, EmailSend, FormTrigger, HttpRequest. Optimización de la claridad de los títulos mediante Google Sheets y notificaciones por correo electrónico
- •Pueden requerirse credenciales de autenticación para la API de destino
- •Credenciales de API de Google Sheets
Nodos utilizados (14)
Categoría
{
"meta": {
"instanceId": "60c025075753afcab9f803964b4caaca9402f435deb4efafbb8e3b93b54d8752",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "1dc70980-1f3d-4352-8f39-9465eb0357ff",
"name": "Al enviar formulario",
"type": "n8n-nodes-base.formTrigger",
"position": [
-80,
0
],
"webhookId": "a3954bfd-5e79-48fe-a4a9-e6fa35122c14",
"parameters": {
"options": {},
"formTitle": "YouTube Video giveaway ",
"formFields": {
"values": [
{
"fieldLabel": "url",
"requiredField": true
}
]
},
"formDescription": "YouTube Video giveaway "
},
"typeVersion": 2.2
},
{
"id": "bc236f4c-6d15-447b-94a8-d1d435455e20",
"name": "Obtener comentarios YouTube",
"type": "n8n-nodes-base.httpRequest",
"position": [
176,
0
],
"parameters": {
"url": "https://youtube-comments-scraper.p.rapidapi.com/comment.php",
"method": "POST",
"options": {
"response": {
"response": {
"fullResponse": true
}
}
},
"sendBody": true,
"contentType": "multipart-form-data",
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "url",
"value": "={{ $json.url }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "x-rapidapi-host",
"value": "youtube-comments-scraper.p.rapidapi.com"
},
{
"name": "x-rapidapi-key",
"value": "your key"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "155352c4-d1d6-49c3-a86f-a65176acba98",
"name": "Verificar estado de respuesta API",
"type": "n8n-nodes-base.if",
"position": [
448,
0
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "38976149-dd8b-452f-a2d1-cd4c88dfa791",
"operator": {
"type": "number",
"operation": "equals"
},
"leftValue": "={{ $json.statusCode }}",
"rightValue": "=200"
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "eefb9182-3705-4c12-9e58-7ae37a3e5c88",
"name": "Seleccionar comentador aleatorio",
"type": "n8n-nodes-base.code",
"position": [
720,
0
],
"parameters": {
"jsCode": "// Extract the array of comment items from the API response\nconst comments = $input.first().json.body.items || [];\n\n// Extract authorDisplayName safely\nconst authors = comments\n .map(item => {\n // Check if snippet and topLevelComment exist before accessing authorDisplayName\n if (item.snippet && item.snippet.topLevelComment && item.snippet.topLevelComment.snippet) {\n return item.snippet.topLevelComment.snippet.authorDisplayName;\n }\n return null; // or undefined\n })\n .filter(name => !!name); // filter out null/undefined\n\nif (authors.length === 0) {\n // No authors found, return empty or null\n return [{ json: { randomAuthorDisplayName: null } }];\n}\n\n// Randomly select one authorDisplayName\nconst randomIndex = Math.floor(Math.random() * authors.length);\nconst randomAuthor = authors[randomIndex];\n\n// Return as output\nreturn [{ json: { randomAuthorDisplayName: randomAuthor } }];\n"
},
"typeVersion": 2
},
{
"id": "ac6097b0-8fd5-41d3-8733-e6d61217b822",
"name": "Notificar: Respuesta API no válida",
"type": "n8n-nodes-base.emailSend",
"position": [
704,
320
],
"webhookId": "06e6ac0e-286b-432a-b233-a61817cab593",
"parameters": {
"html": "Hello,\n\nThe attempt to fetch comments from the provided YouTube URL did not succeed. \nPlease verify the URL and try again.\n\nIf the problem persists, please check the API key or contact support.\n\nBest regards, \nYouTube Giveaway Bot\n",
"options": {},
"subject": "YouTube Comments Scraper: API Request Failed",
"toEmail": "owaner@gmail.com",
"fromEmail": "admin@gmail.com"
},
"credentials": {
"smtp": {
"id": "nPwKPPgVavimTJX4",
"name": "SMTP account"
}
},
"typeVersion": 2.1
},
{
"id": "b28e03d1-0103-4453-97bf-cdb69ecb3c49",
"name": "Notificar ganador por correo",
"type": "n8n-nodes-base.emailSend",
"position": [
1312,
-64
],
"webhookId": "b8e21334-f8bb-442e-8060-e3bd170f4f6a",
"parameters": {
"html": "=Hello ,\n\nThe YouTube giveaway has concluded, and the winner has been selected!\n\nWinner: {{$json.randomAuthorDisplayName}}\n\nThe winner's details have been logged in the spreadsheet for your records.\n\nBest regards, \nYour Giveaway Automation Bot\n",
"options": {},
"subject": "=Congratulations! {{$json.randomAuthorDisplayName}} is the Winner of the Giveaway!",
"toEmail": "=owner@gmail.com",
"fromEmail": "admin@gmail.com"
},
"credentials": {
"smtp": {
"id": "H0f4Gja9ECFRA34L",
"name": "SMTP account 2"
}
},
"typeVersion": 2.1
},
{
"id": "00ed6cc0-8f7f-44e9-bf69-cb7512c49163",
"name": "Registrar ganador en hoja Google",
"type": "n8n-nodes-base.googleSheets",
"position": [
1008,
-48
],
"parameters": {
"columns": {
"value": {
"Url": "={{ $('On form submission').item.json.url }}",
"Date": "={{ $('On form submission').item.json.submittedAt }}",
"Winner": "={{ $json.randomAuthorDisplayName }}"
},
"schema": [
{
"id": "Date",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Url",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Winner",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Winner",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": ""
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"id": "Rt0RWApx8PL9t0RF",
"name": "Google Docs account"
}
},
"typeVersion": 4.7
},
{
"id": "7345d6e6-dde3-4880-85a5-e34780ad9335",
"name": "Nota adhesiva",
"type": "n8n-nodes-base.stickyNote",
"position": [
128,
-112
],
"parameters": {
"height": 256,
"content": "Sends a POST request to RapidAPI to scrape YouTube comments from the given URL.\nIncludes API key and necessary headers for authentication."
},
"typeVersion": 1
},
{
"id": "9f072800-bbac-412f-99a1-28a552ce9558",
"name": "Nota adhesiva1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-128,
-112
],
"parameters": {
"height": 256,
"content": "Triggers the workflow when a form with a YouTube URL is submitted.\nCaptures the URL input for further processing."
},
"typeVersion": 1
},
{
"id": "26e755bc-4755-4dc7-a7d0-4f2f3cfbf0ca",
"name": "Nota adhesiva2",
"type": "n8n-nodes-base.stickyNote",
"position": [
384,
-112
],
"parameters": {
"height": 256,
"content": "Checks if the API response status code equals 200 (success).\nRoutes workflow based on success or failure of the API call."
},
"typeVersion": 1
},
{
"id": "449460b5-3b24-42a0-957f-2a47363889bc",
"name": "Nota adhesiva3",
"type": "n8n-nodes-base.stickyNote",
"position": [
640,
-112
],
"parameters": {
"height": 256,
"content": "Extracts author names from the fetched comments.\nRandomly selects one commenter as the giveaway winner."
},
"typeVersion": 1
},
{
"id": "023052db-e197-48ff-9567-62d2565cbf2e",
"name": "Nota adhesiva4",
"type": "n8n-nodes-base.stickyNote",
"position": [
672,
192
],
"parameters": {
"height": 288,
"content": "Sends an email notification if the API call fails or returns an invalid response.\nAlerts the admin to verify URL or API credentials."
},
"typeVersion": 1
},
{
"id": "f814c860-8649-4f9b-bcb7-8f9a7a83d697",
"name": "Nota adhesiva5",
"type": "n8n-nodes-base.stickyNote",
"position": [
944,
-176
],
"parameters": {
"height": 288,
"content": "Appends the winner’s name, URL, and submission date to a Google Sheet.\nUses service account authentication for Google Sheets access."
},
"typeVersion": 1
},
{
"id": "e4feec40-ba6b-4c15-b2a2-5525f4424dfd",
"name": "Nota adhesiva6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1264,
-192
],
"parameters": {
"height": 272,
"content": "Sends a congratulatory email announcing the giveaway winner.\nIncludes the winner’s name and relevant giveaway details."
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"1dc70980-1f3d-4352-8f39-9465eb0357ff": {
"main": [
[
{
"node": "bc236f4c-6d15-447b-94a8-d1d435455e20",
"type": "main",
"index": 0
}
]
]
},
"bc236f4c-6d15-447b-94a8-d1d435455e20": {
"main": [
[
{
"node": "155352c4-d1d6-49c3-a86f-a65176acba98",
"type": "main",
"index": 0
}
]
]
},
"eefb9182-3705-4c12-9e58-7ae37a3e5c88": {
"main": [
[
{
"node": "00ed6cc0-8f7f-44e9-bf69-cb7512c49163",
"type": "main",
"index": 0
}
]
]
},
"155352c4-d1d6-49c3-a86f-a65176acba98": {
"main": [
[
{
"node": "eefb9182-3705-4c12-9e58-7ae37a3e5c88",
"type": "main",
"index": 0
}
],
[
{
"node": "ac6097b0-8fd5-41d3-8733-e6d61217b822",
"type": "main",
"index": 0
}
]
]
},
"00ed6cc0-8f7f-44e9-bf69-cb7512c49163": {
"main": [
[
{
"node": "b28e03d1-0103-4453-97bf-cdb69ecb3c49",
"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?
Intermedio - Creación de contenido, IA Multimodal
¿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
Evoort Solutions
@evoortsolutionsCompartir este flujo de trabajo