Build simple Slack bot with Python and Flask
Hi mọi người, đây là tech blog đầu tiên của mình!
Nội dung blog này sẽ đi qua các bước tạo 1 Slack app đơn giản sử dụng Python và framework Flask.
1. Tạo Slack app
- Chắc hẳn mọi người đã quen thuộc với Slack, một nền tảng phổ biến phục vụ cho việc nhắn tin, trao đổi, chia sẻ tài liệu… đến các thành viên trong nhóm nhanh chóng và thuận tiện nhất. Bên cạnh đó, Slack cho phép chúng ta tạo các Slack app riêng cho mình với những tính năng thú vị thông qua Slack API.
- Chúng ta sẽ tạo Slack app của riêng mình ở đây (https://api.slack.com/apps). App của mình có tên là ReminderBot.
- Nhập tên, các thông tin cơ bản của 1 Slack app, bla bla... Vậy là ta đã có được 1 con Slack app cho riêng mình. Dashboard của app sẽ trông như thế này:
2. Dựng Flask app
Tiếp theo chúng ta sẽ dựng 1 con app server để tương tác cũng như define những tính năng cụ thể theo ý muốn. Bản thân Slack cung cấp cho chúng ta các SDK với Python, NodeJS, Java hoặc framework Bolt để tương tác với Slack API.
Ở đây mình dùng Python SDK, Flask và package slackeventsapi:
- Flask: một framework của Python, đơn giản và dễ sử dụng.
- slackeventapi: 1 python package hỗ trợ tốt cho việc handle Slack Events API.
a./ Tạo Flask app
-
Đầu tiên mình sẽ setup môi trường, install các package cần thiết:
- Tạo virtualenv:
python3 -m venv evn
->source env/bin/activate
- Tạo file
requirements.txt
chứa các package cần thiết:
Flask==1.1.4 slack-sdk==3.21.3 slackeventsapi==3.0.1
- Install file
requirements.txt
:pip install -r requirements.txt
- Tạo virtualenv:
-
Tạo Flask app, các bạn có thể follow theo doc này https://flask.palletsprojects.com/en/2.3.x/).
-
Default Flask app sẽ run trên port 5000.
b./ Run ngrok
- Mình sử dụng ngrok để tạo webhook url với port 5000 của Flask
- Run lệnh này nhé:
ngrok http 5000
c./ Config Slack webhook
- Như vậy là mình đã có url webhook để add vào Slack API
- Ở đây mình define endpoint là
slack/events
để nhận và handle các event từ Slack gửi về tương ứng
d./ Kết nối với Slack API và xử lí các sự kiện trả về
- Chúng ta kết nối với Slack API thông qua SLACK_BOT_TOKEN và SLACK_SIGNING_TOKEN được get từ tag
Basic Information
ở Dashboard của mỗi account.
- Slack hỗ trợ chúng ta 1 list các sự kiện có thể handle, các bạn có thể check ở đây https://api.slack.com/events. Ở đây mình sẽ bắt sự kiện
message.channels
từ Slack gửi đến, sự kiện này được trigger mỗi khi có message được gửi đến 1 channel cụ thể trong workspace của chúng ta và mình sẽ trả về 1 message mới có nội dungThere's a new message
vào channel tương ứng. Mình có thể custom response message với ChatGPT API hoặc xử lí data với những mục đích khác nhau ở đây.
3. Các tính năng khác
a./ Interactive component
- Đây là UI element support bởi Slack, interact với app qua actions, input trong các message hoặc modal.
- Các bạn có thể tự tạo và custom message cho mình với các action tương ứng. Tham khảo ở đây.
b. Automation reminder
- Để tạo tính năng automation task như gửi todo list, message lặp lại hàng tuần để nhắc nhở về 1 công việc cụ thể, chúng ta có thể tích hợp sử dụng Celery (https://docs.celeryq.dev/en/stable/getting-started/introduction.html). Celery là 1 thư viện của Python hỗ trợ việc automate task một cách không đồng bộ rất hiệu quả. Các bạn có thể tự setup cho riêng mình 1 con cron job để post message định kì hoặc phục vụ cho việc nhắc nhở hàng ngày/tuần/...
- Ngoài ra, chúng ta có thể áp dụng các thư viện Python cũng như của ngôn ngữ khác để support việc automate task nhé.
4. Tích hợp ChatGPT API vào Flask
- Ngoài việc handle các message cơ bản đã được define từ trước. Tích hợp ChatGPT API để trả lời các câu hỏi general, ngoài phạm vi cover của Slack app cũng như tăng tính linh hoạt cho Slack app của bạn. Thư viện mình sử dụng có tên là
openai
nhé (https://pypi.org/project/openai/)
- Ở trên là ví dụ về việc tích hợp ChatGPT API cho việc tiếp nhận và reply các message được gửi đến channel trong workspace của bạn.
5. Kết thúc
-
Như vậy mình đã giới thiệu với các bạn về những gì 1 Slack app có thể làm một vài tính năng có thể tích hợp với nó. Hy vọng các bạn có thể áp dụng và tạo ra những con bot lợi hại cho riêng mình nhé.
-
Nếu trong bài viết có chỗ nào chưa đúng thì mình mong mọi người có thể góp ý.
Cảm ơn mọi người đã đọc bài viết của mình.
All rights reserved