AI候補者選考・面接スケジュールシステム
これはHR, AI Summarization分野の自動化ワークフローで、18個のノードを含みます。主にIf, Code, Webhook, EmailSend, GoogleSheetsなどのノードを使用。 AIベースの候補者スクリーニングと面接スケジューリング(OpenAI GPTとGoogleスイート)
- •HTTP Webhookエンドポイント(n8nが自動生成)
- •Google Sheets API認証情報
- •OpenAI API Key
{
"id": "pHbBtdjeo2u8avrY",
"meta": {
"instanceId": "dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281",
"templateCredsSetupCompleted": true
},
"name": "AI Candidate Screening & Interview Scheduler",
"tags": [],
"nodes": [
{
"id": "6bb2e121-0353-43a0-96f3-1e881f9ea9e9",
"name": "Webhook - 応募受信",
"type": "n8n-nodes-base.webhook",
"notes": "📥 ENTRY POINT\n\nThis webhook receives job applications from candidates.\n\nExpected data:\n- Candidate Name\n- Email\n- Phone\n- Resume (URL or text)\n- Cover Letter\n- Years of Experience\n- Skills\n\nURL: https://your-n8n-instance.com/webhook/job-application",
"position": [
-1008,
1552
],
"webhookId": "job-application-webhook",
"parameters": {
"path": "job-application",
"options": {},
"responseMode": "responseNode"
},
"typeVersion": 1
},
{
"id": "8fa4ef36-d737-446c-a4aa-ca7eef8654dc",
"name": "付箋 - ワークフロー概要",
"type": "n8n-nodes-base.stickyNote",
"position": [
-832,
576
],
"parameters": {
"color": 3,
"width": 350,
"height": 400,
"content": "## 📋 Workflow Overview\n\nThis workflow automates the complete recruitment process:\n\n1️⃣ Receive applications via webhook\n2️⃣ Store in database/spreadsheet\n3️⃣ AI evaluates candidate fit\n4️⃣ Score and rank candidates\n5️⃣ Send notifications\n6️⃣ Schedule interviews for qualified candidates\n\n**Role:** Automation Specialist\n**AI Used:** OpenAI GPT for evaluation"
},
"typeVersion": 1
},
{
"id": "a34130de-94c4-4760-8883-3b778afe6319",
"name": "Google Sheets - 応募情報保存",
"type": "n8n-nodes-base.googleSheets",
"notes": "💾 DATA STORAGE\n\nStores all application data in Google Sheets for:\n- Easy tracking and management\n- Historical record keeping\n- Team collaboration\n- Backup of all applications\n\nAlternative: Can use Airtable, PostgreSQL, or MySQL instead",
"position": [
-784,
1552
],
"parameters": {
"columns": {
"value": {},
"schema": [],
"mappingMode": "autoMapInputData",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "=Applications"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "=34yuhedwqre"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"id": "ScSS2KxGQULuPtdy",
"name": "Google Sheets- test"
}
},
"typeVersion": 4
},
{
"id": "47f948e2-6945-4b41-95fb-7ffc04d488af",
"name": "付箋 - 保存情報",
"type": "n8n-nodes-base.stickyNote",
"position": [
-848,
1136
],
"parameters": {
"color": 5,
"width": 220,
"height": 584,
"content": "## 📊 Database Storage\n\nApplications are stored with:\n- Timestamp\n- Contact information\n- Experience details\n- Skills list\n- Resume link\n- Current status\n\nThis creates an applicant tracking system (ATS)"
},
"typeVersion": 1
},
{
"id": "dc349940-72dc-49bf-b44f-68510c5e923a",
"name": "OpenAI - AI候補者評価",
"type": "@n8n/n8n-nodes-langchain.openAi",
"notes": "🤖 AI EVALUATION ENGINE\n\nUses GPT-4 to:\n- Analyze candidate qualifications\n- Match skills against job requirements\n- Identify strengths and gaps\n- Provide objective scoring (0-100)\n- Generate hiring recommendation\n\nBenefits:\n- Consistent evaluation criteria\n- Unbiased initial screening\n- Faster processing\n- Detailed insights",
"position": [
-560,
1552
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "id",
"value": "=add your model"
},
"options": {
"temperature": 0.3
},
"messages": {
"values": [
{
"content": "=Your name is Rayan and you are an expert technical recruiter evaluating candidates for an Automation Specialist position.\n\nJob Requirements:\n- 3+ years of experience in automation\n- Strong skills in n8n, Make.com, or Zapier\n- Programming: Python, JavaScript\n- API integration experience\n- Workflow design expertise\n- Problem-solving abilities\n\nCandidate Information:\nName: {{ $json.body.name }}\nExperience: {{ $json.body.experience }} years\nSkills: {{ $json.body.skills }}\nResume Summary: {{ $json.body.resume }}\n\nEvaluate this candidate and provide:\n1. Overall Score (0-100)\n2. Strengths (3-5 points)\n3. Weaknesses (2-3 points)\n4. Recommendation (Strong Hire / Hire / Maybe / Reject)\n5. Key concerns or highlights\n\nFormat your response as JSON:\n{\n \"score\": 85,\n \"recommendation\": \"Hire\",\n \"strengths\": [\"...\"],\n \"weaknesses\": [\"...\"],\n \"summary\": \"...\"\n}"
}
]
}
},
"credentials": {
"openAiApi": {
"id": "CDQ16eImh6D4tY15",
"name": "OpenAi account 2 - test"
}
},
"typeVersion": 1
},
{
"id": "a99cf7ab-03db-4a7e-98fe-4a8025a03cd2",
"name": "付箋 - AI処理",
"type": "n8n-nodes-base.stickyNote",
"position": [
-608,
1136
],
"parameters": {
"color": 5,
"width": 204,
"height": 584,
"content": "## 🧠 AI Evaluation\n\nThe AI analyzes:\n✓ Experience level match\n✓ Technical skills alignment\n✓ Automation tool proficiency\n✓ Programming capabilities\n✓ Overall candidate fit\n\nOutput: Structured evaluation report"
},
"typeVersion": 1
},
{
"id": "2a7f8223-ee02-4c1a-90c4-9cda4ac86831",
"name": "Code - 評価処理",
"type": "n8n-nodes-base.code",
"notes": "⚙️ DATA PROCESSING\n\nThis node:\n- Parses AI evaluation response\n- Extracts structured data (score, recommendation)\n- Combines candidate + evaluation data\n- Determines next step (Interview or Reject)\n- Handles errors gracefully\n\nThreshold: Score ≥ 70 → Interview",
"position": [
-336,
1552
],
"parameters": {
"jsCode": "// Parse AI response and structure data\nconst aiResponse = $input.first().json.message.content;\nlet evaluation;\n\ntry {\n // Extract JSON from AI response\n const jsonMatch = aiResponse.match(/\\{[\\s\\S]*\\}/);\n evaluation = JSON.parse(jsonMatch[0]);\n} catch (error) {\n // Fallback if JSON parsing fails\n evaluation = {\n score: 50,\n recommendation: \"Needs Review\",\n strengths: [\"Unable to parse\"],\n weaknesses: [\"AI response format error\"],\n summary: aiResponse\n };\n}\n\n// Get original application data\nconst applicationData = $('Webhook - Receive Application').first().json.body;\n\n// Combine all data\nreturn {\n json: {\n candidate: {\n name: applicationData.name,\n email: applicationData.email,\n phone: applicationData.phone,\n experience: applicationData.experience,\n skills: applicationData.skills\n },\n evaluation: {\n score: evaluation.score,\n recommendation: evaluation.recommendation,\n strengths: evaluation.strengths,\n weaknesses: evaluation.weaknesses,\n summary: evaluation.summary,\n evaluatedAt: new Date().toISOString()\n },\n decision: evaluation.score >= 70 ? \"Interview\" : \"Reject\"\n }\n};"
},
"typeVersion": 2
},
{
"id": "890d9265-4b7c-4cee-8541-08ac6dd7832d",
"name": "IF - スコア閾値確認",
"type": "n8n-nodes-base.if",
"notes": "🔀 DECISION POINT\n\nRoutes candidates based on evaluation:\n\n✅ TRUE (Score ≥ 70):\n- Send interview invitation\n- Schedule meeting\n- Update status to 'Interview Scheduled'\n\n❌ FALSE (Score < 70):\n- Send rejection email\n- Update status to 'Rejected'\n- Archive application",
"position": [
-112,
1552
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.decision }}",
"value2": "Interview",
"operation": "equals"
}
]
}
},
"typeVersion": 1
},
{
"id": "d9d8619f-79bf-47d8-b0fd-7f7e9d1054e1",
"name": "付箋 - 判定ロジック",
"type": "n8n-nodes-base.stickyNote",
"position": [
-368,
1216
],
"parameters": {
"color": 5,
"width": 380,
"height": 496,
"content": "## 🎯 Scoring Logic\n\nScore ≥ 70: Qualified for interview\nScore < 70: Not a fit\n\nThis threshold can be adjusted based on:\n- Role requirements\n- Application volume\n- Hiring urgency"
},
"typeVersion": 1
},
{
"id": "5ee3c07a-d3b2-4c73-aadc-54ef03bf7ec9",
"name": "Email - 面接招待状",
"type": "n8n-nodes-base.emailSend",
"notes": "✉️ INTERVIEW INVITATION\n\nSends personalized email to qualified candidates:\n- Congratulatory message\n- Evaluation highlights\n- Next steps information\n- Request for confirmation\n\nAlternative: Use SendGrid, Gmail, or Outlook node",
"position": [
112,
1456
],
"webhookId": "e0dcc54e-4b72-4a8f-af17-f5dd7843f753",
"parameters": {
"text": "=Dear {{ $json.candidate.name }},\n\nCongratulations! We were impressed with your application for the Automation Specialist position.\n\nEvaluation Summary:\n- Overall Score: {{ $json.evaluation.score }}/100\n- Recommendation: {{ $json.evaluation.recommendation }}\n\nStrengths:\n{{ $json.evaluation.strengths.join('\\n- ') }}\n\nWe would like to invite you for an interview. Our team will reach out shortly to schedule a convenient time.\n\nPlease reply to confirm your continued interest.\n\nBest regards,\nHR Team",
"options": {},
"subject": "Interview Invitation - Automation Specialist Position",
"toEmail": "={{ $json.candidate.email }}",
"fromEmail": "hr@company.com"
},
"credentials": {
"smtp": {
"id": "3QSx1pWoS0BZcK4c",
"name": "SMTP account"
}
},
"typeVersion": 2
},
{
"id": "695c0973-9c31-47a2-88ec-24b7989089b4",
"name": "Email - 不採用通知",
"type": "n8n-nodes-base.emailSend",
"notes": "✉️ REJECTION NOTICE\n\nSends professional rejection email:\n- Respectful and kind tone\n- Thanks candidate for interest\n- Encourages future applications\n- Maintains company reputation\n\nBest practice: Always send closure to candidates",
"position": [
336,
1648
],
"webhookId": "1c10023a-2b19-46de-a049-c4fb38cb13a0",
"parameters": {
"text": "=Dear {{ $json.candidate.name }},\n\nThank you for your interest in the Automation Specialist position at our company.\n\nAfter careful review of your application, we have decided to move forward with other candidates whose experience more closely matches our current requirements.\n\nWe appreciate the time you invested in your application and encourage you to apply for future opportunities that align with your skills.\n\nWe wish you the best in your job search.\n\nBest regards,\nHR Team",
"options": {},
"subject": "Application Update - Automation Specialist Position",
"toEmail": "={{ $json.candidate.email }}",
"fromEmail": "hr@company.com"
},
"credentials": {
"smtp": {
"id": "3QSx1pWoS0BZcK4c",
"name": "SMTP account"
}
},
"typeVersion": 2
},
{
"id": "37081a08-cac7-403e-a6a1-f67b00efd078",
"name": "Google Calendar - 面接日程調整",
"type": "n8n-nodes-base.googleCalendar",
"notes": "📅 INTERVIEW SCHEDULING\n\nAutomatically creates calendar event:\n- Scheduled 3 days in advance\n- 1-hour duration\n- Includes candidate details\n- Adds evaluation summary\n- Invites candidate + hiring manager\n- Sends calendar invites\n\nAlternative: Use Calendly API integration",
"position": [
336,
1456
],
"parameters": {
"end": "={{ $now.plus(3, 'days').set({ hour: 11, minute: 0 }).toISO() }}",
"start": "={{ $now.plus(3, 'days').set({ hour: 10, minute: 0 }).toISO() }}",
"calendar": {
"__rl": true,
"mode": "id",
"value": "=9ikjnhy65trfdser4"
},
"additionalFields": {}
},
"credentials": {
"googleCalendarOAuth2Api": {
"id": "6ldLmzzYtaqng4pw",
"name": "Google Calendar account - test"
}
},
"typeVersion": 1
},
{
"id": "56ed8c49-514c-47e2-a83e-e453ce7894ea",
"name": "付箋 - メールロジック",
"type": "n8n-nodes-base.stickyNote",
"position": [
64,
1152
],
"parameters": {
"color": 5,
"width": 428,
"height": 656,
"content": "## 📧 Email Notifications\n\nTwo paths:\n\n1️⃣ HIGH SCORE:\n- Interview invitation\n- Positive feedback\n- Schedule interview\n\n2️⃣ LOW SCORE:\n- Professional rejection\n- Kind closure\n- Future encouragement"
},
"typeVersion": 1
},
{
"id": "56eeb778-14d9-41db-b9a6-279d8c4d9027",
"name": "Update Sheet - 面接ステータス更新",
"type": "n8n-nodes-base.googleSheets",
"notes": "📝 STATUS UPDATE - INTERVIEW\n\nUpdates Google Sheet with:\n- Status: 'Interview Scheduled'\n- AI evaluation score\n- Recommendation level\n- Interview date\n\nThis keeps the ATS current for HR team tracking",
"position": [
560,
1456
],
"parameters": {
"columns": {
"value": {},
"schema": [],
"mappingMode": "autoMapInputData",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": "Applications",
"documentId": {
"__rl": true,
"mode": "id",
"value": "=koi8uhbvfgtyuj"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"id": "ScSS2KxGQULuPtdy",
"name": "Google Sheets- test"
}
},
"typeVersion": 4
},
{
"id": "7e36df56-3674-4f34-af49-e3809b946f4b",
"name": "Update Sheet - 不採用ステータス更新",
"type": "n8n-nodes-base.googleSheets",
"notes": "📝 STATUS UPDATE - REJECTION\n\nUpdates Google Sheet with:\n- Status: 'Rejected'\n- AI evaluation score\n- Recommendation (for records)\n- Rejection date\n\nMaintains complete audit trail",
"position": [
560,
1648
],
"parameters": {
"columns": {
"value": {},
"schema": [],
"mappingMode": "autoMapInputData",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "id",
"value": "=Applications"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "=hgt567ikmnhjuio9"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"id": "ScSS2KxGQULuPtdy",
"name": "Google Sheets- test"
}
},
"typeVersion": 4
},
{
"id": "140accea-6390-4317-ae76-cfad1da6b1ee",
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"notes": "📤 WEBHOOK RESPONSE\n\nSends confirmation back to application form:\n- Success status\n- Confirmation message\n- Processing status\n\nThis closes the webhook connection and confirms receipt to the applicant",
"position": [
784,
1552
],
"parameters": {
"options": {},
"respondWith": "json",
"responseBody": "={{ {\"success\": true, \"message\": \"Application received and processed\", \"candidateName\": $json.candidate.name, \"status\": $json.decision} }}"
},
"typeVersion": 1
},
{
"id": "2611d5c3-fedf-4a2b-ac0b-21a42ad532eb",
"name": "付箋 - 完了",
"type": "n8n-nodes-base.stickyNote",
"position": [
528,
1088
],
"parameters": {
"color": 5,
"width": 396,
"height": 728,
"content": "## 🎉 Workflow Complete!\n\nFinal steps:\n1. Status updated in database\n2. Emails sent to candidate\n3. Calendar scheduled (if interview)\n4. Response sent to form\n\n**Metrics to Track:**\n- Applications received\n- Average AI score\n- Interview rate\n- Time to process"
},
"typeVersion": 1
},
{
"id": "80c5dc1a-90c0-4323-8fa9-a92811241fba",
"name": "付箋 - セットアップ手順",
"type": "n8n-nodes-base.stickyNote",
"position": [
-400,
672
],
"parameters": {
"color": 4,
"width": 398,
"height": 412,
"content": "## 🔧 Configuration Required\n\n**Environment Variables:**\n- GOOGLE_SHEET_ID: Your Google Sheet ID\n\n**Credentials Needed:**\n1. Google Sheets OAuth2\n2. OpenAI API Key\n3. SMTP Email Account\n4. Google Calendar OAuth2\n\n**Customize:**\n- Job requirements in AI prompt\n- Score threshold (currently 70)\n- Email templates\n- Interview scheduling time"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "1f088f30-607a-4797-9576-0dd517138820",
"connections": {
"695c0973-9c31-47a2-88ec-24b7989089b4": {
"main": [
[
{
"node": "7e36df56-3674-4f34-af49-e3809b946f4b",
"type": "main",
"index": 0
}
]
]
},
"2a7f8223-ee02-4c1a-90c4-9cda4ac86831": {
"main": [
[
{
"node": "890d9265-4b7c-4cee-8541-08ac6dd7832d",
"type": "main",
"index": 0
}
]
]
},
"890d9265-4b7c-4cee-8541-08ac6dd7832d": {
"main": [
[
{
"node": "5ee3c07a-d3b2-4c73-aadc-54ef03bf7ec9",
"type": "main",
"index": 0
}
],
[
{
"node": "695c0973-9c31-47a2-88ec-24b7989089b4",
"type": "main",
"index": 0
}
]
]
},
"5ee3c07a-d3b2-4c73-aadc-54ef03bf7ec9": {
"main": [
[
{
"node": "37081a08-cac7-403e-a6a1-f67b00efd078",
"type": "main",
"index": 0
}
]
]
},
"6bb2e121-0353-43a0-96f3-1e881f9ea9e9": {
"main": [
[
{
"node": "a34130de-94c4-4760-8883-3b778afe6319",
"type": "main",
"index": 0
}
]
]
},
"56eeb778-14d9-41db-b9a6-279d8c4d9027": {
"main": [
[
{
"node": "140accea-6390-4317-ae76-cfad1da6b1ee",
"type": "main",
"index": 0
}
]
]
},
"7e36df56-3674-4f34-af49-e3809b946f4b": {
"main": [
[
{
"node": "140accea-6390-4317-ae76-cfad1da6b1ee",
"type": "main",
"index": 0
}
]
]
},
"dc349940-72dc-49bf-b44f-68510c5e923a": {
"main": [
[
{
"node": "2a7f8223-ee02-4c1a-90c4-9cda4ac86831",
"type": "main",
"index": 0
}
]
]
},
"a34130de-94c4-4760-8883-3b778afe6319": {
"main": [
[
{
"node": "dc349940-72dc-49bf-b44f-68510c5e923a",
"type": "main",
"index": 0
}
]
]
},
"37081a08-cac7-403e-a6a1-f67b00efd078": {
"main": [
[
{
"node": "56eeb778-14d9-41db-b9a6-279d8c4d9027",
"type": "main",
"index": 0
}
]
]
}
}
}このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
上級 - 人事, AI要約
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
Oneclick AI Squad
@oneclick-aiThe AI Squad Initiative is a pioneering effort to build, automate and scale AI-powered workflows using n8n.io. Our mission is to help individuals and businesses integrate AI agents seamlessly into their daily operations from automating tasks and enhancing productivity to creating innovative, intelligent solutions. We design modular, reusable AI workflow templates that empower creators, developers and teams to supercharge their automation with minimal effort and maximum impact.
このワークフローを共有