Setiap kali notulen selesai diproses, ringkasan dan action item-nya masuk ke channel Slack yang Anda tentukan. Tidak ada yang perlu diingat, tidak ada yang perlu disalin.
#Kapan resep ini masuk akal
Resep ini masuk akal kalau tim Anda memang membaca Slack, dan rapatnya cukup sering sehingga menyalin ringkasan manual terasa membebani. Untuk tim yang rapat sekali seminggu, membuka dashboard mungkin sama cepatnya. Yang benar-benar berubah adalah pada tim dengan lima sampai sepuluh rapat sehari: di titik itu, ringkasan yang datang sendiri berarti orang yang tidak hadir tetap tahu apa yang diputuskan tanpa harus bertanya.
#Yang dihasilkan
Satu pesan Slack per rapat, berisi judul, ringkasan, dan daftar action item.
#Yang Anda butuhkan
- n8n self-hosted dengan community node
n8n-nodes-sehariterpasang notulen:readwebhooks:write- Kredensial Slack di n8n
Kalau belum memasang node-nya, ikuti panduan n8n lebih dulu — pemasangannya satu langkah dari menu Settings.
#Alur workflow
- Se-Hari Trigger (
Se-Hari: seHariTrigger) - Ambil Notulen Lengkap (
Se-Hari: seHari) - Kirim ke Slack (
noOp)
#Cara memakainya
- Salin JSON di bawah
- Di n8n: Workflows → Import from Clipboard, lalu tempel
- Pilih kredensial Se-Hari API pada setiap node Se-Hari
- Sesuaikan node tujuan (lihat catatan di bawah)
- Aktifkan workflow
Kalau workflow ini memakai node trigger, endpoint webhook-nya didaftarkan otomatis saat diaktifkan dan dihapus saat dinonaktifkan. Tidak ada URL yang perlu disalin manual.
#Yang perlu disesuaikan
Ganti node terakhir dengan node Slack milik Anda. Isi field Text dengan ekspresi {{ $json.summary }}, dan gunakan {{ $json.action_items.map(i => "• " + i.title).join("\n") }} untuk daftar tugasnya. Kalau ringkasan rapat panjang, Slack memotong pesan di sekitar 4.000 karakter — pertimbangkan mengirimkannya sebagai lampiran atau thread.
#Sebelum dijalankan di produksi
Impor dulu ke workflow terpisah dan jalankan sekali secara manual. n8n menyimpan hasil setiap node pada eksekusi terakhir, jadi Anda bisa melihat bentuk data yang sebenarnya keluar dari node Se-Hari sebelum menulis ekspresi apa pun di node berikutnya. Menebak bentuk data lalu memperbaikinya lewat percobaan berulang jauh lebih lambat, dan pada resep yang memakai kredit, percobaan berulang itu ada harganya.
Perhatikan juga penagihan kredit resep ini. Operasi yang membuat meeting memotong kredit saat itu juga, sedangkan operasi notulen menagih setelah pemrosesan selesai sesuai durasi asli rekaman. Kalau workflow Anda membaca saldo tepat setelah mengantre notulen, angkanya belum berubah — itu bukan bug. Pasang batas kredit harian pada API key yang dipakai workflow ini supaya kesalahan sekali tidak berubah menjadi tagihan besar.
#Kalau tidak berjalan seperti seharusnya
Kalau pesan tidak pernah muncul padahal notulen jelas selesai, periksa tab Webhooks di dashboard developer. Riwayat pengiriman di sana menampilkan kode respons dari n8n Anda; 404 berarti workflow tidak aktif, dan timeout berarti instance n8n Anda tidak bisa dijangkau dari internet.
Untuk masalah yang lebih umum, tab Webhooks di dashboard developer memuat riwayat pengiriman lengkap dengan kode respons dari instance n8n Anda — tempat pertama yang harus dilihat ketika trigger tidak pernah berjalan.
#Variasi yang sering diminta
- Kirim ke channel berbeda berdasarkan kata kunci di judul rapat, dengan menyisipkan node Switch setelah trigger.
- Sertakan tautan berbagi notulen lewat operasi Bagikan Notulen, sehingga orang bisa membaca versi lengkapnya tanpa akun Se-Hari.
- Kirim hanya rapat yang durasinya di atas ambang tertentu — standup sepuluh menit jarang butuh ringkasan tertulis.
#Workflow JSON
{
"name": "Notulen ke Slack",
"nodes": [
{
"parameters": {
"content": "## Notulen ke Slack\n\nBerjalan otomatis setiap kali notulen selesai diproses.\n\n**Yang perlu Anda lakukan:**\n1. Pilih kredensial Se-Hari (scope: notulen:read, webhooks:write)\n2. Ganti node terakhir dengan tujuan Anda\n3. Aktifkan workflow — endpoint webhook didaftarkan otomatis\n\nPayload webhook membungkus entitasnya di bawah nama jenisnya, jadi ekspresinya\nlewat $json.note — BUKAN $json langsung:\n\n{{ $json.note.title }} — judul rapat\n{{ $json.note.summary }} — ringkasan\n{{ $json.note.action_items }} — array action item\n{{ $json.note.duration_minutes }} — durasi\n{{ $json.retryable }} — hanya pada note.failed, sejajar dengan note\n{{ $json._event.type }} — jenis event",
"width": 460,
"height": 260
},
"id": "note-1",
"name": "Catatan",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-40,
-40
]
},
{
"parameters": {
"events": [
"note.completed"
]
},
"id": "trg-notecompleted",
"name": "Se-Hari Trigger",
"type": "n8n-nodes-sehari.seHariTrigger",
"typeVersion": 1,
"position": [
0,
300
],
"credentials": {
"seHariApi": {
"id": "__SEHARI_CRED__",
"name": "Se-Hari API"
}
},
"webhookId": "__AUTO__"
},
{
"parameters": {
"resource": "notulen",
"operation": "get",
"noteId": "={{ $json.note.id }}",
"include": [
"summary",
"action_items"
]
},
"id": "sh-AmbilNotulenLengkap",
"name": "Ambil Notulen Lengkap",
"type": "n8n-nodes-sehari.seHari",
"typeVersion": 1,
"position": [
220,
300
],
"credentials": {
"seHariApi": {
"id": "__SEHARI_CRED__",
"name": "Se-Hari API"
}
}
},
{
"parameters": {},
"id": "dst-KirimkeSlack",
"name": "Kirim ke Slack",
"type": "n8n-nodes-base.noOp",
"typeVersion": 1,
"position": [
440,
300
],
"notes": "Ganti dengan node Slack → Send Message. Isi Text dengan:\n*{{ $json.title }}*\n{{ $json.summary }}",
"notesInFlow": true
}
],
"connections": {
"Se-Hari Trigger": {
"main": [
[
{
"node": "Ambil Notulen Lengkap",
"type": "main",
"index": 0
}
]
]
},
"Ambil Notulen Lengkap": {
"main": [
[
{
"node": "Kirim ke Slack",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1"
},
"pinData": {},
"meta": {
"templateCredsSetupCompleted": false
},
"tags": [
{
"name": "Se-Hari"
}
]
}#Resep lain
- Semua resep n8n
- Panduan n8n — pemasangan node dan kredensial
- Webhook — cara kerja trigger di baliknya