Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Node.js

Membangun Slack Bot Menggunakan Node.js

by
Read Time:14 minsLanguages:

Indonesian (Bahasa Indonesia) translation by Imam Firmansyah (you can also view the original English article)

Slack dengan cepat menjadi standar industri baru bagi tim untuk berkomunikasi. Sebenarnya, sangat populer sehingga ketika saya mengetik slack ke Google, seperti yang saya harapkan, hasil pertama adalah definisi kata dari kamus. Kemudian diikuti oleh situs Slack!

Ini merupakan hal yang hampir tidak pernah terjadi untuk kata-kata yang paling umum dalam kamus bahasa Inggris. Biasanya, definisi Google diikuti oleh beberapa link ke situs-situs kamus ternama.

Apa itu Slack?

Yang paling mendasar, Slack adalah sistem pesan. Ini memungkinkan pesan langsung ke anggota tim dan pembuatan channel (pribadi atau publik) yang memungkinkan komunikasi dan kolaborasi tim real-time yang mudah.  Untuk informasi lebih lanjut tentang Slack, Anda dapat melihat Fitur Slack.

Pada titik ini, Anda mungkin bertanya-tanya di mana Node.js masuk. Seperti yang saya sebutkan, yang paling mendasar, Slack adalah sistem pesan; Namun, bisa diperpanjang dan disesuaikan secara tak terbatas. Slack menyediakan sistem yang sangat fleksibel untuk menyesuaikan integrasi tim Anda, termasuk:

  • membuat pesan selamat datang khusus
  • membuat emojis kustom
  • memasang aplikasi pihak ketiga
  • membuat aplikasi Anda sendiri
  • membuat kustom Slack Bot 

Pada artikel ini, saya akan menunjukkan cara membuat Bot Slack dengan Node.js yang dapat ditambahkan ke konfigurasi Slack tim Anda.

Bot Slack Terdefinisi

Tugas Slack Bot adalah menerima event yang dikirim dari Slack dan menanganinya. Ada sejumlah besar peristiwa yang akan dikirim ke Bot Anda, dan di sinilah Node.js akan masuk.  Kita harus memutuskan tidak hanya kejadian mana yang harus ditangani, tapi bagaimana menangani setiap kejadian individual.

Misalnya, beberapa kejadian umum yang ditangani Bot adalah:

  • member_joined_channel
  • member_left_channel
  • message

Pada artikel ini, saya akan membuat aplikasi Node.js dan Bot Slack yang dapat ditambahkan ke proyek tim Anda untuk melakukan tindakan spesifik berdasarkan peristiwa yang diterimanya.

Untuk memulai, saya perlu membuat Bot di Slack. Dua jenis bot bisa dibuat:

  • bot khusus
  • membuat aplikasi dan menambahkan pengguna bot

Artikel ini akan membuat bot khusus karena pengguna bot aplikasi akan lebih tepat jika Anda berencana menulis dan menerbitkan aplikasi di Slack. Mengingat bahwa saya ingin bot ini menjadi pribadi ke tim saya, bot khusus akan cukup.

Membuat Bot Slack Khusus

Bot khusus dapat dibuat di sini: https://my.slack.com/apps/A0F7YS25R-bots. Jika Anda sudah masuk ke akun Slack Anda, di sebelah kiri pilih tombol Add Configuration; Jika tidak, masuk ke akun Slack Anda sebelum melanjutkan. Jika Anda tidak memiliki akun Slack, Anda dapat masuk secara gratis.

Ini akan membawa Anda ke halaman baru yang mengharuskan Anda memberikan username untuk bot Anda. Masukkan nama pengguna Anda sekarang, pastikan Anda mengikuti panduan penamaan Slack. Setelah Anda memilih nama bot yang bagus, tekan Add bot configuration.

Setelah berhasil membuat bot, Slack mengalihkan Anda ke halaman yang memungkinkan penyesuaian lebih lanjut bot Anda. Saya akan meninggalkan bagian itu untuk diri kreatif Anda. Satu-satunya yang dibutuhkan dari halaman ini adalah Token API yang dimulai dengan xoxb-. Saya akan menyalin token ini ke tempat yang aman untuk digunakan nanti atau hanya membiarkan halaman ini terbuka sampai kami memerlukan token untuk aplikasi Node.js.

Konfigurasi

Sebelum beralih ke kode, dua konfigurasi Slack lagi diperlukan:

  1. Buat atau pilih channel yang ada yang akan berinteraksi dengan bot Anda. Sementara saya menguji bot baru saya, saya memilih untuk membuat channel baru. Pastikan untuk mengingat nama channel karena Anda memerlukannya dalam aplikasi Anda segera.
  2. Tambahkan / Undang bot Anda ke channel sehingga bisa berinteraksi dengannya.

Sekarang setelah Bot Slack saya dikonfigurasi, saatnya untuk beralih ke aplikasi Node.js. Jika Anda sudah menginstal Node.js, Anda dapat melanjutkan ke langkah berikutnya.  Jika Anda tidak menginstal Node.js, sebaiknya mulai dengan mengunjungi halaman Node.js Download dan memilih installer untuk sistem anda.

Untuk Bot Slack saya, saya akan membuat aplikasi Node.js baru dengan menjalankan proses npm init. Dengan command prompt yang diatur ke tempat aplikasi Anda ingin diinstal, Anda dapat menjalankan perintah berikut:

Jika Anda tidak terbiasa dengan npm init, ini akan meluncurkan sebuah utilitas untuk membantu Anda mengkonfigurasi proyek baru Anda. Hal pertama yang ditanyakan adalah namanya. Ini default saya untuk slackbot, yang saya merasa nyaman dengan. Jika Anda ingin mengubah nama aplikasi Anda, sekarang adalah kesempatan; Jika tidak, tekan Enter untuk melanjutkan ke langkah konfigurasi berikutnya.  Pilihan selanjutnya adalah versi dan deskripsi. Saya telah meninggalkan keduanya sebagai default dan hanya dilanjutkan dengan menekan Enter untuk kedua opsi ini.

Entry Point

Hal berikutnya yang diminta adalah entry point. Ini defaultnya ke index.js; Namun, banyak orang suka menggunakan app.js. Saya tidak ingin memasuki perdebatan ini, dan mengingat aplikasi saya tidak memerlukan struktur proyek yang intensif, saya akan meninggalkan saya sebagai default index.js.

Setelah Anda pulih dari perdebatan yang mungkin sekuat tab vs. spasi, konfigurasi berlanjut, mengajukan beberapa pertanyaan lagi:

  • perintah uji
  • repositori git 
  • kata kunci
  • penulis
  • lisensi

Untuk keperluan artikel ini, saya telah meninggalkan semua opsi sebagai defaultnya. Akhirnya, setelah semua opsi dikonfigurasi, konfirmasi file package.json ditampilkan sebelum membuatnya. Tekan Enter untuk menyelesaikan konfigurasi.

Memasukkan SDK

Untuk membuat interaksi dengan Slack lebih mudah, saya juga akan menginstal paket Slack Developer Kit sebagai berikut:

Apakah Anda akhirnya siap untuk beberapa kode? Saya yakin Untuk memulai, saya akan menggunakan contoh kode dari situs web Slack Developer Kit yang mengeposkan pesan Slack menggunakan Real-Time Messaging API (RTM) dengan beberapa tweak.

Mengingat titik masuk yang saya pilih adalah index.js, saatnya membuat file ini. Contoh dari situs Slack Developer Kit adalah sekitar 20 baris kode. Saya akan memecahnya beberapa baris pada satu waktu, hanya untuk memungkinkan penjelasan tentang apa yang dilakukan garis-garis ini. Tapi perlu diketahui bahwa semua baris ini harus disertakan dalam file index.js Anda.

Kode dimulai dengan memasukkan dua modul dari Slack Developer Kit:

RtmClient, setelah instantiated, akan menjadi objek bot kami yang mereferensikan API RTM. CLIENT_EVENTS adalah kejadian yang akan didengarkan bot.

Setelah modul ini disertakan, saatnya untuk memberi instantiate dan memulai bot:

Pastikan untuk mengganti Token API yang dikaburkan di atas dengan token yang Anda dapatkan saat pembuatan Slack Bot.

Memanggil fungsi start pada RtmClient akan menginisialisasi sesi bot. Ini akan mencoba untuk mengautentikasi bot saya.  Saat bot berhasil terhubung ke Slack, event akan dikirim agar aplikasi saya dapat dilanjutkan. Peristiwa ini akan ditampilkan sebentar lagi.

Dengan variabel yang diinisiasi klien, variabel channel dibuat untuk dihuni sesaat di dalam salah satu event CLIENT_EVENTS.

Variabel channel akan digunakan untuk melakukan tindakan tertentu, seperti mengirim pesan ke channel yang terhubung dengan bot.

Saat sesi RTM dimulai ( rtm.start(); ) dan berikan Token API yang valid untuk bot, sebuah pesan RTM.AUTHENTICATED akan dikirim. Beberapa baris berikutnya mendengarkan event ini:

Saat event RTM.AUTHENTICATED diterima, kode sebelumnya melakukan perulangan for untuk melalui daftar channel tim Slack. Dalam kasus saya, saya secara khusus mencari jamiestestchannel dan memastikan bot saya adalah anggota channel itu. Bila kondisi itu terpenuhi, ID channel akan disimpan dalam variabel channel.

Debugging

Untuk membantu debugging, pesan konsol dicatat yang menampilkan pesan yang menunjukkan bahwa bot telah berhasil diautentikasi dengan menampilkan namanya ( ${rtmStartData.self.name} ) dan nama tim ( ${rtmStartData.team.name} ) miliknya.

Setelah bot mengautentikasi, event lain dipicu (RTM.RTM_CONNECTION_OPENED) yang menandakan bot terhubung sepenuhnya dan dapat mulai berinteraksi dengan Slack. Baris kode berikutnya membuat event listener; Setelah berhasil, pesan Hello! dikirim ke channel (dalam kasus saya, jamiestestchannel).

Pada titik ini, sekarang saya dapat menjalankan aplikasi Node saya dan melihat bot saya secara otomatis mengirim pesan baru ke channel saya:

Hasil menjalankan perintah ini (bila berhasil) ada dua:

  1. Saya menerima pesan debug saya yang menunjukkan bahwa bot saya telah berhasil masuk. Ini berasal dari kode RTM.AUTHENTICATED yang dipicu setelah memulai Klien RTM.
  2. Saya menerima pesan Halo! di channel Slack saya. Ini terjadi saat pesan event RTM.RTM_CONNECTION_OPENED diterima dan ditangani oleh aplikasi.

Sebelum melanjutkan dan terus meningkatkan aplikasi saya, sekarang adalah saat yang tepat untuk rekap apa yang telah saya lakukan sejauh ini:

  1. Membuat Bot Slack kustom.
  2. Membuat channel Slack kustom dan undang bot saya ke sana.
  3. Membuat aplikasi Node.js baru yang disebut slackbot.
  4. Memasang Paket Slack Developer Kit ke aplikasi saya.
  5. Membuat file index.js yang menciptakan RtmClient menggunakan Token API dari bot khusus saya.
  6. Buat event listener untuk RTM.AUTHENTICATED yang menemukan Slack Channel bot saya adalah anggota dari.
  7. Buat event listener untuk RTM.RTM_CONNECTION_OPENED yang mengirim pesan Halo! ke Slack Channel saya.
  8. Metode RTM Start Session untuk memulai proses otentikasi yang ditangani oleh event listener saya.

Membangun Bot

Sekarang saatnya untuk bersenang-senang sejati dimulai. Penawaran Slack (saya tidak menghitung) setidaknya 50 event berbeda yang tersedia untuk bot khusus saya untuk didengarkan dan opsional menangani.  Seperti yang dapat Anda lihat dari daftar Event Slack, beberapa event sesuai dengan API RTM (yang kami gunakan), sementara event lainnya sesuai dengan Events API. Pada saat penulisan artikel ini, pemahaman saya bahwa SDK Node.js hanya mendukung RTM.

Untuk menyelesaikan bot ini, saya akan menangani event message; Tentu saja, ini mungkin salah satu peristiwa paling rumit karena mendukung sejumlah besar sub-tipe yang akan saya jelajahi sebentar lagi.

Berikut adalah contoh dari apa yang paling mendasar tentang event message seperti dari Slack:

Dalam objek dasar ini, tiga hal terpenting yang saya tekankan adalah:

  1. channel. Saya ingin memastikan bahwa pesan ini berasal dari channel bot adalah bagian dari.
  2. user. Ini akan memungkinkan saya untuk berinteraksi langsung dengan pengguna atau melakukan tindakan spesifik berdasarkan pengguna itu.
  3. text. Ini mungkin bagian yang paling penting karena berisi isi pesan. Bot hanya ingin menanggapi jenis pesan tertentu.

Beberapa pesan lebih rumit. Mereka dapat berisi banyak sub-properti seperti:

  • edited: Child Objek yang menjelaskan pengguna mana yang mengedit pesan dan kapan hal itu terjadi.
  • subtype: String yang mendefinisikan salah satu dari banyak jenis yang berbeda, seperti channel_join, channel_leave, dll
  • is_starred: boolean yang menunjukkan apakah pesan ini telah dibintangi.
  • pinned_to: Sebuah array dari channel dimana pesan ini telah disematkan.
  • reaction: Sebuah array objek reaksi yang menentukan reaksi apa (misalnya facepalm), berapa kali kejadiannya, dan serangkaian pengguna yang bereaksi cara ini untuk pesan

Saya akan memperpanjang kode index.js saya yang sebelumnya dibuat untuk mendengarkan event message. Untuk mengurangi redundansi kode, contoh berikut hanya berisi bagian kode yang terkait dengan perangkat tambahan message.

Hal pertama yang harus dilakukan adalah menyertakan modul baru untuk RTM_EVENTS yang akan saya dengarkan. Saya telah menempatkan ini di bawah dua modul saya sebelumnya termasuk:

Kode untuk menangani event message yang akan saya tempatkan di bagian bawah file saya. Untuk menguji bahwa event message berfungsi dengan benar, saya telah membuat event listener baru yang mencatat objek message ke konsol sebagai berikut:

Sekarang saya dapat menjalankan ulang aplikasi Node saya ( node index.js ). Saat saya mengetikkan pesan ke channel saya, berikut ini yang dicatat ke konsol saya:

Sejauh ini, sudah bagus. Bot saya berhasil menerima pesan. Langkah tambahan berikutnya yang harus dilakukan adalah memastikan pesan milik channel bot saya:

Sekarang ketika saya menjalankan aplikasi saya, saya hanya melihat pesan debug saya jika event message adalah untuk channel bahwa bot adalah bagian dari itu.

Saya sekarang akan memperpanjang aplikasi untuk mengirim pesan khusus ke channel yang menunjukkan bagaimana pengguna dapat ditandai dalam sebuah pesan:

Sekarang, ketika ada yang mengetikkan pesan di channel, bot saya mengirimkan pesannya sendiri yang terlihat seperti: "Berhenti, semua orang mendengarkan, @endyourif memiliki sesuatu yang penting untuk dikatakan!"

Ok, tidak terlalu berguna. Sebagai gantinya, saya akan menyelesaikan bot saya dengan meningkatkan pembawa event message untuk merespons perintah tertentu. Ini akan dilakukan dengan melakukan hal berikut:

  1. Pisahkan bagian text dari message ke dalam array berdasarkan ruang kosong.
  2. Periksa apakah indeks pertama sesuai dengan username pengguna bot.
  3. Jika ya, saya akan melihat indeks kedua (jika ada) dan memperlakukannya sebagai perintah yang seharusnya bot saya lakukan.

Agar mudah mendeteksi jika bot disebutkan, saya perlu membuat variabel baru yang akan menyimpan ID pengguna bot.  Di bawah ini adalah bagian kode yang diperbarui yang sebelumnya saya set variabel channel. Sekarang juga menyimpan ID pengguna bot saya dalam variabel yang disebut bot.

Dengan set variabel bot, saya telah menyelesaikan bot dengan memalsukan event listener message sebelumnya sebagai berikut:

Kode berikut membagi properti text dari objek message dalam sebuah array berdasarkan sebuah spasi. Saya selanjutnya memastikan bahwa saya memiliki setidaknya dua elemen dalam array, idealnya bot saya dan perintah untuk melakukan.

Ketika elemen pertama dalam array cocok dengan bot saya, saya melakukan perintah switch pada elemen kedua dalam array: perintahnya. Perintah saat ini yang didukung adalah jump dan help. Saat pesan dikirim ke channel yang terlihat seperti "@jamiestest jump", bot saya akan merespons dengan pesan khusus kepada pengguna yang berasal.

Jika perintah tidak dikenali, maka akan jatuh ke dalam pernyataan kasus default saya untuk switch dan menanggapi dengan perintah generik yang akan terlihat seperti ini: "@endyourif, sorry Saya tidak mengerti perintah "hi" Untuk daftar perintah yang didukung, ketik: @jamiestest help ".

Kesimpulan

Pada titik ini, bot saya selesai! Jika Anda tertarik untuk lebih meningkatkan bot Anda, inilah daftar ide:

  • Menangani anggota tim baru yang bergabung dengan mendengarkan event team_join. Saat anggota tim baru bergabung, akan menjadi ide bagus untuk mengirimkan berbagai informasi dan / atau dokumentasi onboarding kepada tim Anda.
  • Tingkatkan daftar perintah yang didukung yang telah saya mulai.
  • Buat perintah interaktif dengan mencari database, Google, YouTube, dll.
  • Buat pengguna bot pada aplikasi dan buat kebiasaan Anda sendiri slash commands.
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.