Senden der heutigen Interviewpläne von Google Calendar an jeden Interviewer per E-Mail
Dies ist ein HR-Bereich Automatisierungsworkflow mit 6 Nodes. Hauptsächlich werden Code, Gmail, GoogleCalendar, ScheduleTrigger und andere Nodes verwendet. Automatisiertes Versenden heutiger Interview-Pläne aus dem Google Kalender an das Gmail-Konto jedes Interviewers
- •Google-Konto + Gmail API-Anmeldedaten
Verwendete Nodes (6)
Kategorie
{
"id": "MvSVpfzaFUWELNTR",
"meta": {
"instanceId": "14e4c77104722ab186539dfea5182e419aecc83d85963fe13f6de862c875ebfa",
"templateCredsSetupCompleted": true
},
"name": "Send today’s interview schedule from Google Calendar to each interviewer via email",
"tags": [],
"nodes": [
{
"id": "1ad3eb39-d1e3-455c-ad06-3264c2b6ec91",
"name": "Über diese Vorlage",
"type": "n8n-nodes-base.stickyNote",
"position": [
-180,
720
],
"parameters": {
"width": 1220,
"height": 240,
"content": "## Description\nThis workflow automatically sends daily interview schedules to each interviewer via email. It is triggered every day at 8:00 AM, fetches all interview events from a specified Google Calendar, and groups them by interviewer email (based on the event organizer or creator). Each interviewer then receives a personalized HTML-formatted email listing their interview schedule for the day, including event titles, start and end times."
},
"typeVersion": 1
},
{
"id": "d25ce1fa-0914-4ec4-aca6-10b232a0e753",
"name": "Zeitplan-Auslöser",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-100,
420
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 8
}
]
}
},
"typeVersion": 1.2
},
{
"id": "e16e6483-873a-4184-84dc-67120fbcb4a3",
"name": "HTML-Tabelle",
"type": "n8n-nodes-base.code",
"position": [
520,
420
],
"parameters": {
"jsCode": "const events = $input.all().map(e => e.json);\n\n// Group events by organizer or creator email\nconst grouped = {};\n\nfor (const event of events) {\n const interviewerEmail = event.organizer?.email || event.creator?.email;\n if (!interviewerEmail) continue;\n\n if (!grouped[interviewerEmail]) grouped[interviewerEmail] = [];\n\n const attendees = (event.attendees || []).map(att => {\n return `${att.email} (${att.responseStatus})`;\n }).join('<br>');\n\n grouped[interviewerEmail].push({\n summary: event.summary || 'No Title',\n start: event.start?.dateTime || event.start?.date || 'N/A',\n end: event.end?.dateTime || event.end?.date || 'N/A',\n description: event.description || 'No description',\n htmlLink: event.htmlLink || '',\n meetLink: event.conferenceData?.entryPoints?.[0]?.uri || event.hangoutLink || 'N/A',\n attendees: attendees || 'No attendees'\n });\n}\n\nconst output = [];\n\nfor (const [email, interviews] of Object.entries(grouped)) {\n let html = `<h3>Your Interview Schedule for Today</h3>\n <table border=\"1\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <th>Title</th>\n <th>Start</th>\n <th>End</th>\n <th>Description</th>\n <th>Meeting Link</th>\n <th>Attendees (Status)</th>\n </tr>`;\n\n for (const iv of interviews) {\n html += `<tr>\n <td>${iv.summary}</td>\n <td>${new Date(iv.start).toLocaleString('en-IN', { timeZone: 'Asia/Kolkata' })}</td>\n <td>${new Date(iv.end).toLocaleString('en-IN', { timeZone: 'Asia/Kolkata' })}</td>\n <td>${iv.description}</td>\n <td><a href=\"${iv.meetLink}\" target=\"_blank\">Join</a></td>\n <td>${iv.attendees}</td>\n </tr>`;\n }\n\n html += `</table>`;\n\n output.push({\n json: {\n interviewer_email: email,\n subject: \"Today's Interview Schedule\",\n htmlContent: html\n }\n });\n}\n\nreturn output;\n"
},
"typeVersion": 2
},
{
"id": "33bd4e2d-fa01-42e4-9daa-c545763df3b9",
"name": "Gmail",
"type": "n8n-nodes-base.gmail",
"position": [
780,
420
],
"webhookId": "83f6fa30-5040-4cd7-8f80-8de32a34eef4",
"parameters": {
"sendTo": "={{ $json.interviewer_email }}",
"message": "={{ $json.htmlContent }}",
"options": {},
"subject": "Interview Reminder"
},
"credentials": {
"gmailOAuth2": {
"id": "FtDjIC7F7A1YfkbR",
"name": "Gmail account 6"
}
},
"typeVersion": 2.1
},
{
"id": "e9103f86-7674-4b4f-856e-babae68f6c0f",
"name": "Google Calendar (Interview-Termine abrufen)",
"type": "n8n-nodes-base.googleCalendar",
"position": [
220,
420
],
"parameters": {
"options": {},
"calendar": {
"__rl": true,
"mode": "list",
"value": "pythontech3.wli@gmail.com",
"cachedResultName": "pythontech3.wli@gmail.com"
},
"operation": "getAll",
"returnAll": true
},
"credentials": {
"googleCalendarOAuth2Api": {
"id": "xNOum1xp3mzYWwJr",
"name": "Google Calendar Pythontech3"
}
},
"typeVersion": 1.3
},
{
"id": "0b2f912b-19af-4c90-a42b-4f32daf6e73a",
"name": "Kurznotiz",
"type": "n8n-nodes-base.stickyNote",
"position": [
-180,
320
],
"parameters": {
"color": 7,
"width": 1220,
"height": 360,
"content": "## Send today’s interview schedule from Google Calendar to each interviewer via email"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "61b63191-87b5-4974-99fa-7437035c1dcd",
"connections": {
"e16e6483-873a-4184-84dc-67120fbcb4a3": {
"main": [
[
{
"node": "33bd4e2d-fa01-42e4-9daa-c545763df3b9",
"type": "main",
"index": 0
}
]
]
},
"d25ce1fa-0914-4ec4-aca6-10b232a0e753": {
"main": [
[
{
"node": "e9103f86-7674-4b4f-856e-babae68f6c0f",
"type": "main",
"index": 0
}
]
]
},
"e9103f86-7674-4b4f-856e-babae68f6c0f": {
"main": [
[
{
"node": "e16e6483-873a-4184-84dc-67120fbcb4a3",
"type": "main",
"index": 0
}
]
]
}
}
}Wie verwende ich diesen Workflow?
Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.
Für welche Szenarien ist dieser Workflow geeignet?
Fortgeschritten - Personalwesen
Ist es kostenpflichtig?
Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.
Verwandte Workflows
WeblineIndia
@weblineindiaA Leading Software Engineering, Consulting & Outsourcing Services Company in USA & India serving Clients Globally since 1999.
Diesen Workflow teilen