Detección automática de plagio y informe por correo usando RapidAPI y Google Sheets

Avanzado

Este es unContent Creation, Multimodal AIflujo de automatización del dominio deautomatización que contiene 19 nodos.Utiliza principalmente nodos como If, Code, EmailSend, HttpRequest, GoogleSheets. Detección automatizada de plagio y reporte por correo usando RapidAPI y Google Sheets

Requisitos previos
  • Pueden requerirse credenciales de autenticación para la API de destino
  • Credenciales de API de Google Sheets
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "meta": {
    "instanceId": "60c025075753afcab9f803964b4caaca9402f435deb4efafbb8e3b93b54d8752",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "806a295f-8337-4459-bdc7-5e3b9f3634de",
      "name": "Trigger - Nueva Fila en Google Sheet",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        1120,
        288
      ],
      "parameters": {
        "event": "rowAdded",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "k",
          "cachedResultName": "Plagiarism "
        }
      },
      "credentials": {
        "googleSheetsTriggerOAuth2Api": {
          "id": "FpH9aIBJX3kMRYBZ",
          "name": "Google Sheets Trigger account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a9057c26-4936-48d4-a8d5-23efe3bb528d",
      "name": "Enviar Contenido a Plagiarism API",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1456,
        288
      ],
      "parameters": {
        "url": "https://plagiarism-checker-ai-powered.p.rapidapi.com/plagiarism.php",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "multipart-form-data",
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "content",
              "value": "={{ $('Trigger - New Row in Google Sheet').item.json.Content }}"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "x-rapidapi-host",
              "value": "plagiarism-checker-ai-powered.p.rapidapi.com"
            },
            {
              "name": "x-rapidapi-key",
              "value": "Your key"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "0438c692-bd49-455f-a1a9-afb0ef853b0a",
      "name": "Verificar Éxito de Respuesta de API",
      "type": "n8n-nodes-base.if",
      "position": [
        1712,
        144
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "0ce9b91f-8d33-4ca9-b7bc-67421d0ab1a9",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.success }}",
              "rightValue": ""
            },
            {
              "id": "5963f077-ab3a-4658-a55f-57ea89db5901",
              "operator": {
                "type": "array",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.data.results.results }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "ff20ec20-e67d-42bb-a903-7452f0801389",
      "name": "Extraer Resultados de Plagio",
      "type": "n8n-nodes-base.code",
      "position": [
        2000,
        64
      ],
      "parameters": {
        "jsCode": "return $input.first().json.data.results.results;"
      },
      "typeVersion": 2
    },
    {
      "id": "0fb5c95c-1182-4f1c-9bb5-a58218518976",
      "name": "Generar Informe de Plagio en HTML",
      "type": "n8n-nodes-base.code",
      "position": [
        2288,
        48
      ],
      "parameters": {
        "jsCode": "const results = $input.all();\n\nlet html = `<h2>📝 Plagiarism Report</h2>`;\nhtml += `<p>The following content has been analyzed. Below is the similarity report:</p>`;\n\nfor (const item of results) {\n  const phrase = item.json.phrase;\n  const matches = item.json.results;\n\n  html += `<hr/>`;\n  html += `<p><strong>Original Phrase:</strong><br>\"${phrase}\"</p>`;\n\n  if (!matches || matches.length === 0) {\n    html += `<p style=\"color:green;\">✅ No matches found</p>`;\n    continue;\n  }\n\n  html += `<ul>`;\n  for (const match of matches) {\n    const title = match.title;\n    const link = match.link;\n    const score = match.scores?.[0]?.score?.toFixed(2);\n    const matchedSentence = match.scores?.[0]?.sentence;\n\n    html += `\n      <li>\n        <p><strong>Matched Source:</strong> <a href=\"${link}\" target=\"_blank\">${title}</a></p>\n        <p><strong>Similarity Score:</strong> ${score}</p>\n        <p><em>\"${matchedSentence}\"</em></p>\n      </li>\n    `;\n  }\n  html += `</ul>`;\n}\n\nreturn [\n  {\n    json: {\n      subject: \"📄 Plagiarism Report\",\n      body: html\n    }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "ef430ff6-e774-4aff-b66d-0b0000aa0d15",
      "name": "Enviar Informe al Usuario por Correo",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        2592,
        112
      ],
      "webhookId": "e4772861-5743-476f-83ef-82e3f15cf5a2",
      "parameters": {
        "html": "={{ $json.body }}",
        "options": {},
        "subject": "={{ $json.subject }}",
        "toEmail": "=user@test.com",
        "fromEmail": "admin@test.com"
      },
      "credentials": {
        "smtp": {
          "id": "nPwKPPgVavimTJX4",
          "name": "SMTP account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "d70d998c-cbb7-4478-bf41-56f027da2a07",
      "name": "Marcar Estado: Éxito en Google Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2992,
        288
      ],
      "parameters": {
        "columns": {
          "value": {
            "Status": "Success ",
            "Content": "={{ $('Trigger - New Row in Google Sheet').item.json.Content }}"
          },
          "schema": [
            {
              "id": "Content",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Content",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Content"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": "Plagiarism "
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "id": "Rt0RWApx8PL9t0RF",
          "name": "Google Docs account"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "61535540-0df7-43d6-afe5-76f2fe0f5b62",
      "name": "Enviar Alerta de Fallo a IT",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        2112,
        576
      ],
      "webhookId": "183ad2a4-3ab5-44b3-9cc8-9ac5dff65137",
      "parameters": {
        "html": "=<h2>🚨 Plagiarism Check Failure Alert</h2>\n\n<p><strong>System:</strong> Plagiarism Checker AI</p>\n<p><strong>Status:</strong> <span style=\"color:red;\">❌ Failed to complete the plagiarism check</span></p>\n\n<h3>🔍 Failure Details</h3>\n<ul>\n  <li><strong>Timestamp:</strong> {{ $now }}</li>\n  <li><strong>User Content:</strong></li>\n</ul>\n<blockquote style=\"background-color:#f9f9f9;padding:10px;border-left:3px solid #ccc;\">\n  {{ $json[\"content\"] || \"No content received\" }}\n</blockquote>\n\n<h3>⚠️ Recommended Actions</h3>\n<ul>\n  <li>Check API availability and key validity</li>\n  <li>Inspect server/network logs</li>\n  <li>Ensure correct data formatting from the form submission</li>\n</ul>\n\n<hr>\n<p style=\"color:gray;font-size:12px;\">This message was automatically generated by the n8n workflow: <strong>Plagiarism Checker AI</strong>.</p>\n",
        "options": {},
        "subject": "ALERT: Plagiarism Check Failed – Immediate Attention Required",
        "toEmail": "it@test.com",
        "fromEmail": "admin@test.com"
      },
      "credentials": {
        "smtp": {
          "id": "nPwKPPgVavimTJX4",
          "name": "SMTP account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "7784e381-f704-4981-96bc-005c1ce5064a",
      "name": "Marcar Estado: Fallo en Google Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2448,
        576
      ],
      "parameters": {
        "columns": {
          "value": {
            "Status": "Failed",
            "Content": "={{ $('Trigger - New Row in Google Sheet').item.json.Content }}"
          },
          "schema": [
            {
              "id": "Content",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Content",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Content"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": "Plagiarism "
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "id": "Rt0RWApx8PL9t0RF",
          "name": "Google Docs account"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "182d4104-b1ca-4731-8bdb-76ef606b6060",
      "name": "Nota Adhesiva",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1040,
        160
      ],
      "parameters": {
        "height": 272,
        "content": "Watches for a new row added to a specific Google Sheet.\nTriggers the workflow when new content is submitted for plagiarism checking."
      },
      "typeVersion": 1
    },
    {
      "id": "998ab663-310d-44eb-9b24-230fc52042a7",
      "name": "Nota Adhesiva1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1376,
        160
      ],
      "parameters": {
        "height": 272,
        "content": "Sends the submitted content to the external plagiarism-checking API.\nUses a POST request with necessary headers and the content in the body."
      },
      "typeVersion": 1
    },
    {
      "id": "ba69627c-cfb6-4426-a706-b959c717e033",
      "name": "Nota Adhesiva2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1648,
        -16
      ],
      "parameters": {
        "height": 272,
        "content": "Checks if the API returned a successful response and valid results.\nRoutes the flow either to process results or handle the failure."
      },
      "typeVersion": 1
    },
    {
      "id": "9e964af6-213d-42c6-9e44-57f47ed61ae0",
      "name": "Nota Adhesiva3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1936,
        -32
      ],
      "parameters": {
        "height": 272,
        "content": "Extracts the results array from the API response.\nPrepares raw data for formatting in the next step."
      },
      "typeVersion": 1
    },
    {
      "id": "61e70bcd-4fa6-42ba-9889-ed7f1d55af53",
      "name": "Nota Adhesiva4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2224,
        -80
      ],
      "parameters": {
        "height": 272,
        "content": "Formats the extracted plagiarism data into a readable HTML report.\nBuilds a styled email-friendly structure with links, scores, and matched sentences."
      },
      "typeVersion": 1
    },
    {
      "id": "4586d451-cc69-4105-976d-387a37232133",
      "name": "Nota Adhesiva5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2544,
        -32
      ],
      "parameters": {
        "height": 304,
        "content": "Sends the generated plagiarism report to the user via email.\nUses SMTP credentials to deliver the HTML content."
      },
      "typeVersion": 1
    },
    {
      "id": "036e05fc-c6c8-4f13-b31d-68573e801af7",
      "name": "Nota Adhesiva6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2880,
        176
      ],
      "parameters": {
        "height": 288,
        "content": "Updates the status column of the original row as \"Success\".\nConfirms that the content was checked and report sent."
      },
      "typeVersion": 1
    },
    {
      "id": "94a0a7ce-8568-4694-967c-6ad29597114b",
      "name": "Nota Adhesiva7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2080,
        448
      ],
      "parameters": {
        "height": 272,
        "content": "Sends an alert email to IT when the API check fails.\nIncludes content and troubleshooting suggestions in the email."
      },
      "typeVersion": 1
    },
    {
      "id": "7a23855d-1487-4da6-8c4a-de1aebef57a1",
      "name": "Nota Adhesiva8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2400,
        480
      ],
      "parameters": {
        "height": 240,
        "content": "Marks the row in the Google Sheet with \"Failed\" status.\nHelps track unsuccessful API checks for follow-up."
      },
      "typeVersion": 1
    },
    {
      "id": "3f9b076d-a7cc-4e13-adff-7e57d9dedfd6",
      "name": "Nota Adhesiva9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32,
        48
      ],
      "parameters": {
        "width": 672,
        "height": 944,
        "content": "\n# 🚀 Automated Plagiarism Checker Workflow in n8n\n\n## ✅ **Short Summary**\n\nAn automated plagiarism detection workflow using n8n, Google Sheets, and a third-party API. It checks submitted text for plagiarism, sends a formatted report via email, and logs results in real-time.\n\n---\n\n## 💼 **Use Case**\n\n* Ideal for educators, content teams, academic institutions, or editors who need to verify originality of text submitted via a Google Sheet form.\n\n\n## 🎯 **Key Benefits**\n\n* 🔁 **Fully Automated**: No manual checking — it triggers on new Google Sheet entries.\n* 📩 **Instant Reports**: Sends clean, detailed HTML reports directly to the user's inbox.\n* 📊 **Status Tracking**: Logs success or failure directly in your Google Sheet.\n* 🚨 **IT Alerts**: Notifies your IT team if API or checks fail.\n\n\n"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "61535540-0df7-43d6-afe5-76f2fe0f5b62": {
      "main": [
        [
          {
            "node": "7784e381-f704-4981-96bc-005c1ce5064a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0438c692-bd49-455f-a1a9-afb0ef853b0a": {
      "main": [
        [
          {
            "node": "ff20ec20-e67d-42bb-a903-7452f0801389",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "61535540-0df7-43d6-afe5-76f2fe0f5b62",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ff20ec20-e67d-42bb-a903-7452f0801389": {
      "main": [
        [
          {
            "node": "0fb5c95c-1182-4f1c-9bb5-a58218518976",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ef430ff6-e774-4aff-b66d-0b0000aa0d15": {
      "main": [
        [
          {
            "node": "d70d998c-cbb7-4478-bf41-56f027da2a07",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a9057c26-4936-48d4-a8d5-23efe3bb528d": {
      "main": [
        [
          {
            "node": "0438c692-bd49-455f-a1a9-afb0ef853b0a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0fb5c95c-1182-4f1c-9bb5-a58218518976": {
      "main": [
        [
          {
            "node": "ef430ff6-e774-4aff-b66d-0b0000aa0d15",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "806a295f-8337-4459-bdc7-5e3b9f3634de": {
      "main": [
        [
          {
            "node": "a9057c26-4936-48d4-a8d5-23efe3bb528d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿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 - 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

Información del flujo de trabajo
Nivel de dificultad
Avanzado
Número de nodos19
Categoría2
Tipos de nodos7
Descripción de la dificultad

Adecuado para usuarios avanzados, flujos de trabajo complejos con 16+ nodos

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34