RapidAPI と Google Sheets を使用した自動類似度検出とメールリポート
上級
これはContent Creation, Multimodal AI分野の自動化ワークフローで、19個のノードを含みます。主にIf, Code, EmailSend, HttpRequest, GoogleSheetsなどのノードを使用。 RapidAPI と Google スプレッドシートで自動類似チェックとメールリポート
前提条件
- •ターゲットAPIの認証情報が必要な場合あり
- •Google Sheets API認証情報
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"meta": {
"instanceId": "60c025075753afcab9f803964b4caaca9402f435deb4efafbb8e3b93b54d8752",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "806a295f-8337-4459-bdc7-5e3b9f3634de",
"name": "トリガー - Googleシートの新規行",
"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": "コンテンツを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": "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": "盗作検出結果を抽出",
"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": "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": "メールでユーザーにレポートを送信",
"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": "Googleシートにステータス「成功」を記録",
"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": "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": "Googleシートにステータス「失敗」を記録",
"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": "付箋",
"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": "付箋1",
"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": "付箋2",
"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": "付箋3",
"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": "付箋4",
"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": "付箋5",
"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": "付箋6",
"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": "付箋7",
"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": "付箋8",
"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": "付箋9",
"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
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
上級 - コンテンツ作成, マルチモーダルAI
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
IMDBビデオ自動ダウンローダー(Google Driveアップロード&メール通知付き)
IMDB動画自動ダウンロードツール(Google Driveアップロード+メールアラート付き)
If
Wait
Email Send
+
If
Wait
Email Send
19 ノードSk developer
コンテンツ作成
Sora GPT、Google Drive、Sheetsを使ってAI画像を生成して保存
Sora GPT、Google Drive、Sheets を使用して AI 画像を生成して保存
Code
Form Trigger
Google Drive
+
Code
Form Trigger
Google Drive
11 ノードSk developer
コンテンツ作成
Printifyの自動化 - タイトルと説明を更新 - AlexK1919
GPT-4o-miniによるPrintify向け自動SEO製品タイトル・説明生成
If
Set
Code
+
If
Set
Code
26 ノードAmit Mehta
コンテンツ作成
Googleマップデータの抽出
Perplexity AI とメールバリデーションを使って、Googleマップスから potential clients を自動生成
If
Set
Code
+
If
Set
Code
18 ノードAntxon Pous
コンテンツ作成
Job Search Global API と Google Sheets を使って求人検索を自動化
Job Search Global API、Google Sheets を使って 自動化求人検索を行う
If
Set
Code
+
If
Set
Code
15 ノードEvoort Solutions
コンテンツ作成
SignSnapHome、HubSpot、Twilioを使った不動産オープンハウスフォローの自動化
SignSnapHome、HubSpot、Twilioを使った不動産オープンハウスフォロー自動化
If
Set
Code
+
If
Set
Code
32 ノードKaden Reese
コンテンツ作成