本記事は「 TTDC Advent Calendar 2024 」 6 日目の記事です。
はじめに
TeamsのIncomingWebhook(Office 365コネクタ)が近いうちに廃止されるようなので、代わりにWorkflowsを使ってpythonコードからTeamsへのメッセージ送信をしてみました。
本記事ではその手順を紹介します。
▼送信結果はこんな感じです。
Workflowsとは
Teamsの拡張機能の一つです。
Workflowsを使用することで、Teamsに接続する繰り返しのタスクまたはプロセスを自動化できます。
用意するもの
- python環境(今回は3.12)
- Microsoft Teamsアカウント
必要なライブラリ
- requests==2.32.3
手順
Teams側の設定
まずはメッセージを受け取る側の設定を行います。
Teamsのアプリを起動しましょう。
- フローの作成
-
ワークフローが正常に作成されると、urlが発行されます。
これが後ほど、送信先のurlとなるため、コピーして取っておきましょう。
※ コピーし損ねても後ほど別の画面で確認可能です。
-
フローの「状況」のトグルをonにし、右側のメニューボタンから編集画面に移動します。
※トグルをonにする際に、下のようなエラーが出る場合は管理者側の設定変更が必要です。
業務で使う場合は会社のIT部門に相談しましょう。
-
フローの詳細設定を行います。
編集画面に移動すると、設定用のボックスが閉じた状態で表示されています。
それぞれをクリックして開きましょう。
下の画像を参考に設定し、「保存」をクリックします。
(基本的にデフォルトの状態のままで、[Post Card in chat or channel]>[投稿者]の欄を「ユーザー」に変更するだけでOKです。)
※ここで、送信先のurlを再び参照することができます。
pythonコード
次に送信側のコードを作成します。
-
メッセージの設定
送信カードはアダプティブカード形式で作成します。
公式のページにサンプルがあります。
▼今回はシンプルに、タイトルとテキストのみの構成にしてみました。msg = { "attachments": [ { "contentType": "application/vnd.microsoft.card.adaptive", "content": { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.2", "body": [ { "type": "TextBlock", "text": title, "size": "Large", "weight": "Bolder" }, { "type": "TextBlock", "text": text, "wrap": True, "markdown": True } ] } } ] }
上記に加え、送信用のスクリプトも含めた全体像はこちらです。
urlには、Teams側の設定時に取得した送信先urlを設定してください。
title, textの内容を変更すると、Teamsへの送信内容に反映されます。
▼teams_messaage.py
import requests import json def send_message(url, msg): # POSTリクエストを送信 response = requests.post( url=url, data=json.dumps(msg), headers={"Content-Type": "application/json"} ) return response if __name__=='__main__': ######### ここを変更する ######### url = "送信先のurlを貼る" title = "タイトル" text = f"***メッセージ欄***" ################################# msg = { "attachments": [ { "contentType": "application/vnd.microsoft.card.adaptive", "content": { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.2", "body": [ { "type": "TextBlock", "text": title, "size": "Large", "weight": "Bolder" }, { "type": "TextBlock", "text": text, "wrap": True, "markdown": True } ] } } ] } response = send_message(url, msg) # レスポンスを確認 if response.status_code == 200: print("メッセージを送信しました") elif response.status_code == 202: print("メッセージの送信を受け付けました") else: print(f"エラーが発生しました: {response.status_code}, {response.text}")
まとめ
pythonを使ってTeamsにメッセージ送信を行うことができました。
IncomingWebhookと同様、別のコードと組み合わせることで実行結果の共有や定期実行しているシステムの動作の監視など、さまざまな応用ができそうです。
今回の記事は以上になります。
最後まで読んでいただき、ありがとうございました!
今後も機械学習の活用を始め、開発環境やシミュレーションなど幅広く技術情報発信をしていく予定です!
最後になりますが、本記事の内容に誤りなどあれば、コメントにてご教授お願いいたします。
参考
Retirement of Office 365 connectors within Microsoft Teams【Microsoft Teams 内の Office 365 コネクタの廃止】