如何使用 Python 傳送 Microsoft Teams 訊息

每個工作都包括重複的任務。無論是客戶支援代理分析常見的幫助請求、團隊領導者監控表現指標,還是軟件工程師檢查商業流程,這些任務經常發生 – 每日、每周,甚至是每小時。

幸運的是,您可以使用Python自動化這些工作的大部分。這是一種多才多藝的語言,非常適合處理數據和自動化任务的腳本。想像一下收集表現指標:手動的話,您可能必須挖掘幾個控制面板。利用Python腳本,您可以自動地拉取這些數據,突出關鍵點,並將彙總報告傳送給您的上司。這不僅節省時間,還減少錯誤的風險。

在這個教程中,我們將查看運行Python代碼來為特定地點索取氣象預報,並將預報摘要傳送到Microsoft Teams,Microsoft的團隊溝通平台。我們將涵蓋所有必要的步驟來配置Teams的网络钩子、一個Python程序,該程序利用網絡钩子傳送消息,並設置一個排程,使Python腳本可以定期運行。這個具體的例子是關於報告氣象預報,但當然,您可以將這種「商業邏輯」替換為您想要的一切;所有配置和代碼傳送消息到Teams都將保持完全一樣。

在這個教學中,我們將使用DataLab,它內建了將秘密安全儲存為環境變數的功能(我們將使用這項功能來儲存Teams webhook),以及透過幾個點擊來排程你的Python代碼。要跟隨操作,你需要的是一個Microsoft帳戶(用於發布訊息)和一個DataCamp帳戶(用於使用DataLab),這兩者都可以免費創建!

你也 可以查看我們的獨立指南,了解如何使用Python發送Slack訊息

讓我們開始吧!

1. 設定Microsoft Teams Webhook

在Microsoft Teams內部,有著所謂的團隊,這些團隊進而擁有頻道。你可以將所謂的‘應用程式’添加到這些頻道中。你可以將Teams應用程式視為MS Teams針對特定目的的擴展或附加元件。有許多應用程式可以將Jira、Zendesk、Salesforce等無數服務整合到Teams中,這樣你可以在Teams內部接收發生的事情的通知,同時也能在Teams內部進行那些應用程式的操作。對於我們的小專案,我們需要安裝這些應用程式之一,更確切地說,是由微軟本身維護的“Incoming Webhook”應用程式。

首先,確保您擁有可以訪問 Teams 的 Microsoft 帳戶。確保您是某個團隊的成員並且擁有在該團隊的頻道中添加應用程式的權限。如果沒有,請聯繫您的 IT 部門並發送給他們 這個鏈接

接下來,前往您希望發佈消息的團隊頻道。在我們的例子中,這是 “Data Analytics Heroes” 團隊內的 “General” 頻道:

點擊頻道名稱旁邊的 + 號;您將看到可以添加到頻道的應用程式概覽:

點擊“獲取更多應用”。您將進入一個可以添加到 MS Teams 的完整應用市場:

在搜索框中輸入“Incoming Webhook”。首先顯示的應用程式就是我們需要的:

點擊添加,然後點擊“添加到團隊”。現在會提示您指定要向哪個團隊或頻道發送消息:

本教程的例子是 “Data Analytics Heroes” 團隊中的 “General” 頻道,但對您來說可能會有所不同。接下來,點擊“設置連接器”。另一個屏幕會出現,要求提供一些更多的 webhook 設置。

為 incoming webhook 指定一個名稱;您的消息將以此名稱發送,因此選擇一個有意義的名稱,例如 “Python Messenger”。您也可以上傳自定義圖像,但這是可選的。最後,點擊“創建”。一個 webhook URL 出現了!

您需要在 Python 程序中使用這個 Webhook URL,所以請確保將它複製到剪貼板並儲存在某處(例如,在您的筆記應用程式中)以供稍後使用。最後,點擊“完成”。在出現的概览中,您將看到您選擇的频道中所有連接器的概览。

您可以關閉這個屏幕。在您剛剛為其配置 incoming webhook 的频道中,您應該看到一個相應的消息來確認設定:

就是这样!現在,您的 Microsoft Teams 渠道已经准备好通过 webhook 接收消息。

2. 在 Python 中编写业务逻辑

恭喜您走到了這一步!既然已經為 Teams 配置了 incoming webhook,是時候進行有趣的部分了:编写 Python 代码。我們将从编写一些 Python 代码開始,以解決當前的任務。

如果您需要重温 Python 代码的编写,我們的Python 入门课程是理想的開始地點。

您可以選擇從頭開始創建一個空的工作簿,這對於您已經知道要自動化和整合到 Microsoft Teams 的 Python 程序很有用。

如果您來這裡是想學習相關概念,您可以從一個總結您可以指定的城市天气预报的示例工作簿開始。每天都會有新的數據,所以這是一個很棒的每日報告 candidacy!點擊下方的“運行代碼”按鈕來創建這個工作簿。

在線執行和編輯從本教學課程的程式碼

Run code

在兩種情況下,您應該會得到一個已完成商業邏輯的DataLab工作簿:

3. 將消息傳送至Teams

因此,Teams的网络钩子:檢查。商業邏輯:檢查。要將Python笔记本整合到Microsoft Teams,我們需要做兩件事:將网络钩子URL存儲在DataLab工作簿中,並撰寫一些Python程式碼將消息傳送到Teams渠道。

存儲网络钩子URL

我們的Python笔记本需要网络钩子URL才能將消息傳送到正確的Teams渠道。您可以在笔记本的代碼单元格中貼 copied 粘贴此URL。然而,這種方法並不高級,也不建議使用。网络钩子URL類似於秘密。如果您與他人分享您的笔记本,他們可以看到網絡鉤子URL,他們可以spam您的Teams渠道!

這種方法還會要求您在每個要通過Teams渠道傳送消息的工作簿中重複copy-pasting。如果您有原因要更新網絡鉤子URL,您將需要通過並編輯每個工作簿。

一種更安全且可擴展的方法是将网络钩子URL令牌存儲在所谓的環境變量中。當您連接到此環境變量時,它將在您的Python会话中變得可用。在您的工作簿中:

  • 點擊左側的“環境”標籤
  • 點擊“環境變量”旁边的加號圖標
  • 在“新增環境變量”模態窗口中:
    • 將“名稱”設定為 MS_TEAMS_WEBHOOK_URL
    • 在“值”字段中,粘貼你之前保存的 Webhook URL。
    • 將“環境變量設定名稱”設定為“Microsoft Teams”(這可以是任何東西,實際上)

填寫完所有字段後,點擊“建立”、“下一個”,最後“連接”。你的工作表會重新啟動,現在 MS_TEAMS_WEBHOOK_URL 將作為一個環境變量在你的工作表中可用。你可以通過創建一個 Python 細胞並運行以下代碼來驗證這點:

import os webhook_url = os.environ["MS_TEAMS_WEBHOOK_URL"] print(webhook_url)

如果你想在另一個工作表中重用同一服務帳戶凭证,你不需要重新設定環境變量:你可以在其他工作表中重用環境變量。

Python 代碼發送 Microsoft Teams 消息

隨著 MS_TEAMS_WEBHOOK_URL 已經設定,現在我們可以寫 Python 代碼向 Teams 發送消息!對於這點,我們將使用開源 pymsteams 包,它為傳送消息到 Teams 的相對複雜 API 提供了便利的包裝。讓我們安裝它並導入它,以及導入 os 包來讀取環境變量:

!pip install pymsteams import pymsteams import os

接下來,我們可以創建一個所謂的 ‘連接器卡’ —— 在 Teams 中的富人文本信息的 fancy 詞語 —— 添加一些文本到它,並發送它:

card = pymsteams.connectorcard(os.environ["MS_TEAMS_WEBHOOK_URL"]) card.text("Hello Teams!") assert card.send()

運行此代碼!你應該會看到此消息出現在通道中:

酷毙了!這是一個沒有意義的樣本消息,但是你可以根據你的商業邏輯創建一個消息,就像我们在樣本工作簿中一樣:

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()

以下是結果:

最後,你也可以 leveragethe DL_WORKBOOK_ID 環境變量來包括一個連結到你的工作簿的按鈕,以便你想要包含從 Teams 到自己動力的 DataLab 工作簿的簡單方法:

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()

以下是結果:

是不是很酷?

4. 自動化!

你已經撰寫了一個 Python 腳本,進行了有用的分析,並將此分析的概要傳送到 Teams,包括一個回到完整笔记本的連結,供那些想要更多詳細信息的人使用。太棒了!現在,想象一下如果你可以將這個笔记本設定為自動化執行,每日或每周,並不斷更新最新的結果。好吧,好消息是,你可以!DataLab 提供了排程運行功能,使這成為可能。

  • 在頂部的菜單欄中,點擊運行 > 排程運行
  • 按你看到的適合進行配置:
    • 設定笔记本每日或每周自動運行。對於每周排程,選擇精確的日期和時間。
    • 添加您想要在筆記本完成(無論成功或失敗)時收到通知的DataCamp用戶。對於失敗情況來說這很有幫助,這樣當出現問題時,您可以深入調查並修復。

如果像截圖中那樣配置,筆記本將在每天本地時間9:30運行,這意味著每天早上都會在指定的Teams頻道發布一條消息。

是否自動化

並非每項任務都適合自動化。這取決於您進行這項任務的頻率、手動完成所需時間,以及創建Python腳本以實現自動化所需時間。例如,考慮一份需要手動編輯20分鐘的年報。如果編寫腳本需要您半天時間,那麼需要過很多年才能收回自動化所花的時間!

以下是以表格形式的摘要:

所以,如果您之前每天需要花5分鐘來完成的任務,您可以花最多6天時間試圖自動化這項任務。如果您花費的時間少於這個時間來自動化,那麼您將節省時間(以五年計)。

結論

設定DataLab以向Microsoft Teams發送消息,需要初始時在多個屏幕間導航。但一旦您在DataLab中設置好webhook URL,發送消息僅僅是添加幾行程式碼——非常直觀!最棒的部分?您可以自動化几乎所有Python腳本,並直接在Teams中通知您的利益相關者。

記得,如果你需要對寫Python程式碼進行复习,我們的Python入門課程是開始的理想之地。

早已過去需要為重複性、瑣碎任務設定提醒的日子。歡迎來到一個高效、自動化的工作流程時代,你不需要在各種工具之間切換。只要擁抱DataLab即可。

Source:
https://www.datacamp.com/tutorial/how-to-send-microsoft-teams-messages-with-python