Membuat Bot Slack dengan FastAPI Python Part 1 — Incoming Webhooks
Halo semua, Kiddy disini dan pada kesempatan kali ini saya ingin berbagi insight mengenai cara membuat Bot di Slack. Bukan bot telegram, bukan fesbuk, bukan twitter, bukan whatsapp, ataupun instagram, tetapi Slack!
Mungkin banyak yang belum tahu apa itu Slack, terutama bagi perusahaan yang bekerja di kelas enterprise. Umumnya, para perusahaan cenderung memilih platform lain seperti Skype, Microsoft Teams, atau bahkan Discord.
Slack adalah sebuah platform komunikasi tim yang memungkinkan kita berkomunikasi dengan tim secara online. Sebenernya konsepnya hampir sama saja seperti Whatsapp, atau Telegram. Platform ini memiliki banyak kelebihan daripada messenger pada umumnya, ya soalnya tujuannya aja udah beda, slack dikhususkan untuk tim, sedangkan Whatsapp untuk level perseorangan. Sayangnya banyak perusahaan yang malah menggunakan Whatsapp atau Telegram untuk level komunikasi tim. Bagi saya, ngga enak banget menyatukan platform komunikasi personal dengan pekerjaan, ngga semua orang bisa tegar menjaga emosi agar tidak stress terhadap pekerjaan, maka dari itu ada baiknya sih memisahkan platform komunikasi personal dan pekerjaan (opini pribadi).
Umumnya Slack lebih banyak digunakan oleh anggota tim Tech (anak IT) di sebuah startup low to middle (atau mungkin yang sudah besar macam Gojek?), karena mereka cenderung lebih luwes dan mau belajar menggunakan sebuah platform (Pengalaman pribadi), ketimbang divisi lain yang tetep kekeuh dengan Whatsapp atau Telegram. 😐
Okeh sekian curhatnya ya, kita lanjut dari sisi developer aja. Nah Slack ini juga menyediakan sebuah akun atau bot dimana kita sebagai engineer atau developer dapat membuat Bot kita sendiri untuk mempermudah kita dalam bekerja. Banyak hal yang bisa dilakukan oleh bot di Slack, contohnya:
- Mengirimkan pesan notifikasi.
- Mengirimkan pesan notifikasi dengan tombol aksi.
- Mengirimkan pesan notifikasi dengan opsi pilihan.
- Mengirimkan pesan notifikasi dengan sebuah datepicker.
Masih banyak lagi yang bisa dilakukan dengan bot slack. Lalu mungkin kamu berpikir, gimana caranya sebuah bot Slack dapat mempermudah pekerjaan kamu sebagai seorang engineer? Sebagai engineer yang kreatif, tugas kamu adalah membuat pekerjaan yang mudah, jadi semakin mudah, atau kasarnya kamu dapat melakukannya hanya dengan menekan sebuah tombol, yep sebuah tombol saja!
Studi Kasus
Perusahaan kamu adalah perusahaan retail barang, setiap harinya kamu memerlukan sebuah reporting dimana akan melaporkan jumlah barang yang perlu dilaporkan setiap harinya dimana pekerjaan tersebut dilaporkan setiap pergantian hari yaitu pukul 00.00.
Nah kamu mendapatkan challenge dari manajermu tentang bagaimana caranya ia mendapatkan laporan setiap pergantian hari dan dia dapat melihat laporan secara singkat, mudah, dan tidak ribet.
Tentu saja salah satu opsi terbaiknya adalah dengan membuat halaman reporting, namun kadang halaman tersebut sangatlah sucks dan bahkan manajer perlu beberapa action dalam melakukan hal tersebut. Bagaimana kita simplify saja? Setiap harinya ketika laporan dibuat, Bot akan mengirimkan ke channel khusus yang berisi para manajemen perusahaan dimana bot tersebut akan mengirimkan pesan terkait reporting basic dari perusahaan tsb seperti barang terjual, barang yang dikembalikan, keuntungan, serta status profit berapa persen lebih besar atau lebih kecil dari hari kemarin.
Kick Off
Pertama, pastikan kamu menggunakan Slack ya, karena kalau kamu menggunakan Discord, tutorial ini tidak ada gunanya 😢
Kedua, pergi ke https://api.slack.com/apps/ untuk membuat aplikasi kalian.
Ketiga, buat aplikasi kalian dan pilih workspace yang kalian inginkan.
Keempat, ada banyak fitur yang bisa diaktifkan, dari slash command, incoming webhooks, event subscriptions, hingga interactive components, hingga bots, semuanya tergantung kebutuhan kamu.
Pada tutorial ini, kita akan mulai dari hal yang sederhana terlebih dahulu, yaitu incoming webhooks.
Klik incoming webhooks dan klik button off menjadi on agar kita dapat menggunakannya.
Kita akan menambahkan webhook baru ke workspace, klik Add new webhook to Workspace, cari channel yang diinginkan, dan klik tombol Allow setelah berpindah halaman.
Nah kalau sudah berhasil nanti dia nongol nih.
Sekarang kita sudah mendapatkan webhook URL, kita bisa mencoba untuk melakukan cURL dari terminal kita.
Apabila sudah berhasil akan muncul seperti ini.
Keren banget kan? Itu baru via cURL, sekarang saatnya kita pukul via Python.
Nah daripada buat projek dari awal, menggunakan projek Python saya dari FastAPI aja yah yang bisa diclone dari URL berikut:
Perlu diperhatikan bahwa ini menggunakan FastAPI dan bukan Flask! Bagi yang belum terbiasa bisa baca artikel ini terlebih dahulu.
Kalau sudah clone, jangan lupa tiga step berikut, buat virtual env, aktifkan, install requirements:
- python3 -m venv venv (Linux)
- source venv/bin/activate (Linux)
- pip install -r requirements.txt (All Platform)
Sekarang kita install slack SDK python
pip install slack_sdk
Lalu, kita buat controller baru terlebih dahulu bernama SlackController.py, copy paste code disini ya~
from starlette.requests import Request
from starlette.responses import JSONResponse
from app import response
from slack_sdk.webhook import WebhookClient
class SlackController:
__instance = None
def __new__(cls):
if SlackController.__instance is None:
SlackController.__instance = object.__new__(cls)
SlackController.__instance.webhook_url = "GANTI DENGAN MILIKMU"
return SlackController.__instance
def send(self, request: Request) -> JSONResponse:
try:
message = request.query_params['message']
webhook = WebhookClient(self.webhook_url)
webhook = webhook.send(
text=message
)
return response.ok("", f"returning message: {message}")
except Exception as e:
return response.badRequest('', f'{e}')
Sekarang buat sebuah routes baru di folder routers beri nama slack.py dan paste code berikut:
from fastapi import APIRouter
from starlette.requests import Requestfrom app.controllers.SlackController import SlackControllerrouter = APIRouter()
controller = SlackController()@router.get("", tags=["users"])
async def action(request: Request):
return controller.send(request)
Sekarang masuk ke __init__.py di folder app dan tambahkan baris berikut:
app.include_router(slack.router, prefix="/slack", tags=["Slack Docs!"], )
Sekarang jalankan projeknya dengan command
uvicorn main:app --port 5000 --reload
Akses melalui postman:
Gampang banget kan? Dengan begini kamu bisa mengirimkan pesan apapun ke Slack Channel yang kamu inginkan melalui Webhook URL yang telah kamu simpan, perlu kamu ketahui antar Channel memiliki Webhook yang berbeda, jadi pastikan kamu menyimpan Webhook URL yang benar untuk mengirimkan ke channel yang kamu inginkan~
Untuk sekarang segini dulu yah, next saya akan membagikan membuat Bot URL menjadi lebih interaktif dengan tombol ataupun markdown~ Stay tune!
Jangan lupa untuk share blog ini apabila menurutmu blog ini bermanfaat untuk para developer lainnya. Happy Coding!