- vừa được xem lúc

Build Slack bot đơn giản bằng Flask

0 0 29

Người đăng: Quang Nguyen

Theo Viblo Asia

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
  • Tiếp theo chúng tạo 1 con 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 dung There'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

1. 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.

2. 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.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Xây dựng API đơn giản với Flask, demo với Ngrok

Lời mở đầu. Team mình đợt này đang triển khai chương trình mỗi tuần một bài học, nghĩa là mỗi tuần một người trong team sẽ lên seminar cho mọi người về 1 kỹ thuật hoặc công nghệ gì đấy.

0 0 48

- vừa được xem lúc

Xây dựng ứng dụng web CRUD với Python và Flask - Phần một

Chào các bạn, hôm nay mình sẽ hướng dẫn cách dựng 1 ứng dụng web quản lý nhân viên CRUD (Create, Read, Update, Delete) bằng cách sử dụng Flask, một microframework cho Python. Project sẽ gồm có các tín

0 0 239

- vừa được xem lúc

Dockerize ứng dụng Python, Flask

Chào mừng các bạn đã quay trở lại với series học Docker và CICD của mình . Ở bài trước mình đã hướng dẫn các bạn cách dockerize một ứng dụng NodeJS, đồng thời cùng với đó là một số khái niệm và câu hỏ

0 0 39

- vừa được xem lúc

Deta - micro server miễn phí dành cho dev

Mở đầu. Đôi khi chúng ta cần một web server đơn giản, public ra internet để thực thi vài tác vụ linh tinh, hoặc để hosting một số file khi cần.

0 0 30

- vừa được xem lúc

#2 Cài đặt ứng dụng Flask

Aplication setup. Một ứng dụng Flask là một instance (thể hiện) của class Flask.

0 0 14

- vừa được xem lúc

#3 Kết nối cơ sở dữ liệu SQLite với Flask

Chỉ định và truy cập cơ sơ dữ liệu. Ứng dụng sẽ sử dụng cơ sở dữ liệu SQLite để lưu thông tin users và posts.

0 0 15