The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"updatedAt": "2026-04-18T17:50:08.848Z",
"createdAt": "2026-02-18T08:28:17.501Z",
"id": "zpMyf8QD3ofG6AND",
"name": "Absen Otomatis",
"active": true,
"isArchived": false,
"nodes": [
{
"parameters": {
"authentication": "webhook",
"content": "={{ $json.text }}\n-----------------------------------------",
"options": {}
},
"type": "n8n-nodes-base.discord",
"typeVersion": 2,
"position": [
320,
672
],
"id": "7e92aba5-937c-4d7a-998b-a42851ace83f",
"name": "Discord2",
"credentials": {
"discordWebhookApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "// --- Mention User ---\nconst userId = \"664803448629493816\";\nconst mention = `<@${userId}>`;\n\n// --- Ambil output dari node sebelumnya (opsional) ---\nconst stdout = $input.first()?.json?.stdout || \"\u26a0 Tidak ada output dari script.\";\n\n// --- Ambil waktu sekarang ---\nconst now = new Date();\n\n// --- Hari dalam bahasa Inggris (Monday, Tuesday, ...) ---\nconst dayNames = [\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"];\nconst rawDay = dayNames[now.getDay()];\n\n// --- Jam sekarang dalam HH:mm ---\nconst pad = (n) => String(n).padStart(2, \"0\");\nconst rawTime = `${pad(now.getHours())}:${pad(now.getMinutes())}`;\n\n// --- Normalisasi nama hari ---\nconst dayMap = {\n 'senin': 'Monday', 'selasa': 'Tuesday', 'rabu': 'Wednesday', 'kamis': 'Thursday', 'jumat': 'Friday', 'jum\\'at': 'Friday',\n 'mon': 'Monday', 'monday': 'Monday',\n 'tue': 'Tuesday', 'tues': 'Tuesday', 'tuesday': 'Tuesday',\n 'wed': 'Wednesday', 'wednesday': 'Wednesday',\n 'thu': 'Thursday', 'thur': 'Thursday', 'thursday': 'Thursday',\n 'fri': 'Friday', 'friday': 'Friday'\n};\nconst dayKey = dayMap[rawDay.toLowerCase()] || rawDay;\n\n// --- Jadwal kuliah ---\nconst schedule = {\n Monday: [\n { time: \"08:00\", end: \"09:40\", subject: \"Metodologi Penelitian\", lecturer: \"Dr. Maulisa Oktiana\", room: \"Lab Elektro IV\" }\n ],\n Tuesday: [\n { time: \"10:45\", end: \"12:25\", subject: \"Artificial Inteligent\", lecturer: \"Ir. Yudha Nurdin, ST., MT\", room: \"A14-302\" }\n ],\n Wednesday: [\n { time: \"10:40\", end: \"12:25\", subject: \"Sistem Terdistribusi\", lecturer: \"Ir. Yudha Nurdin, ST., MT\", room: \"A25-201\" },\n { time: \"14:00\", end: \"15:40\", subject: \"Pengolahan Sinyal Multimedia\", lecturer: \"Dr. Maulisa Oktiana\", room: \"A12-302\" }\n ],\n Thursday: [\n { time: \"08:00\", end: \"09:40\", subject: \"Keamanan Informasi\", lecturer: \"Ir. Sayed Muchalili, S.T., M.Sc., IPM\", room: \"A12-304\" },\n { time: \"10:45\", end: \"13:15\", subject: \"Keamanan Jaringan\", lecturer: \"Prof. Dr. Ir. Teuku Yuliar Arif, S.T., M.Kom\", room: \"A24-102\" },\n { time: \"14:00\", end: \"15:45\", subject: \"Sistem Embedded\", lecturer: \"Ir. Rahmad Dawood, S.Kom., M.Sc., IPM\", room: \"Lab Terpadu\" }\n ],\n Friday: [\n { time: \"08:00\", end: \"09:40\", subject: \"Praktikum Distribusi\", lecturer: \"Pak Yudha\", room: \"A12-304\" },\n { time: \"16:30\", end: \"18:15\", subject: \"Tata Tulis Ilmiah\", lecturer: \"Dr. Maulisa Oktiana\", room: \"A12-304\" }\n ]\n};\n\n// --- Helper: parse HH:MM ke menit ---\nfunction parseTimeToMinutes(t) {\n if (!t) return null;\n t = String(t).trim().replace(/\\./g, ':');\n const m = t.match(/(\\d{1,2}):(\\d{2})/);\n if (!m) return null;\n let hh = parseInt(m[1], 10);\n let mm = parseInt(m[2], 10);\n if (isNaN(hh) || isNaN(mm)) return null;\n return hh * 60 + mm;\n}\n\nlet mataKuliah = \"\u2753 Tidak ada jadwal terdaftar.\";\nlet dosen = \"-\";\nlet ruangan = \"-\";\nlet jadwalWaktu = \"-\";\n\nconst nowMinutes = parseTimeToMinutes(rawTime);\n\n// --- Cari jadwal sesuai hari & waktu ---\nif (dayKey && schedule[dayKey]) {\n const rows = schedule[dayKey];\n\n if (nowMinutes !== null) {\n // cek kelas yang sedang berlangsung\n for (const r of rows) {\n const start = parseTimeToMinutes(r.time);\n const end = parseTimeToMinutes(r.end);\n if (start !== null && end !== null && nowMinutes >= start && nowMinutes <= end) {\n mataKuliah = r.subject;\n dosen = r.lecturer;\n ruangan = r.room;\n jadwalWaktu = `${r.time} - ${r.end}`;\n break;\n }\n }\n }\n\n // kalau belum ada kelas sekarang, ambil yang berikutnya\n if (mataKuliah.startsWith(\"\u2753\") && nowMinutes !== null) {\n const upcoming = rows\n .map(r => ({ ...r, start: parseTimeToMinutes(r.time) }))\n .filter(r => r.start !== null && r.start > nowMinutes)\n .sort((a, b) => a.start - b.start);\n\n if (upcoming.length > 0) {\n const next = upcoming[0];\n mataKuliah = `Tidak ada kelas sekarang. Berikutnya: ${next.subject}`;\n dosen = next.lecturer;\n ruangan = next.room;\n jadwalWaktu = `${next.time} - ${next.end}`;\n }\n }\n} else {\n mataKuliah = \"\u274c Hari ini tidak ada jadwal kuliah.\";\n}\n\n// --- Format pesan final ---\nconst finalMessage =\n `\ud83d\udd5c **Absen Otomatis**\n${mention}\n\n\ud83d\udccc Status: ${stdout}\n\ud83d\udcc5 Hari: ${rawDay}\n\u23f0 Jam: ${rawTime}\n\ud83d\udcd6 Mata Kuliah: ${mataKuliah}\n\ud83d\udc68\u200d\ud83c\udfeb Dosen: ${dosen}\n\ud83c\udfeb Ruangan: ${ruangan}\n\ud83d\uddd3 Jadwal: ${jadwalWaktu}`;\n\nreturn [{ json: { text: finalMessage } }];\n"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
96,
672
],
"id": "ee42d31c-d6b9-4ff1-a30d-06580b34e44e",
"name": "Code2"
},
{
"parameters": {
"command": ".venv/bin/python3 absen.py",
"cwd": "/home/n8nbot/absen/absenchaptca"
},
"type": "n8n-nodes-base.ssh",
"typeVersion": 1,
"position": [
-128,
672
],
"id": "ca0475b9-688b-4ea5-a4dd-45ae1842c7f4",
"name": "Absen",
"credentials": {
"sshPassword": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"inputSource": "passthrough"
},
"type": "n8n-nodes-base.executeWorkflowTrigger",
"typeVersion": 1.1,
"position": [
-352,
672
],
"id": "2f4e295d-9d43-454b-bfa8-0d29b12e5af5",
"name": "When Executed by Another Workflow"
},
{
"parameters": {
"amount": "={{ Math.floor(Math.random() * (30 - 1 + 1) + 1) }}",
"unit": "minutes"
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
-352,
480
],
"id": "87db7678-70a0-483c-86b9-bd123ce0146d",
"name": "Wait",
"alwaysOutputData": false
},
{
"parameters": {
"httpMethod": "POST",
"path": "28a15265-0a35-41b8-a33d-d10594d08b60",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-352,
864
],
"id": "71812d7c-b88a-4a2c-8ad6-35f99623eae8",
"name": "Webhook"
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
1
],
"triggerAtHour": 8
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-576,
0
],
"id": "f17dab8e-d98a-415c-af33-62357179fc28",
"name": "KBL",
"executeOnce": false
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
3
],
"triggerAtHour": 14
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-576,
224
],
"id": "0e79c432-d2bc-44b6-a954-e832c4fb1e19",
"name": "Techno",
"executeOnce": false
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
4
],
"triggerAtHour": 8
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-576,
672
],
"id": "37eca6f9-a6b1-4c52-bb58-3bb69f40d667",
"name": "ML",
"executeOnce": false
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
6
],
"triggerAtHour": 14
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-576,
1120
],
"id": "d6029d72-2d53-4b3f-bf33-622501eb0af1",
"name": "IoT",
"executeOnce": false
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
1
],
"triggerAtHour": 14
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-576,
448
],
"id": "35685a23-7939-40ba-8b80-de143354df6a",
"name": "Infra",
"executeOnce": false
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
4
],
"triggerAtHour": 10,
"triggerAtMinute": 45
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-576,
896
],
"id": "d0a116d6-2af8-4ea5-9305-0a44a9f2ae00",
"name": "HPC",
"executeOnce": false
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
3
],
"triggerAtHour": 10,
"triggerAtMinute": 45
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-736,
448
],
"id": "feb75a0a-03be-4e83-b76c-a5d076125135",
"name": "sim jaringan",
"executeOnce": false
}
],
"connections": {
"Code2": {
"main": [
[
{
"node": "Discord2",
"type": "main",
"index": 0
}
]
]
},
"Absen": {
"main": [
[
{
"node": "Code2",
"type": "main",
"index": 0
}
]
]
},
"When Executed by Another Workflow": {
"main": [
[
{
"node": "Absen",
"type": "main",
"index": 0
}
]
]
},
"Wait": {
"main": [
[
{
"node": "Absen",
"type": "main",
"index": 0
}
]
]
},
"Webhook": {
"main": [
[
{
"node": "Absen",
"type": "main",
"index": 0
}
]
]
},
"KBL": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Techno": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"ML": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"IoT": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"HPC": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Infra": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"sim jaringan": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1",
"binaryMode": "separate",
"availableInMCP": false,
"timeSavedMode": "dynamic",
"errorWorkflow": "PWFdEg6jEbv43mqe",
"callerPolicy": "workflowsFromSameOwner"
},
"staticData": {
"node:KBL": {
"recurrenceRules": []
},
"node:Techno": {
"recurrenceRules": []
},
"node:ML": {
"recurrenceRules": []
},
"node:IoT": {
"recurrenceRules": []
},
"node:Infra": {
"recurrenceRules": []
},
"node:HPC": {
"recurrenceRules": []
},
"node:sim jaringan": {
"recurrenceRules": []
}
},
"meta": {
"templateCredsSetupCompleted": true
},
"versionId": "6fe95b1f-66dd-4596-a9e4-ad539b937ee3",
"activeVersionId": "6fe95b1f-66dd-4596-a9e4-ad539b937ee3",
"triggerCount": 8,
"shared": [
{
"updatedAt": "2026-02-18T08:28:17.503Z",
"createdAt": "2026-02-18T08:28:17.503Z",
"role": "workflow:owner",
"workflowId": "zpMyf8QD3ofG6AND",
"projectId": "UoStXPqNC0kdV8zl"
}
],
"activeVersion": {
"updatedAt": "2026-04-18T17:50:24.000Z",
"createdAt": "2026-04-18T17:50:08.849Z",
"versionId": "6fe95b1f-66dd-4596-a9e4-ad539b937ee3",
"workflowId": "zpMyf8QD3ofG6AND",
"nodes": [
{
"parameters": {
"authentication": "webhook",
"content": "={{ $json.text }}\n-----------------------------------------",
"options": {}
},
"type": "n8n-nodes-base.discord",
"typeVersion": 2,
"position": [
320,
672
],
"id": "7e92aba5-937c-4d7a-998b-a42851ace83f",
"name": "Discord2",
"webhookId": "8b2ed5c9-d278-4f0f-8c37-ec7f632b9e86",
"credentials": {
"discordWebhookApi": {
"id": "JHvVLeTRZc9yHx9f",
"name": "absen dc"
}
}
},
{
"parameters": {
"jsCode": "// --- Mention User ---\nconst userId = \"664803448629493816\";\nconst mention = `<@${userId}>`;\n\n// --- Ambil output dari node sebelumnya (opsional) ---\nconst stdout = $input.first()?.json?.stdout || \"\u26a0 Tidak ada output dari script.\";\n\n// --- Ambil waktu sekarang ---\nconst now = new Date();\n\n// --- Hari dalam bahasa Inggris (Monday, Tuesday, ...) ---\nconst dayNames = [\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"];\nconst rawDay = dayNames[now.getDay()];\n\n// --- Jam sekarang dalam HH:mm ---\nconst pad = (n) => String(n).padStart(2, \"0\");\nconst rawTime = `${pad(now.getHours())}:${pad(now.getMinutes())}`;\n\n// --- Normalisasi nama hari ---\nconst dayMap = {\n 'senin': 'Monday', 'selasa': 'Tuesday', 'rabu': 'Wednesday', 'kamis': 'Thursday', 'jumat': 'Friday', 'jum\\'at': 'Friday',\n 'mon': 'Monday', 'monday': 'Monday',\n 'tue': 'Tuesday', 'tues': 'Tuesday', 'tuesday': 'Tuesday',\n 'wed': 'Wednesday', 'wednesday': 'Wednesday',\n 'thu': 'Thursday', 'thur': 'Thursday', 'thursday': 'Thursday',\n 'fri': 'Friday', 'friday': 'Friday'\n};\nconst dayKey = dayMap[rawDay.toLowerCase()] || rawDay;\n\n// --- Jadwal kuliah ---\nconst schedule = {\n Monday: [\n { time: \"08:00\", end: \"09:40\", subject: \"Metodologi Penelitian\", lecturer: \"Dr. Maulisa Oktiana\", room: \"Lab Elektro IV\" }\n ],\n Tuesday: [\n { time: \"10:45\", end: \"12:25\", subject: \"Artificial Inteligent\", lecturer: \"Ir. Yudha Nurdin, ST., MT\", room: \"A14-302\" }\n ],\n Wednesday: [\n { time: \"10:40\", end: \"12:25\", subject: \"Sistem Terdistribusi\", lecturer: \"Ir. Yudha Nurdin, ST., MT\", room: \"A25-201\" },\n { time: \"14:00\", end: \"15:40\", subject: \"Pengolahan Sinyal Multimedia\", lecturer: \"Dr. Maulisa Oktiana\", room: \"A12-302\" }\n ],\n Thursday: [\n { time: \"08:00\", end: \"09:40\", subject: \"Keamanan Informasi\", lecturer: \"Ir. Sayed Muchalili, S.T., M.Sc., IPM\", room: \"A12-304\" },\n { time: \"10:45\", end: \"13:15\", subject: \"Keamanan Jaringan\", lecturer: \"Prof. Dr. Ir. Teuku Yuliar Arif, S.T., M.Kom\", room: \"A24-102\" },\n { time: \"14:00\", end: \"15:45\", subject: \"Sistem Embedded\", lecturer: \"Ir. Rahmad Dawood, S.Kom., M.Sc., IPM\", room: \"Lab Terpadu\" }\n ],\n Friday: [\n { time: \"08:00\", end: \"09:40\", subject: \"Praktikum Distribusi\", lecturer: \"Pak Yudha\", room: \"A12-304\" },\n { time: \"16:30\", end: \"18:15\", subject: \"Tata Tulis Ilmiah\", lecturer: \"Dr. Maulisa Oktiana\", room: \"A12-304\" }\n ]\n};\n\n// --- Helper: parse HH:MM ke menit ---\nfunction parseTimeToMinutes(t) {\n if (!t) return null;\n t = String(t).trim().replace(/\\./g, ':');\n const m = t.match(/(\\d{1,2}):(\\d{2})/);\n if (!m) return null;\n let hh = parseInt(m[1], 10);\n let mm = parseInt(m[2], 10);\n if (isNaN(hh) || isNaN(mm)) return null;\n return hh * 60 + mm;\n}\n\nlet mataKuliah = \"\u2753 Tidak ada jadwal terdaftar.\";\nlet dosen = \"-\";\nlet ruangan = \"-\";\nlet jadwalWaktu = \"-\";\n\nconst nowMinutes = parseTimeToMinutes(rawTime);\n\n// --- Cari jadwal sesuai hari & waktu ---\nif (dayKey && schedule[dayKey]) {\n const rows = schedule[dayKey];\n\n if (nowMinutes !== null) {\n // cek kelas yang sedang berlangsung\n for (const r of rows) {\n const start = parseTimeToMinutes(r.time);\n const end = parseTimeToMinutes(r.end);\n if (start !== null && end !== null && nowMinutes >= start && nowMinutes <= end) {\n mataKuliah = r.subject;\n dosen = r.lecturer;\n ruangan = r.room;\n jadwalWaktu = `${r.time} - ${r.end}`;\n break;\n }\n }\n }\n\n // kalau belum ada kelas sekarang, ambil yang berikutnya\n if (mataKuliah.startsWith(\"\u2753\") && nowMinutes !== null) {\n const upcoming = rows\n .map(r => ({ ...r, start: parseTimeToMinutes(r.time) }))\n .filter(r => r.start !== null && r.start > nowMinutes)\n .sort((a, b) => a.start - b.start);\n\n if (upcoming.length > 0) {\n const next = upcoming[0];\n mataKuliah = `Tidak ada kelas sekarang. Berikutnya: ${next.subject}`;\n dosen = next.lecturer;\n ruangan = next.room;\n jadwalWaktu = `${next.time} - ${next.end}`;\n }\n }\n} else {\n mataKuliah = \"\u274c Hari ini tidak ada jadwal kuliah.\";\n}\n\n// --- Format pesan final ---\nconst finalMessage =\n `\ud83d\udd5c **Absen Otomatis**\n${mention}\n\n\ud83d\udccc Status: ${stdout}\n\ud83d\udcc5 Hari: ${rawDay}\n\u23f0 Jam: ${rawTime}\n\ud83d\udcd6 Mata Kuliah: ${mataKuliah}\n\ud83d\udc68\u200d\ud83c\udfeb Dosen: ${dosen}\n\ud83c\udfeb Ruangan: ${ruangan}\n\ud83d\uddd3 Jadwal: ${jadwalWaktu}`;\n\nreturn [{ json: { text: finalMessage } }];\n"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
96,
672
],
"id": "ee42d31c-d6b9-4ff1-a30d-06580b34e44e",
"name": "Code2"
},
{
"parameters": {
"command": ".venv/bin/python3 absen.py",
"cwd": "/home/n8nbot/absen/absenchaptca"
},
"type": "n8n-nodes-base.ssh",
"typeVersion": 1,
"position": [
-128,
672
],
"id": "ca0475b9-688b-4ea5-a4dd-45ae1842c7f4",
"name": "Absen",
"credentials": {
"sshPassword": {
"id": "N1m1tTJEIrNETZuL",
"name": "SSH Password account"
}
}
},
{
"parameters": {
"inputSource": "passthrough"
},
"type": "n8n-nodes-base.executeWorkflowTrigger",
"typeVersion": 1.1,
"position": [
-352,
672
],
"id": "2f4e295d-9d43-454b-bfa8-0d29b12e5af5",
"name": "When Executed by Another Workflow"
},
{
"parameters": {
"amount": "={{ Math.floor(Math.random() * (30 - 1 + 1) + 1) }}",
"unit": "minutes"
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
-352,
480
],
"id": "87db7678-70a0-483c-86b9-bd123ce0146d",
"name": "Wait",
"webhookId": "b2cff5ef-bffe-403b-9397-f089349f3121",
"alwaysOutputData": false
},
{
"parameters": {
"httpMethod": "POST",
"path": "28a15265-0a35-41b8-a33d-d10594d08b60",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-352,
864
],
"id": "71812d7c-b88a-4a2c-8ad6-35f99623eae8",
"name": "Webhook",
"webhookId": "28a15265-0a35-41b8-a33d-d10594d08b60"
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
1
],
"triggerAtHour": 8
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-576,
0
],
"id": "f17dab8e-d98a-415c-af33-62357179fc28",
"name": "KBL",
"executeOnce": false
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
3
],
"triggerAtHour": 14
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-576,
224
],
"id": "0e79c432-d2bc-44b6-a954-e832c4fb1e19",
"name": "Techno",
"executeOnce": false
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
4
],
"triggerAtHour": 8
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-576,
672
],
"id": "37eca6f9-a6b1-4c52-bb58-3bb69f40d667",
"name": "ML",
"executeOnce": false
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
6
],
"triggerAtHour": 14
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-576,
1120
],
"id": "d6029d72-2d53-4b3f-bf33-622501eb0af1",
"name": "IoT",
"executeOnce": false
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
1
],
"triggerAtHour": 14
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-576,
448
],
"id": "35685a23-7939-40ba-8b80-de143354df6a",
"name": "Infra",
"executeOnce": false
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
4
],
"triggerAtHour": 10,
"triggerAtMinute": 45
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-576,
896
],
"id": "d0a116d6-2af8-4ea5-9305-0a44a9f2ae00",
"name": "HPC",
"executeOnce": false
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
3
],
"triggerAtHour": 10,
"triggerAtMinute": 45
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-736,
448
],
"id": "feb75a0a-03be-4e83-b76c-a5d076125135",
"name": "sim jaringan",
"executeOnce": false
}
],
"connections": {
"Code2": {
"main": [
[
{
"node": "Discord2",
"type": "main",
"index": 0
}
]
]
},
"Absen": {
"main": [
[
{
"node": "Code2",
"type": "main",
"index": 0
}
]
]
},
"When Executed by Another Workflow": {
"main": [
[
{
"node": "Absen",
"type": "main",
"index": 0
}
]
]
},
"Wait": {
"main": [
[
{
"node": "Absen",
"type": "main",
"index": 0
}
]
]
},
"Webhook": {
"main": [
[
{
"node": "Absen",
"type": "main",
"index": 0
}
]
]
},
"KBL": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Techno": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"ML": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"IoT": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"HPC": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Infra": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"sim jaringan": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
}
},
"authors": "Muhammad Bintang Panji Kusuma",
"name": "Version 6fe95b1f",
"description": "",
"autosaved": true
},
"tags": []
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
discordWebhookApisshPassword
About this workflow
Absen Otomatis. Uses discord, ssh, executeWorkflowTrigger, scheduleTrigger. Event-driven trigger; 13 nodes.
Source: https://github.com/SamVivan1/n8n-Workflows-Backup/blob/main/absen-otomatis-zpMyf8QD3ofG6AND.json — original creator credit. Request a take-down →