Teknologi

Mengenal Slack Events API: Subskripsi dan Penanganan Event untuk Bot yang Responsif

Ringkasan

  • Artikel ini membahas cara kerja Slack Events API, mulai dari pengaturan subskripsi event, verifikasi URL, penanganan signature, hingga trik menghindari duplikasi event karena batas waktu 3 detik.
  • Sangat relevan bagi pengembang yang membangun integrasi Slack.

Slack Events API adalah salah satu fitur utama platform Slack yang memungkinkan aplikasi Anda bereaksi secara real-time terhadap aktivitas di workspace tanpa perlu melakukan polling. Berbeda dengan slash command yang dipicu ketika pengguna mengetik sesuatu atau shortcut yang dipicu saat pengguna mengklik, Events API bekerja sebaliknya: Slack secara otomatis mengirimkan HTTP POST ke URL yang Anda miliki setiap kali aktivitas yang Anda subskripsi terjadi. Misalnya, seseorang menyebut bot Anda, sebuah pesan masuk ke kanal yang diawasi, atau anggota baru bergabung—Slack akan mengirimkan event tersebut langsung ke server Anda.

Konsep ini menjadi fondasi bagi banyak bot DevOps yang dibangun untuk tim engineering besar. Namun, berdasarkan pengalaman tim pengembang, bagian tersulit bukanlah menulis handler event itu sendiri, melainkan mengurus bagian plumbing seperti acknowledgment, retry, dan deduplication. Di sinilah banyak tim mengalami masalah. Memahami mekanisme dasar Events API menjadi kunci untuk membangun integrasi yang stabil dan skala besar.

Langkah pertama untuk mengaktifkan Event Subscriptions adalah melalui halaman konfigurasi aplikasi di api.slack.com/apps. Anda perlu memilih aplikasi, buka menu Event Subscriptions, aktifkan toggle, lalu masukkan URL endpoint yang akan menerima event dari Slack. Slack akan langsung memvalidasi URL tersebut dengan mengirimkan satu POST berisi payload url_verification. Endpoint Anda harus merespon dalam waktu 3 detik dengan mengembalikan nilai challenge yang sama persis. Handshake ini hanya terjadi sekali saat pengaturan awal, bukan pada setiap event, jadi perlakukan sebagai kasus khusus di handler utama.

Pada implementasi dengan Express.js, ada dua hal penting yang perlu diperhatikan: parsing body mentah (raw body) untuk verifikasi signature Slack, dan menjawab tantangan verifikasi terlebih dahulu. Signature verification dilakukan dengan HMAC SHA256 menggunakan signing secret dan timestamp, plus jendela 5 menit untuk mencegah replay attack. Penggunaan timingSafeEqual sangat dianjurkan untuk perbandingan signature. Kesalahan umum adalah body parser tidak dikenakan pada route tertentu sehingga req.body menjadi undefined dan verifikasi gagal—pastikan middleware JSON diterapkan pada route events dengan benar.

Setelah verifikasi URL berhasil, Anda dapat menambahkan event yang ingin disubskripsi di bagian Subscribe to bot events. Contoh event yang umum digunakan termasuk app_mention (saat bot disebut), message.channels (pesan di kanal publik), team_join (anggota baru), dan member_joined_channel (anggota masuk kanal). Setiap event menarik scope yang diperlukan seperti app_mentions:read atau channels:history. Jangan lupa menyimpan perubahan dan menginstal ulang aplikasi karena scope baru tidak berlaku sampai workspace memberikan otorisasi ulang. Ini adalah penyebab paling umum event tidak kunjung tiba.

Ada dua kategori event: bot events dan user events. Bot events memakai token xoxb- dan bot harus diundang ke kanal untuk melihat aktivitas di sana. User events seperti message.im memakai token xoxp- yang terikat dengan pengguna yang menginstal aplikasi. Untuk menjaga keandalan jangka panjang, tim pengembang biasanya hanya menggunakan bot events karena token user bisa mati jika orang tersebut keluar dari tim. Konsekuensinya, bot harus diundang ke setiap kanal yang ingin dipantau—dan ini bisa menjadi pekerjaan besar jika kanal berjumlah ratusan. Untungnya, proses itu bisa diotomatisasi menggunakan API conversations.list dan conversations.invite.

Salah satu pelajaran paling penting adalah batas waktu 3 detik. Slack memberi waktu 3 detik untuk mengembalikan respons HTTP 200. Jika melampaui batas, Slack akan melakukan retry hingga tiga kali, sehingga satu event bisa dikirimkan total empat kali. Jika handler menjalankan pekerjaan berat—misalnya memanggil API deploy, menulis ke database, atau memposting pesan—sebelum mengembalikan status 200, maka Anda berpotensi mendapatkan duplikasi aksi. Contoh nyata: sebuah deploy dipicu dua kali karena handler lambat.

Solusinya adalah mengakui (acknowledge) event secepat mungkin setelah signature terverifikasi. Dengan kata lain, langsung kirim res.status(200).send('') lalu pindahkan pekerjaan berat ke antrian (queue) asinkron. Pendekatan ini menjaga aplikasi Anda tetap responsif dan mencegah Slack melakukan retry karena timeout. Pola enqueueEvent seperti pada kode contoh memisahkan penerimaan event dari pemrosesan, sehingga event diterima dengan cepat dan diproses secara andal di latar belakang.

Bagi pengembang di Indonesia yang membangun integrasi Slack untuk tim atau perusahaan, pemahaman tentang Events API dan jebakan teknis di sekitarnya sangat krusial. Dengan semakin populernya Slack sebagai alat kolaborasi, kemampuan membangun notifikasi dan alur kerja otomatis berbasis event menjadi kebutuhan yang meningkat. Mengingat rawan terjadinya duplikasi atau downtime akibat kesalahan penanganan, mempelajari praktik terbaik dari pengalaman orang lain dapat menghemat waktu dan menjaga reputasi layanan. Artikel ini diadaptasi dari pengalaman tim pengembang yang membangun bot DevOps skala besar, memberikan gambaran nyata tentang tantangan dan solusi yang telah teruji.

Mengapa Ini Penting

Pemahaman tentang Slack Events API sangat penting bagi para pengembang di Indonesia yang membangun integrasi otomatis dalam tim yang menggunakan Slack. Dengan mengetahui cara penanganan event yang benar, tim dapat menghindari masalah seperti duplikasi aksi atau kegagalan layanan akibat timeout. Di era kerja jarak jauh, kemampuan mengelola notifikasi dan event secara real-time menjadi kunci produktivitas. Artikel ini memberikan wawasan praktis yang bisa langsung diterapkan untuk menghindari kesalahan umum.

Sumber Asli
DEV Community
Tanggal
12 Juli 2026
Waktu Baca
5 menit