Khóa học
Mọi công việc đều có những tác vụ lặp đi lặp lại. Dù là nhân viên hỗ trợ phân tích các yêu cầu trợ giúp thường gặp, trưởng nhóm theo dõi chỉ số hiệu suất, hay kỹ sư phần mềm kiểm tra quy trình nghiệp vụ, các tác vụ này thường xuyên tái diễn – hàng ngày, hàng tuần, thậm chí hàng giờ.
May mắn là bạn có thể tự động hóa phần lớn công việc này bằng Python. Đây là ngôn ngữ linh hoạt, rất phù hợp để xử lý dữ liệu và dễ dùng cho các tác vụ tự động hóa bằng script. Hãy hình dung việc thu thập chỉ số hiệu suất: nếu làm thủ công, bạn có thể phải lục tìm qua nhiều bảng điều khiển. Với một script Python, bạn có thể tự động lấy dữ liệu này, làm nổi bật các điểm chính và gửi báo cáo tổng hợp cho sếp. Điều này không chỉ tiết kiệm thời gian mà còn giảm rủi ro sai sót.
Trong hướng dẫn này, chúng ta sẽ xem xét trường hợp cụ thể là chạy mã Python để lấy dự báo thời tiết cho một địa điểm xác định và gửi bản tóm tắt dự báo này đến Microsoft Teams, nền tảng giao tiếp nhóm của Microsoft. Chúng ta sẽ đi qua tất cả các bước cần thiết để cấu hình webhook của Teams, viết chương trình Python sử dụng webhook để gửi tin nhắn và thiết lập lịch để script Python chạy định kỳ. Ví dụ cụ thể này là báo cáo dự báo thời tiết, nhưng bạn hoàn toàn có thể thay thế phần ‘logic nghiệp vụ’ bằng bất kỳ thứ gì bạn muốn; toàn bộ cấu hình và mã để gửi tin nhắn đến Teams sẽ giữ nguyên.
Chúng ta sẽ dùng DataLab trong hướng dẫn này, vì nó có sẵn tính năng lưu trữ bí mật an toàn dưới dạng biến môi trường (chúng ta sẽ dùng để lưu webhook của Teams) cũng như lên lịch chạy mã Python chỉ với vài cú nhấp chuột. Để theo dõi, bạn chỉ cần một tài khoản Microsoft (để đăng tin nhắn) và tài khoản DataCamp (để dùng DataLab), cả hai đều có thể tạo miễn phí!
Bạn cũng có thể xem hướng dẫn riêng của chúng tôi về cách gửi tin nhắn Slack bằng Python.
Bắt đầu thôi!
1. Cấu hình Webhook cho Microsoft Teams
Bên trong Microsoft Teams có các nhóm (team), và mỗi nhóm có các kênh (channel). Bạn có thể thêm các ‘ứng dụng’ vào các kênh này. Hãy coi ứng dụng Teams như một tiện ích mở rộng cho MS Teams cho một mục đích cụ thể. Có các ứng dụng để tích hợp Jira, Zendesk, Salesforce, và vô số ứng dụng khác vào Teams, nhờ đó bạn có thể nhận thông báo ngay trong Teams về những gì đang xảy ra, đồng thời có thể thực hiện hành động trong các ứng dụng đó ngay từ Teams. Với dự án nhỏ này, chúng ta sẽ cần cài một trong các ứng dụng đó, cụ thể là ứng dụng “Incoming Webhook” do chính Microsoft duy trì.
Để bắt đầu, hãy đảm bảo bạn có tài khoản Microsoft có quyền truy cập Teams. Hãy đảm bảo bạn là thành viên của một nhóm và có quyền thêm ứng dụng vào các kênh trong nhóm này. Nếu không, hãy liên hệ bộ phận CNTT của bạn và gửi cho họ liên kết này.
Tiếp theo, vào kênh nhóm mà bạn muốn đăng tin nhắn. Trong ví dụ của chúng tôi, đây là kênh “General” trong nhóm “Data Analytics Heroes”:

Nhấp vào dấu + bên cạnh tên kênh; bạn sẽ thấy danh sách ứng dụng có thể thêm vào kênh:

Nhấp “Get more apps”. Bạn sẽ vào một chợ ứng dụng đầy đủ tính năng để thêm vào MS Teams:

Trong ô tìm kiếm, gõ “Incoming Webhook.” Ứng dụng xuất hiện đầu tiên chính là cái chúng ta cần:

Nhấp Add, sau đó “Add to a team.” Bây giờ bạn sẽ được yêu cầu chỉ định nhóm hoặc kênh muốn gửi tin nhắn đến:

Ví dụ trong hướng dẫn này là kênh “General” trong nhóm “Data Analytics Heroes”, nhưng của bạn có thể sẽ khác. Tiếp theo, nhấp “Set up a connector.” Một màn hình nữa xuất hiện để yêu cầu một số cài đặt webhook bổ sung.

Chỉ định tên cho incoming webhook; tin nhắn của bạn sẽ được gửi dưới tên này, nên hãy chọn tên hợp lý, ví dụ “Python Messenger.” Bạn cũng có thể tải lên ảnh tùy chỉnh, nhưng không bắt buộc. Cuối cùng, nhấp “Create”. Một URL webhook xuất hiện!

Bạn sẽ cần URL webhook này trong chương trình Python, vì vậy hãy sao chép vào clipboard và lưu ở đâu đó (ví dụ, trong ứng dụng ghi chú) để dùng sau. Cuối cùng, nhấp “Done”. Trong màn hình xuất hiện, bạn sẽ thấy tổng quan tất cả connector trong kênh đã chọn.

Bạn có thể đóng màn hình này. Trong kênh mà bạn vừa cấu hình incoming webhook, bạn sẽ thấy tin nhắn xác nhận thiết lập:

Xong! Giờ đây, kênh Microsoft Teams của bạn đã sẵn sàng nhận tin nhắn qua webhook.
2. Viết logic nghiệp vụ bằng Python
Tuyệt vời vì bạn đã đi đến đây! Với Incoming Webhook trong Teams đã được cấu hình, giờ là phần thú vị: viết Python. Chúng ta sẽ bắt đầu bằng cách viết một chút mã Python cho ‘logic nghiệp vụ’ để giải quyết nhiệm vụ hiện tại.
Nếu bạn cần ôn lại cách viết mã Python, khóa học Nhập môn 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 Microsoft Teams.
Nếu bạn ở đây để học các khái niệm, bạn có thể bắt đầu với một workbook mẫu tóm tắt dự báo thời tiết cho một thành phố do bạn chỉ định. Mỗi ngày 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! Nhấp nút "Run Code" bên dưới để tạo workbook nà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 logic nghiệp vụ đã được mã hóa đầy đủ:

3. Gửi tin nhắn đến Teams
Vậy là webhook Teams: xong. Logic nghiệp vụ: xong. Để tích hợp notebook Python với Microsoft Teams, chúng ta cần làm hai việc: lưu URL webhook trong workbook DataLab và viết một đoạn mã Python để gửi tin nhắn đến kênh Teams.
Lưu URL webhook
Notebook Python của chúng ta cần URL webhook để gửi tin nhắn đến đúng kênh Teams. Bạn có thể chỉ cần sao chép và dán URL này vào một ô mã trong notebook. Tuy nhiên, đây không phải là cách an toàn và không được khuyến nghị. URL webhook là dạng bí mật. Nếu bạn chia sẻ notebook với người khác, họ có thể thấy URL webhook và spam kênh Teams của bạn!
Cách làm này cũng yêu cầu bạn 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 Teams. Nếu vì lý do nào đó bạn muốn cập nhật URL webhook, bạn sẽ phải đi qua và sửa từng workbook.
Một cách an toàn và mở rộng hơn là lưu token URL webhook 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 của bạn. Trong workbook của bạn:
- Nhấp tab “Environment” ở bên trái
- Nhấp vào biểu tượng dấu cộng cạnh “Environment Variables”
- Trong cửa sổ “Add Environment Variables”:
- Đặt “Name” là MS_TEAMS_WEBHOOK_URL
- Trong ô “Value”, dán Webhook URL mà bạn đã lưu trước đó.
- Đặt “Environment Variables Set Name” là “Microsoft Teams” (thực ra có thể đặt bất cứ tên gì)

Sau khi điền xong, nhấp “Create,” “Next,” và cuối cùng “Connect.” Phiên workbook của bạn sẽ khởi động lại và MS_TEAMS_WEBHOOK_URL giờ sẽ khả dụng như một 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 mã sau và chạy nó:
import os
webhook_url = os.environ["MS_TEAMS_WEBHOOK_URL"]
print(webhook_url)
Nếu bạn muốn tái sử dụng cùng thông tin đăng nhập 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ể tái sử dụng biến môi trường đó trong các workbook khác.
Mã Python để gửi tin nhắn Microsoft Teams
Với MS_TEAMS_WEBHOOK_URL đã sẵn sàng, giờ chúng ta có thể viết mã Python để gửi tin nhắn đến Teams! Để làm việc này, chúng ta sẽ dùng gói pymsteams mã nguồn mở, cung cấp lớp bọc tiện lợi cho API khá phức tạp để gửi tin nhắn đến Teams. Hãy cài đặt và import nó, cùng với gói os để đọc biến môi trường:
!pip install pymsteams
import pymsteams
import os
Tiếp theo, chúng ta có thể tạo một ‘connector card’ – cách nói hoa mỹ cho một thông điệp văn bản phong phú trong Teams –, thêm một ít nội dung, và gửi nó:
card = pymsteams.connectorcard(os.environ["MS_TEAMS_WEBHOOK_URL"])
card.text("Hello Teams!")
assert card.send()
Chạy đoạn mã này! Bạn sẽ thấy tin nhắn xuất hiện trong kênh:

Tuyệt! Đây chỉ là tin nhắn mẫu vô nghĩa, nhưng bạn cũng có thể tạo tin nhắn dựa trên kết quả logic nghiệp vụ của mình, như chúng tôi đã làm trong workbook mẫu:
card = pymsteams.connectorcard(os.environ["MS_TEAMS_WEBHOOK_URL"])
card.title("Weather Forecast")
card.text("\n".join([
f"Weather for {CITY} in the next three days:",
f"- Min temperature: {weather_df['temperature_2m'].min()} {unit_temperature}",
f"- Max temperature: {weather_df['temperature_2m'].max()} {unit_temperature}",
f"- Total precipitation: {weather_df['precipitation'].sum():.2f} {unit_prec}"
]))
assert card.send()
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 để thêm một nút liên kết đến workbook của bạn, đề phòng bạn muốn cung cấp cách dễ dàng chuyển từ Teams sang DataLab workbook đang cung cấp tin nhắn này:
card = pymsteams.connectorcard(os.environ["MS_TEAMS_WEBHOOK_URL"])
card.title("Weather Forecast")
card.text("\n".join([
f"Weather for {CITY} in the next three days:",
f"- Min temperature: {weather_df['temperature_2m'].min()} {unit_temperature}",
f"- Max temperature: {weather_df['temperature_2m'].max()} {unit_temperature}",
f"- Total precipitation: {weather_df['precipitation'].sum():.2f} {unit_prec}"
]))
card.addLinkButton("View detailed forecast", f"https://www.datacamp.com/datalab/w/{os.environ.get('DL_WORKBOOK_ID', 'invalid')}/edit")
assert card.send()
Với kết quả sau:

Khá hay ho, đúng không?!
4. Tự động hóa!
Bạn đã tạo 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 này đến Teams, kèm liên kết quay lại notebook đầy đủ cho những ai muốn xem chi tiết hơn. Tuyệt vời! Giờ hãy tưởng tượng nếu bạn có thể thiết lập notebook này chạy tự động, hàng ngày hoặc hàng tuần, giúp bạn luôn được cập nhật kết quả mới. Tin tốt là bạn hoàn toàn có thể! DataLab cung cấp tính năng chạy theo lịch để hiện thực hóa điều này.
- Trên thanh menu phía trên, nhấp Run > Schedule Run
- Cấu hình lịch theo ý bạn:
- Thiết lập notebook chạy tự động hàng ngày hoặc hàng tuần. Với lịch hàng tuần, chọn chính xác ngày và giờ.
- Thêm người dùng DataCamp mà bạn muốn được thông báo mỗi khi notebook hoàn tất (thành công hoặc thất bại). Việc này hữu ích cho các lần thất bại, để bạn có thể vào xử lý khi có sự cố.

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 được đăng trong kênh Teams đã chỉ định.
Tự động hay không tự động
Không phải tác vụ nào cũng phù hợp để tự động hóa. Điều này phụ thuộc vào tần suất bạn thực hiện, thời gian làm thủ công, và thời gian cần để viết script Python tự động hóa. Ví dụ, hãy xem xét một báo cáo hằng năm mất 20 phút để tổng hợp thủ công. Nếu mất bạn nửa ngày để viết script cho việc này, sẽ mất nhiều năm trước khi bạn thu hồi thời gian đã bỏ ra để tự động hóa!
Dưới đây là tóm tắt dạng bảng:

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 dành ít thời gian hơn con số này cho việc tự động hóa, bạn sẽ tiết kiệm được thời gian (tính trong vòng năm năm).
Kết luận
Thiết lập DataLab để gửi tin nhắn đến Microsoft Teams ban đầu cần bạn đi qua vài màn hình. Nhưng khi mọi thứ đã được thiết lập với URL webhook trong DataLab, việc gửi tin nhắn chỉ còn là thêm vài dòng mã Python – thực sự rất đơn giản! Phần hay nhất? Bạn có thể tự động hóa gần như mọi script Python và thông báo trực tiếp cho các bên liên quan ngay nơi họ đang hiện diện: trên Teams.
Thời đại đặt lời nhắc cho những tác vụ lặp lại, nhàm chán đã qua. Chào mừng đến với kỷ nguyên quy trình làm việc hiệu quả, tự động, nơi bạn không cần chuyển đổi giữa các công cụ. Tất cả chỉ cần bạn đón nhận DataLab.
Hãy nhớ rằng, nếu bạn cần ôn lại viết mã Python, khóa học Nhập môn Python của chúng tôi là điểm khởi đầu lý tưởng.
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.
