Google Sheetsとメール通知を使用してタイトルの明確さを最適化する
中級
これはContent Creation, Multimodal AI分野の自動化ワークフローで、14個のノードを含みます。主にIf, Code, EmailSend, FormTrigger, HttpRequestなどのノードを使用。 Google Sheetsとメール通知によるタイトルの明確さの最適化
前提条件
- •ターゲットAPIの認証情報が必要な場合あり
- •Google Sheets API認証情報
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"meta": {
"instanceId": "60c025075753afcab9f803964b4caaca9402f435deb4efafbb8e3b93b54d8752",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "1dc70980-1f3d-4352-8f39-9465eb0357ff",
"name": "フォーム送信時",
"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": "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": "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": "ランダムなコメント投稿者を選択",
"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": "通知:無効なAPI回答",
"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": "当選者メール通知",
"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": "当選者を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": "付箋",
"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": "付箋1",
"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": "付箋2",
"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": "付箋3",
"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": "付箋4",
"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": "付箋5",
"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": "付箋6",
"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
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
中級 - コンテンツ作成, マルチモーダルAI
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
Job Search Global API と Google Sheets を使って求人検索を自動化
Job Search Global API、Google Sheets を使って 自動化求人検索を行う
If
Set
Code
+
If
Set
Code
15 ノードEvoort Solutions
コンテンツ作成
TikTok の文字起こし
RapidAPIとGoogle Sheetsを使ってTikTok動画の自動文字起こし
If
Code
Wait
+
If
Code
Wait
21 ノードEvoort Solutions
コンテンツ作成
TikTokの動画を署名なしでGoogle Driveにダウンロードし、テーブルに自動記録
TikTokの動画を無 watermark 版でGoogleドライブにダウンロードし、自動のにテーブルにログを記録
If
Wait
Form Trigger
+
If
Wait
Form Trigger
19 ノードEvoort Solutions
コンテンツ作成
画像 Transform AI、Google Sheets、および Google Driveを使用して画像を生成し、アップロードする
画像変換GPT、Google Sheets、Driveを使用して画像の生成・アップロード
If
Code
Wait
+
If
Code
Wait
23 ノードEvoort Solutions
コンテンツ作成
記事構造の分析で主要出力を生成
RapidAPI AIを使ってGoogle スプレッドシートからリードマグネのクリエイティブを生成する
If
Wait
Http Request
+
If
Wait
Http Request
15 ノードEvoort Solutions
コンテンツ作成
Apollo データスクレイピングとタッチアウトフロー 1 ✅
Apollo、AI による解析と計画されたメール.follow-up によるリード生成の自動化
If
Code
Wait
+
If
Code
Wait
39 ノードDeniz
コンテンツ作成