Détection automatisée du plagiat et rapport par e-mail avec RapidAPI et Google Sheets

Avancé

Ceci est unContent Creation, Multimodal AIworkflow d'automatisation du domainecontenant 19 nœuds.Utilise principalement des nœuds comme If, Code, EmailSend, HttpRequest, GoogleSheets. Détection automatique de plagiat et rapport par e-mail avec RapidAPI et Google Sheets

Prérequis
  • Peut nécessiter les informations d'identification d'authentification de l'API cible
  • Informations d'identification Google Sheets API
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "meta": {
    "instanceId": "60c025075753afcab9f803964b4caaca9402f435deb4efafbb8e3b93b54d8752",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "806a295f-8337-4459-bdc7-5e3b9f3634de",
      "name": "Déclencheur - Nouvelle Ligne dans 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": "Envoyer le Contenu à 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": "Vérifier la Réussite de la Réponse 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": "Extraire les Résultats du Plagiat",
      "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": "Générer un Rapport de Plagiat 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": "Envoyer le Rapport à l'Utilisateur par Email",
      "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": "Marquer le Statut : Succès dans 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": "Envoyer une Alerte d'Échec à l'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": "Marquer le Statut : Échec dans 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": "Note Adhésive",
      "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": "Note Adhésive1",
      "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": "Note Adhésive2",
      "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": "Note Adhésive3",
      "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": "Note Adhésive4",
      "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": "Note Adhésive5",
      "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": "Note Adhésive6",
      "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": "Note Adhésive7",
      "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": "Note Adhésive8",
      "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": "Note Adhésive9",
      "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
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Avancé - Création de contenu, IA Multimodale

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds19
Catégorie2
Types de nœuds7
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34