API速率制限と認証に関するFAQテスト
上級
これはDocument Extraction, AI Summarization分野の自動化ワークフローで、19個のノードを含みます。主にIf, Set, Code, Gmail, Slackなどのノードを使用。 GPT-4o-mini、Googleスプレッドシート、Slackアラートを使用したAPIよくある質問品質テストの自動化
前提条件
- •Googleアカウント + Gmail API認証情報
- •Slack Bot Token または Webhook URL
- •Google Sheets API認証情報
- •OpenAI API Key
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"id": "9F7rxHKt3weSqZaD",
"meta": {
"instanceId": "8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177",
"templateCredsSetupCompleted": true
},
"name": "API Rate Limit & Auth FAQ Test",
"tags": [
{
"id": "DWhGhh4ifGbElCsl",
"name": "Quality Assurance",
"createdAt": "2025-11-03T11:37:00.082Z",
"updatedAt": "2025-11-03T11:37:00.082Z"
},
{
"id": "OaQsaj1GDsV2DDag",
"name": "AI",
"createdAt": "2025-11-03T11:37:00.112Z",
"updatedAt": "2025-11-03T11:37:00.112Z"
},
{
"id": "u5sfzrVZ11a9nsuB",
"name": "Documentation",
"createdAt": "2025-11-03T11:37:00.152Z",
"updatedAt": "2025-11-03T11:37:00.152Z"
}
],
"nodes": [
{
"id": "35aa638c-cbaa-4125-877d-68560d49de34",
"name": "ワークフロー実行時",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-944,
3312
],
"parameters": {},
"typeVersion": 1
},
{
"id": "86fc4b54-b1b5-4de7-b98d-22abd8f4ba25",
"name": "セクション: データ入力",
"type": "n8n-nodes-base.stickyNote",
"position": [
-848,
3088
],
"parameters": {
"color": 7,
"width": 580,
"content": "## 📥 Data Input\n\nFetches FAQ data from Google Sheets and validates it before processing."
},
"typeVersion": 1
},
{
"id": "dc53c187-0fc4-45e0-a415-13acc67a41f4",
"name": "セクション: AI評価",
"type": "n8n-nodes-base.stickyNote",
"position": [
-128,
3088
],
"parameters": {
"color": 7,
"width": 400,
"height": 144,
"content": "## 🤖 AI Evaluation\n\nScores each FAQ using GPT-4o-mini based on completeness, clarity, technical accuracy, and actionability."
},
"typeVersion": 1
},
{
"id": "861caa0a-4607-4a31-9682-a193652fb9b1",
"name": "セクション: ストレージ",
"type": "n8n-nodes-base.stickyNote",
"position": [
480,
3088
],
"parameters": {
"color": 7,
"width": 480,
"content": "## 💾 Results Storage\n\nSaves detailed scores to Results sheet and aggregated metrics to History sheet for trend tracking."
},
"typeVersion": 1
},
{
"id": "6e69317c-4cdb-4871-b2e4-0f7dc8022fe5",
"name": "セクション: アラート",
"type": "n8n-nodes-base.stickyNote",
"position": [
1152,
3040
],
"parameters": {
"color": 7,
"width": 540,
"content": "## 📢 Notifications\n\nSends Slack alerts when critical or warning-level issues are detected, then emails a completion summary."
},
"typeVersion": 1
},
{
"id": "073ad6bd-87e2-409d-ab43-2546907c1aef",
"name": "📋 ワークフロー概要1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1536,
3056
],
"parameters": {
"width": 420,
"height": 552,
"content": "## How it works\n\nThis workflow automatically evaluates FAQ quality using AI (GPT-4o-mini), scores each entry (0-10), and tracks improvements over time. It reads FAQs from Google Sheets, gets AI feedback on completeness and clarity, then saves detailed results and sends Slack alerts for low-scoring content.\n\n**Key features:** Historical tracking, severity-based alerts (🔴 Critical, ⚠️ Warning, ✅ Good), batch processing, and comprehensive error handling.\n\n## Setup steps\n\n1. **Connect accounts:** Add Google Sheets OAuth and Azure OpenAI credentials\n2. **Configure Sheet ID:** Update the Configuration node with your Google Sheet ID (found in the sheet URL)\n3. **Set up Slack:** Add Slack webhook and update channel ID in Configuration node (optional)\n4. **Prepare your sheet:** Create a sheet named \"TestSet\" with Question (Column A) and Answer (Column B)\n5. **Run:** Click \"Execute workflow\" to start the quality check"
},
"typeVersion": 1
},
{
"id": "aa25afd0-e903-4352-a809-a995941dbee0",
"name": "⚙️ 設定1",
"type": "n8n-nodes-base.set",
"position": [
-736,
3312
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "config_sheet_id",
"name": "sheet_id",
"type": "string",
"value": "1ABC_REPLACE_WITH_YOUR_SHEET_ID_xyz123"
},
{
"id": "config_threshold_critical",
"name": "threshold_critical",
"type": "number",
"value": 5
},
{
"id": "config_threshold_warning",
"name": "threshold_warning",
"type": "number",
"value": 7
},
{
"id": "config_threshold_good",
"name": "threshold_good",
"type": "number",
"value": 8
},
{
"id": "config_slack_channel",
"name": "slack_channel_id",
"type": "string",
"value": "C09GNB90TED"
},
{
"id": "config_batch_size",
"name": "batch_size",
"type": "number",
"value": 10
},
{
"id": "config_test_sheet",
"name": "test_sheet_name",
"type": "string",
"value": "TestSet"
},
{
"id": "config_results_sheet",
"name": "results_sheet_name",
"type": "string",
"value": "Results"
},
{
"id": "config_history_sheet",
"name": "history_sheet_name",
"type": "string",
"value": "History"
},
{
"id": "run_id",
"name": "run_id",
"type": "string",
"value": "={{ $now.format('yyyyMMdd-HHmmss') }}"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "653f3c13-0665-48ad-93a3-ed24e860518f",
"name": "📖 FAQ取得1",
"type": "n8n-nodes-base.googleSheets",
"position": [
-512,
3312
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "name",
"value": "={{ $json.test_sheet_name }}"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.sheet_id }}"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "s4dP1fNuVZ2gWvs3",
"name": "Google Sheets account"
}
},
"typeVersion": 4.4
},
{
"id": "e27c8068-5afc-4cd7-8204-6ba2a43e5b48",
"name": "🔍 データ検証・クレンジング1",
"type": "n8n-nodes-base.code",
"position": [
-288,
3312
],
"parameters": {
"jsCode": "// Validate and clean FAQ data\nconst items = $input.all();\nconst config = items[0].json;\nconst cleanedItems = [];\n\nfor (let i = 0; i < items.length; i++) {\n const item = items[i];\n \n // Skip if it's the config item or header row\n if (item.json.sheet_id || i === 0) continue;\n \n // Get question and answer (handle different column name formats)\n const question = item.json.Question || item.json.question || item.json.A || '';\n const answer = item.json.Answer || item.json.answer || item.json.B || '';\n \n // Skip empty rows\n if (!question || !answer || question.trim() === '' || answer.trim() === '') {\n continue;\n }\n \n // Create cleaned item\n cleanedItems.push({\n json: {\n question: question.trim(),\n answer: answer.trim(),\n row_number: i,\n run_id: config.run_id,\n sheet_id: config.sheet_id,\n batch_size: config.batch_size,\n threshold_critical: config.threshold_critical,\n threshold_warning: config.threshold_warning,\n threshold_good: config.threshold_good\n }\n });\n}\n\nif (cleanedItems.length === 0) {\n throw new Error('No valid FAQ entries found in the sheet. Please check your data format.');\n}\n\nconsole.log(`Validated ${cleanedItems.length} FAQ entries for processing`);\nreturn cleanedItems;"
},
"typeVersion": 2
},
{
"id": "5db219e2-af99-4386-b3f9-c53a79cc9cf6",
"name": "🤖 AI評価エンジン1",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-64,
3312
],
"parameters": {
"text": "=You are an expert technical documentation reviewer specializing in API documentation, authentication systems, and rate limiting policies.\n\n**Task:** Evaluate the quality and completeness of this FAQ entry.\n\n**Question:** {{ $json.question }}\n\n**Answer:** {{ $json.answer }}\n\n**Evaluation Criteria:**\n1. **Completeness (0-3 points)**: Does it address edge cases and scenarios?\n2. **Clarity (0-3 points)**: Is the explanation clear and unambiguous?\n3. **Technical Accuracy (0-2 points)**: Are technical details correct?\n4. **Actionability (0-2 points)**: Can users act on this information?\n\n**Output Requirements:**\nProvide ONLY valid JSON with this exact structure:\n{\n \"score\": <number 0-10>,\n \"explanation\": \"<brief one-sentence explanation>\",\n \"strengths\": \"<what's good about this answer>\",\n \"improvements\": \"<specific suggestions for improvement>\"\n}\n\n**Important:** Return ONLY the JSON object, no additional text.",
"options": {
"systemMessage": "You are a technical documentation quality analyst. Provide objective, constructive evaluations in valid JSON format only."
}
},
"typeVersion": 1.2
},
{
"id": "9bc66b99-cb86-4c3e-abc4-fa6fa8685e29",
"name": "Azure OpenAI1",
"type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
"position": [
16,
3536
],
"parameters": {
"model": "gpt-4o-mini",
"options": {
"maxTokens": 500,
"temperature": 0.3
}
},
"credentials": {
"azureOpenAiApi": {
"id": "C3WzT18XqF8OdVM6",
"name": "Azure Open AI account"
}
},
"typeVersion": 1
},
{
"id": "e2a58c64-1552-43ae-a7df-2bf665ea52a1",
"name": "📊 結果解析・拡充1",
"type": "n8n-nodes-base.code",
"position": [
304,
3312
],
"parameters": {
"jsCode": "// Parse and enrich AI evaluation results with error handling\nconst items = $input.all();\nconst enrichedItems = [];\n\nfor (const item of items) {\n try {\n // Get the AI output\n const aiOutput = item.json.output || '{}';\n \n // Try to parse JSON from the output\n let evaluation;\n try {\n // Handle case where output might have markdown code blocks\n const jsonMatch = aiOutput.match(/\\{[\\s\\S]*\\}/);\n const jsonString = jsonMatch ? jsonMatch[0] : aiOutput;\n evaluation = JSON.parse(jsonString);\n } catch (parseError) {\n console.error('Failed to parse AI response:', aiOutput);\n evaluation = {\n score: 0,\n explanation: 'AI response parsing failed',\n strengths: 'N/A',\n improvements: 'Error in evaluation - needs manual review'\n };\n }\n \n // Determine severity level\n let severity = 'good';\n let severity_emoji = '✅';\n \n if (evaluation.score < item.json.threshold_critical) {\n severity = 'critical';\n severity_emoji = '🔴';\n } else if (evaluation.score < item.json.threshold_warning) {\n severity = 'warning';\n severity_emoji = '⚠️';\n } else if (evaluation.score < item.json.threshold_good) {\n severity = 'acceptable';\n severity_emoji = '🟡';\n }\n \n // Create enriched item\n enrichedItems.push({\n json: {\n // Original data\n question: item.json.question,\n answer: item.json.answer,\n row_number: item.json.row_number,\n run_id: item.json.run_id,\n \n // Evaluation results\n score: evaluation.score || 0,\n explanation: evaluation.explanation || 'No explanation provided',\n strengths: evaluation.strengths || 'N/A',\n improvements: evaluation.improvements || 'N/A',\n \n // Metadata\n severity: severity,\n severity_emoji: severity_emoji,\n timestamp: new Date().toISOString(),\n evaluated_at: new Date().toLocaleString('en-US', { \n timeZone: 'UTC',\n dateStyle: 'medium',\n timeStyle: 'short'\n }),\n \n // For filtering\n needs_attention: evaluation.score < item.json.threshold_warning,\n \n // Config passthrough\n sheet_id: item.json.sheet_id\n }\n });\n } catch (error) {\n console.error('Error processing item:', error);\n // Add error item to results\n enrichedItems.push({\n json: {\n question: item.json.question || 'Unknown',\n answer: item.json.answer || 'Unknown',\n score: 0,\n explanation: `Processing error: ${error.message}`,\n severity: 'error',\n severity_emoji: '❌',\n timestamp: new Date().toISOString(),\n needs_attention: true,\n sheet_id: item.json.sheet_id,\n run_id: item.json.run_id\n }\n });\n }\n}\n\nconsole.log(`Processed ${enrichedItems.length} evaluations`);\nreturn enrichedItems;"
},
"typeVersion": 2
},
{
"id": "ad83a4b8-4cdc-40a3-b5de-49fb85ac205c",
"name": "💾 詳細結果保存1",
"type": "n8n-nodes-base.googleSheets",
"position": [
528,
3312
],
"parameters": {
"columns": {
"value": {
"Score": "={{ $json.score }}",
"Run ID": "={{ $json.run_id }}",
"Question": "={{ $json.question }}",
"Severity": "={{ $json.severity_emoji }} {{ $json.severity.toUpperCase() }}",
"Strengths": "={{ $json.strengths }}",
"Timestamp": "={{ $json.evaluated_at }}",
"Explanation": "={{ $json.explanation }}",
"Improvements": "={{ $json.improvements }}"
},
"mappingMode": "defineBelow"
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "Results"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.sheet_id }}"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "s4dP1fNuVZ2gWvs3",
"name": "Google Sheets account"
}
},
"typeVersion": 4.4
},
{
"id": "853e8bba-0d8e-413a-b6fb-959e8ea1896c",
"name": "📈 サマリーレポート生成1",
"type": "n8n-nodes-base.code",
"position": [
752,
3312
],
"parameters": {
"jsCode": "// Generate comprehensive summary report\nconst items = $input.all();\n\nif (items.length === 0) {\n return [{\n json: {\n error: 'No items to summarize'\n }\n }];\n}\n\n// Calculate statistics\nconst scores = items.map(item => item.json.score);\nconst totalFaqs = scores.length;\nconst avgScore = (scores.reduce((a, b) => a + b, 0) / totalFaqs).toFixed(2);\nconst maxScore = Math.max(...scores);\nconst minScore = Math.min(...scores);\n\n// Count by severity\nconst critical = items.filter(item => item.json.severity === 'critical').length;\nconst warning = items.filter(item => item.json.severity === 'warning').length;\nconst acceptable = items.filter(item => item.json.severity === 'acceptable').length;\nconst good = items.filter(item => item.json.severity === 'good').length;\n\n// Calculate pass rate (score >= 7)\nconst passCount = scores.filter(s => s >= 7).length;\nconst passRate = ((passCount / totalFaqs) * 100).toFixed(1);\n\n// Get config from first item\nconst config = items[0].json;\n\n// Find top 3 worst performing FAQs\nconst worstFaqs = items\n .sort((a, b) => a.json.score - b.json.score)\n .slice(0, 3)\n .map(item => ({\n question: item.json.question.substring(0, 100),\n score: item.json.score,\n improvements: item.json.improvements\n }));\n\n// Create summary\nconst summary = {\n json: {\n // Summary stats\n run_id: config.run_id,\n timestamp: new Date().toISOString(),\n total_faqs: totalFaqs,\n average_score: parseFloat(avgScore),\n max_score: maxScore,\n min_score: minScore,\n pass_rate: parseFloat(passRate),\n \n // Severity breakdown\n critical_count: critical,\n warning_count: warning,\n acceptable_count: acceptable,\n good_count: good,\n \n // Status\n overall_status: critical > 0 ? 'CRITICAL' : warning > 0 ? 'NEEDS_ATTENTION' : 'HEALTHY',\n \n // Worst performers\n worst_performers: JSON.stringify(worstFaqs),\n \n // For display\n summary_text: `📊 FAQ Quality Report\\n\\n` +\n `📈 Overall Score: ${avgScore}/10 (${passRate}% pass rate)\\n` +\n `📝 Total FAQs Evaluated: ${totalFaqs}\\n\\n` +\n `🎯 Severity Breakdown:\\n` +\n ` 🔴 Critical: ${critical}\\n` +\n ` ⚠️ Warning: ${warning}\\n` +\n ` 🟡 Acceptable: ${acceptable}\\n` +\n ` ✅ Good: ${good}\\n\\n` +\n `📉 Score Range: ${minScore} - ${maxScore}`,\n \n // For alerts\n needs_alert: critical > 0 || warning > 0,\n sheet_id: config.sheet_id,\n \n // Pass through all items for next node\n all_results: items\n }\n};\n\nconsole.log('Summary generated:', summary.json.summary_text);\nreturn [summary];"
},
"typeVersion": 2
},
{
"id": "0cf75d4f-f2e1-47ca-91f1-4ddffd9ff987",
"name": "📊 履歴保存1",
"type": "n8n-nodes-base.googleSheets",
"position": [
976,
3312
],
"parameters": {
"columns": {
"value": {
"Good": "={{ $json.good_count }}",
"Run ID": "={{ $json.run_id }}",
"Status": "={{ $json.overall_status }}",
"Warning": "={{ $json.warning_count }}",
"Critical": "={{ $json.critical_count }}",
"Pass Rate": "={{ $json.pass_rate }}%",
"Timestamp": "={{ $json.timestamp }}",
"Acceptable": "={{ $json.acceptable_count }}",
"Total FAQs": "={{ $json.total_faqs }}",
"Average Score": "={{ $json.average_score }}"
},
"mappingMode": "defineBelow"
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "History"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.sheet_id }}"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "s4dP1fNuVZ2gWvs3",
"name": "Google Sheets account"
}
},
"typeVersion": 4.4
},
{
"id": "5390e894-108c-462c-8b4e-85fa481a631c",
"name": "⚠️ アラート要否確認1",
"type": "n8n-nodes-base.if",
"position": [
1200,
3312
],
"parameters": {
"options": {},
"conditions": {
"boolean": [
{
"value1": "={{ $json.needs_alert }}",
"value2": true
}
]
}
},
"typeVersion": 2
},
{
"id": "24cdee69-2017-47ba-961f-198a6bea352f",
"name": "💬 Slack アラート送信1",
"type": "n8n-nodes-base.slack",
"position": [
1424,
3232
],
"webhookId": "32545389-7dfc-490c-b4e4-933298983f3e",
"parameters": {
"text": "=🚨 *FAQ Quality Alert* 🚨\n\n{{ $json.summary_text }}\n\n---\n\n⚠️ *Action Required:*\n{{ $json.critical_count > 0 ? '🔴 ' + $json.critical_count + ' CRITICAL issues need immediate attention\\n' : '' }}{{ $json.warning_count > 0 ? '⚠️ ' + $json.warning_count + ' warnings should be reviewed\\n' : '' }}\n📋 View full details: https://docs.google.com/spreadsheets/d/{{ $json.sheet_id }}/edit#gid=0\n\n*Run ID:* `{{ $json.run_id }}`",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "C09GNB90TED"
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"id": "rNqvWj9TfChPVRYY",
"name": "Slack account vivek"
}
},
"typeVersion": 2.1
},
{
"id": "4e661beb-0009-4de3-8388-fb7221b9afad",
"name": "✅ 完了サマリー1",
"type": "n8n-nodes-base.set",
"position": [
1632,
3408
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "complete_message",
"name": "completion_message",
"type": "string",
"value": "=✅ FAQ Quality Check Complete!\n\nRun ID: {{ $json.run_id }}\nTotal FAQs Evaluated: {{ $json.total_faqs }}\nAverage Score: {{ $json.average_score }}/10\nPass Rate: {{ $json.pass_rate }}%\n\nResults saved to Google Sheets.\n{{ $json.needs_alert ? 'Alerts sent to team.' : 'No alerts needed - all FAQs meeting quality standards!' }}"
},
{
"id": "results_url",
"name": "results_url",
"type": "string",
"value": "=https://docs.google.com/spreadsheets/d/{{ $json.sheet_id }}/edit"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "e93ce33f-4bbe-476b-82f3-e122987bae3a",
"name": "メッセージ送信1",
"type": "n8n-nodes-base.gmail",
"position": [
1872,
3312
],
"webhookId": "0e92bde1-6732-420d-a95e-94378cfee529",
"parameters": {
"sendTo": "info@example.com",
"message": "={{ $json.text }}",
"options": {},
"subject": "={{ $json.text }}",
"emailType": "text"
},
"credentials": {
"gmailOAuth2": {
"id": "RchiXdmY8WaQhOSJ",
"name": "Gmail account"
}
},
"typeVersion": 2.1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "3fb46229-1e78-4bb1-9e72-90cfba38bf71",
"connections": {
"9bc66b99-cb86-4c3e-abc4-fa6fa8685e29": {
"ai_languageModel": [
[
{
"node": "5db219e2-af99-4386-b3f9-c53a79cc9cf6",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"653f3c13-0665-48ad-93a3-ed24e860518f": {
"main": [
[
{
"node": "e27c8068-5afc-4cd7-8204-6ba2a43e5b48",
"type": "main",
"index": 0
}
]
]
},
"5db219e2-af99-4386-b3f9-c53a79cc9cf6": {
"main": [
[
{
"node": "e2a58c64-1552-43ae-a7df-2bf665ea52a1",
"type": "main",
"index": 0
}
]
]
},
"aa25afd0-e903-4352-a809-a995941dbee0": {
"main": [
[
{
"node": "653f3c13-0665-48ad-93a3-ed24e860518f",
"type": "main",
"index": 0
}
]
]
},
"0cf75d4f-f2e1-47ca-91f1-4ddffd9ff987": {
"main": [
[
{
"node": "5390e894-108c-462c-8b4e-85fa481a631c",
"type": "main",
"index": 0
}
]
]
},
"24cdee69-2017-47ba-961f-198a6bea352f": {
"main": [
[
{
"node": "4e661beb-0009-4de3-8388-fb7221b9afad",
"type": "main",
"index": 0
}
]
]
},
"4e661beb-0009-4de3-8388-fb7221b9afad": {
"main": [
[
{
"node": "e93ce33f-4bbe-476b-82f3-e122987bae3a",
"type": "main",
"index": 0
}
]
]
},
"ad83a4b8-4cdc-40a3-b5de-49fb85ac205c": {
"main": [
[
{
"node": "853e8bba-0d8e-413a-b6fb-959e8ea1896c",
"type": "main",
"index": 0
}
]
]
},
"e27c8068-5afc-4cd7-8204-6ba2a43e5b48": {
"main": [
[
{
"node": "5db219e2-af99-4386-b3f9-c53a79cc9cf6",
"type": "main",
"index": 0
}
]
]
},
"e2a58c64-1552-43ae-a7df-2bf665ea52a1": {
"main": [
[
{
"node": "ad83a4b8-4cdc-40a3-b5de-49fb85ac205c",
"type": "main",
"index": 0
}
]
]
},
"853e8bba-0d8e-413a-b6fb-959e8ea1896c": {
"main": [
[
{
"node": "0cf75d4f-f2e1-47ca-91f1-4ddffd9ff987",
"type": "main",
"index": 0
}
]
]
},
"5390e894-108c-462c-8b4e-85fa481a631c": {
"main": [
[
{
"node": "24cdee69-2017-47ba-961f-198a6bea352f",
"type": "main",
"index": 0
},
{
"node": "4e661beb-0009-4de3-8388-fb7221b9afad",
"type": "main",
"index": 0
}
],
[
{
"node": "4e661beb-0009-4de3-8388-fb7221b9afad",
"type": "main",
"index": 0
}
]
]
},
"35aa638c-cbaa-4125-877d-68560d49de34": {
"main": [
[
{
"node": "aa25afd0-e903-4352-a809-a995941dbee0",
"type": "main",
"index": 0
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
上級 - 文書抽出, AI要約
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
自動化依存関係更新の追跡
GPT-4o、Slack、Jira、Google Sheets を使った依存関係更新リスク分析の実装
If
Set
Code
+
If
Set
Code
23 ノードRahul Joshi
DevOps
個別化された辞退/次のステップメール
Google Sheets、GPT-4o-mini、Gmail、ClickUpを使った候補者の辞退処理の自動化
If
Set
Code
+
If
Set
Code
38 ノードRahul Joshi
人事
新規開発者の入社業務の自動化
GPT-4oを使用した従業員採用業務の自動化:Jira、Notion、Gmailの統合
If
Set
Code
+
If
Set
Code
21 ノードRahul Joshi
人事
フィードバックの保存とレポート生成
Azure OpenAI と Google Sheets を使用して営業取引の結果を分析し、レポートを生成する
Set
Code
Email Send
+
Set
Code
Email Send
28 ノードRahul Joshi
顧客管理
構造化された面接フィードバックの収集
GPT-4o-mini、Gmail、ClickUpタスク追跡を使った候補者の辞退処理の自動化
If
Code
Gmail
+
If
Code
Gmail
18 ノードRahul Joshi
人事
Jira のタスク整理レポートをSlack、Gmail、AIで自動化
Slack、Gmail そして GPT-4 を使った Jira タスク整理とレポートの自動化
If
Set
Jira
+
If
Set
Jira
31 ノードRahul Joshi
ワークフロー情報
難易度
上級
ノード数19
カテゴリー2
ノードタイプ10
作成者
Rahul Joshi
@rahul08Rahul Joshi is a seasoned technology leader specializing in the n8n automation tool and AI-driven workflow automation. With deep expertise in building open-source workflow automation and self-hosted automation platforms, he helps organizations eliminate manual processes through intelligent n8n ai agent automation solutions.
外部リンク
n8n.ioで表示 →
このワークフローを共有