Khóa học
Công việc nào cũng có những tác vụ nhàm chán, lặp đi lặp lại. Dù bạn là nhân viên hỗ trợ cần báo cáo các chủ đề thường gặp trong yêu cầu trợ giúp, quản lý nhóm cần theo dõi chỉ số hiệu suất, hay kỹ sư phần mềm cần kiểm tra các quy trình kinh doanh quan trọng để đảm bảo mọi thứ ổn định, bạn sẽ phải làm đi làm lại những việc này hằng tháng, hằng tuần, hằng ngày, thậm chí hằng giờ!
Tuy nhiên, trong nhiều trường hợp, bạn có thể tự động hóa ít nhất một phần công việc lặp lại đó. Python là một lựa chọn tuyệt vời: đây là ngôn ngữ lập trình đa dụng, làm việc tốt với dữ liệu (kể cả khối lượng lớn) đồng thời rất thuận tiện để viết các script tự động hóa. Báo cáo chỉ số hiệu suất? Nếu không tự động hóa, bạn có thể phải xem 4 bảng điều khiển khác nhau để lấy đủ số liệu rồi tổng hợp thành một tin nhắn gửi sếp. Với tự động hóa, một script Python sẽ kéo mọi dữ liệu bạn cần, chọn ra các con số tóm tắt quan trọng, biên soạn chúng và gửi đi — không cần bạn can thiệp. Không chỉ tiện lợi, cách này còn giảm lỗi và tránh bỏ sót!
Trong hướng dẫn này, chúng ta sẽ xem xét trường hợp cụ thể: chạy mã Python để báo cáo trạng thái một danh mục đầu tư và gửi bản tóm tắt danh mục này lên Slack, nền tảng giao tiếp nhóm được dùng rộng rãi. Chúng ta sẽ đi qua tất cả các bước cần thiết để cấu hình một ứng dụng Slack, một chương trình Python tận dụng ứng dụng Slack đó để gửi tin nhắn, và thiết lập lịch để script Python có thể chạy định kỳ. Ví dụ cụ thể nói về theo dõi danh mục đầu tư, nhưng bạn hoàn toàn có thể thay phần “business logic” này bằng bất kỳ thứ gì bạn muốn; toàn bộ phần cấu hình và mã để gửi tin nhắn lên Slack vẫn y nguyên.
Chúng ta sẽ dùng DataLab trong hướng dẫn này vì sản phẩm có sẵn chức năng lưu trữ bí mật một cách an toàn dưới dạng biến môi trường (tính năng chúng ta sẽ dùng để lưu thông tin xác thực của ứng dụng Slack) cũng như khả năng lập lịch chạy mã Python chỉ với vài cú nhấp. Để theo dõi, bạn chỉ cần một tài khoản Slack (để đăng tin nhắn) và một tài khoản DataCamp (để dùng DataLab), cả hai đều có thể tạo miễn phí!
Bắt đầu thôi!
1. Cấu hình ứng dụng Slack
Bạn có thể coi ứng dụng Slack như một tiện ích mở rộng hoặc add-on của Slack cho một mục đích cụ thể. Có rất nhiều ứng dụng Slack để tích hợp Google Docs, Jira, Dropbox, Zoom và vô số dịch vụ khác vào Slack, giúp bạn nhận thông báo ngay trong Slack về những gì đang diễn ra, đồng thời có thể thao tác với các ứng dụng đó từ Slack. Với dự án nhỏ này, chúng ta cũng cần tạo một ứng dụng Slack để tận dụng bot user đi kèm với mọi ứng dụng Slack nhằm gửi tin nhắn lên Slack.
Đầu tiên, hãy đảm bảo bạn có tài khoản Slack, là thành viên của một không gian làm việc (workspace) Slack mà bạn có quyền quản trị, và đã đăng nhập bằng tài khoản đó. Nếu chưa, hãy truy cập slack.com để tạo tài khoản và workspace mới.
Tiếp theo, truy cập https://api.slack.com/app, bảng điều khiển ứng dụng Slack của bạn. Màn hình sẽ trông như thế này:

Nhấp “Create an App”

Chọn “From scratch.” Ở màn hình tiếp theo, đặt tên cho ứng dụng, ví dụ “Python Messenger,” và chỉ định workspace nơi bạn muốn phát triển ứng dụng này (trường hợp của bạn sẽ là workspace khác).

Nhấp Create app. Bạn sẽ vào trang chủ của ứng dụng vừa tạo, nơi có thể cấu hình mọi thiết lập của ứng dụng, từ thông tin cơ bản đến việc ai có thể thay đổi ứng dụng và tất cả tính năng. Đừng lo lắng! Chúng ta chỉ cần chỉnh một vài cài đặt.
Đi tới tab “OAuth & Permissions”, cuộn xuống thẻ Scopes, và trong Bot Token Scopes, nhấp “Add an OAuth Scope” để thêm các scope ‘chat:write’, ‘chat:write.customize’, ‘files:read’, ‘files:write’ (bạn sẽ cần nhấp “Add an OAuth Scope” tổng cộng bốn lần).

Các bot token scope này xác định bot user của ứng dụng bạn có thể làm gì trong workspace Slack. Theo nguyên tắc đặc quyền tối thiểu, thay vì cấp quyền truy cập mọi nội dung và mọi quyền có thể nghĩ tới, chúng ta giới hạn ứng dụng chỉ được viết tin nhắn (tùy chỉnh) và tải lên/tải xuống tệp (hữu ích nếu bạn muốn đính kèm tệp trong tin nhắn).
Bây giờ, cuộn lên phần “OAuth Tokens for Your Workspace” và nhấp “Install to Workspace”:

Ở màn hình tiếp theo tóm tắt các scope bạn đã chỉ định, nhấp Allow.

Bạn sẽ thấy “Bot User OAuth Token” đã được tạo:

Bạn sẽ cần Bot User OAuth Token này ở bước sau, nên đừng đóng cửa sổ trình duyệt.
Mở Slack và để ý một ứng dụng mới “Python Messenger” (hoặc tên bạn đặt) đã xuất hiện ở thanh bên:

Bước cấu hình cuối cùng là cấu hình kênh Slack nơi bạn muốn gửi tin nhắn tự động. Tạo kênh mới tên #bot-updates. Trong kênh, gõ /app và chọn “Add apps to this channel”:

Bên cạnh “Python messenger”, nhấp “Add”. Bạn sẽ thấy ứng dụng “Python Messenger” đã tham gia kênh.
Xong! Giờ kênh Slack của bạn đã sẵn sàng nhận tin nhắn thông qua ứng dụng “Python Messenger”, sử dụng Bot User OAuth Token đã tạo. Lưu ý: tuy có khá nhiều bước, nhưng đây là thiết lập một lần cho mỗi workspace Slack. Nếu bạn muốn nhiều chương trình Python cùng gửi vào một workspace Slack, bạn không cần lặp lại quy trình này.
2. Viết business logic bằng Python
Rất tốt! Sau khi cấu hình ứng dụng Slack, giờ đến phần thú vị: viết Python. Chúng ta sẽ bắt đầu viết một chút mã Python cho “business logic” để giải quyết bài toán đặt ra.
Nếu cần ôn lại cách viết mã Python, khóa học Introduction to Python của chúng tôi là điểm khởi đầu lý tưởng.
Bạn có thể tạo một workbook trống từ đầu, hữu ích nếu bạn đã biết chương trình Python nào muốn tự động hóa và tích hợp với Slack.
Nếu bạn ở đây để tìm hiểu khái niệm, bạn có thể bắt đầu với một workbook mẫu chúng tôi đã tạo để theo dõi giá trị một danh mục cổ phiếu công nghệ giả định. Mỗi ngày (trừ cuối tuần) sẽ có dữ liệu mới, nên đây là ứng viên tuyệt vời cho báo cáo hằng ngày.
Chạy và chỉnh sửa mã từ hướng dẫn trực tuyến này
Chạy mãDù theo cách nào, bạn cũng sẽ có một workbook DataLab với toàn bộ business logic đã được viết xong:

3. Gửi tin nhắn Slack
Vậy là: ứng dụng Slack — xong. Business logic — xong. Để tích hợp notebook Python với Slack, ta cần làm hai việc: lưu trữ Slack OAuth token trong workbook và viết một ít mã Python để gửi tin nhắn Slack.
Lưu Slack OAuth token
Notebook Python của chúng ta cần OAuth token để chứng minh rằng nó được phép gửi tin nhắn vào workspace Slack của bạn. Bạn có thể sao chép và dán token này trong một ô mã của notebook. Tuy nhiên, cách này không an toàn và không được khuyến nghị. Nếu bạn chia sẻ notebook với người khác, họ sẽ thấy token.
Cách này cũng buộc bạn phải lặp lại thao tác sao chép-dán trong mọi workbook mà bạn muốn gửi tin nhắn Slack. Nếu cần cập nhật token, bạn sẽ phải đi sửa từng workbook.
Cách an toàn và có thể mở rộng hơn là lưu Slack OAuth token trong một biến môi trường. Khi bạn kết nối biến môi trường này, nó sẽ khả dụng trong phiên Python. Trong workbook của bạn:
- Nhấp tab “Environment” ở bên trái
- Nhấp biểu tượng dấu cộng cạnh “Environment Variables”
- Trong cửa sổ “Add Environment Variables”:
- Đặt “Name” là
SLACK_TOKEN - Trong ô “Value”, dán OAuth token bạn có ở bước 1 của hướng dẫn này.
- Đặt “Environment Variables Set Name” là “Slack” (thực ra có thể là bất kỳ tên nào)

Sau khi điền xong, nhấp “Create,” “Next,” và cuối cùng “Connect.” Phiên DataLab của bạn sẽ khởi động lại và SLACK_TOKEN sẽ khả dụng dưới dạng biến môi trường trong workbook. Bạn có thể kiểm tra bằng cách tạo một ô Python với đoạn mã sau và chạy nó:
import os
slack_token = os.environ["SLACK_TOKEN"]
print(slack_token)
Nếu bạn muốn tái sử dụng cùng thông tin xác thực tài khoản dịch vụ trong một workbook khác, bạn không cần thiết lập lại biến môi trường: bạn có thể dùng lại biến môi trường đó trong các workbook khác.
Mã Python để gửi tin nhắn Slack
Khi SLACK_TOKEN đã sẵn sàng, hãy thêm một đoạn ngắn ở cuối notebook để gửi một tin nhắn mẫu tới kênh #bot-updates trong workspace Slack của bạn:
import os
from slack_sdk import WebClient
message = "This is my first Slack message from Python!"
# Set up a WebClient with the Slack OAuth token
client = WebClient(token=os.environ["SLACK_TOKEN"])
# Send a message
client.chat_postMessage(
channel="bot-updates",
text=message,
username="Bot User"
)
Đoạn mã này sử dụng Python SDK chính thức của Slack. Hãy chạy mã! Bạn sẽ thấy tin nhắn này xuất hiện trong workspace Slack của mình:

Đây là một tin nhắn mẫu vô thưởng vô phạt, nhưng bạn cũng có thể tạo tin nhắn dựa trên kết quả business logic của mình, như chúng tôi đã làm trong workbook mẫu:
message = f"Total value of my portfolio on {portfolio_df.index[-1]:%B %d, %Y} is ${latest_total:,.2f}."
Với kết quả như sau:

Cuối cùng, bạn cũng có thể tận dụng biến môi trường DL_WORKBOOK_ID để chèn liên kết đến workbook, phòng khi muốn chuyển nhanh từ Slack sang DataLab workbook đang cung cấp dữ liệu cho tin nhắn này:
message = f"""
Total value of my portfolio on {portfolio_df.index[-1]:%B %d, %Y} is ${latest_total:,.2f}.
For the full analysis, check <https://www.datacamp.com/workbook/w/{os.environ.get('DL_WORKBOOK_ID', 'invalid')}/edit|this workbook> (updates daily)
"""
Với kết quả như sau:

4. Tự động hóa!
Bạn đã viết một script Python thực hiện phân tích hữu ích và gửi tóm tắt phân tích đó lên Slack, kèm liên kết trở lại notebook đầy đủ để mọi người đào sâu khi cần. Tuyệt! Nhưng sẽ tuyệt hơn nữa nếu bạn có thể cấu hình notebook này chạy hằng tuần hoặc hằng ngày để tự động cập nhật kết quả mới? Tin vui là bạn có thể! DataLab hỗ trợ lịch chạy theo kế hoạch để làm điều đó.
- Trên thanh menu trên cùng, nhấp Run > Schedule Run
- Cấu hình lịch theo ý bạn:
- Thiết lập notebook chạy hằng ngày hoặc hằng tuần, với tùy chọn đặt giờ và ngày trong tuần (nếu chọn hằng tuần)
- Thêm người dùng DataCamp mà bạn muốn thông báo mỗi khi notebook chạy xong thành công, gặp lỗi, hoặc cả hai. Nên thiết lập để bạn nhận thông báo khi thất bại, nhằm kịp thời kiểm tra khi cần.

Nếu cấu hình như ảnh chụp màn hình trên, notebook sẽ chạy lúc 9:30 sáng theo giờ địa phương mỗi ngày, đồng nghĩa mỗi sáng sẽ có một tin nhắn đăng vào kênh #bot-updates trên Slack.
Tự động hóa hay không tự động hóa
Không phải tác vụ nào cũng đáng để tự động hóa, còn tùy tần suất bạn phải làm, thời gian làm thủ công mất bao lâu, và thời gian cần để viết một script Python làm thay bạn. Ví dụ sẽ rõ: giả sử bạn phải tổng hợp một báo cáo mỗi năm, làm thủ công mất 20 phút. Nếu viết script để làm thay mất nửa ngày, thì sẽ cần rất nhiều năm bạn mới “gỡ vốn” được thời gian đã bỏ ra để tự động hóa!
Bảng sau đây tóm tắt rất đúng ý này:

Có đáng dành thời gian để tự động hóa không? Nguồn
Vì vậy, nếu một tác vụ bạn phải làm hằng ngày trước đây mất 5 phút, bạn có thể dành tối đa 6 ngày để thử tự động hóa tác vụ đó. Nếu bạn mất ít hơn con số này, bạn đã tiết kiệm thời gian (tính trong vòng 5 năm).
Kết luận
Thiết lập ban đầu trước khi có thể gửi tin nhắn từ DataLab lên Slack có thể mất một lúc. Tuy nhiên, khi mọi thứ đã được cấu hình đúng với Slack token lưu trong DataLab, việc gửi tin nhắn chỉ còn là thêm hai dòng Python: đơn giản vậy thôi! Và mặt lợi là: giờ bạn có thể tự động hóa hầu như mọi script Python và thông báo cho các bên liên quan ngay nơi họ hiện diện: trên Slack.
Tạm biệt thời kỳ phải đặt nhắc việc để lặp lại những tác vụ nhàm chán hết lần này đến lần khác, chào đón kỷ nguyên quy trình công việc mạnh mẽ, tự động — không cần nhảy qua lại giữa các công cụ. Tất cả những gì bạn cần là tình yêu DataLab.
Nâng tầm kỹ năng Python của bạn với khóa Intermediate Python của DataCamp. Mở rộng kiến thức về trực quan hóa dữ liệu và các tính năng Python nâng cao. Tiếp tục hành trình học tập ngay hôm nay!
Filip là nhà phát triển tận tâm đứng sau nhiều khóa học Python, SQL và R phổ biến nhất của DataCamp. Hiện tại, Filip dẫn dắt việc phát triển DataLab, sổ tay dữ liệu tích hợp AI của DataCamp. Filip có bằng về Kỹ thuật Điện và Trí tuệ Nhân tạo.
