背景
内製ツールで発生したエラーをTeamsのチャネルに通知したかったので、Teams Workflowsを使ってみました。
TeamsのIncoming Webhookを使う方法がありますが、Incoming Webhookは2025年末に廃止され、後継としてMS公式からも推奨されているため、今回Workflowsを選択しました。
https://devblogs.microsoft.com/microsoft365dev/retirement-of-office-365-connectors-within-microsoft-teams/
WorkFlowsの作成
今回はテンプレート「Webhookを受信するとチャネルに投稿する」をそのまま使用します。
フローを確認します。
「When a Teams webhook request is received」を展開すると、HTTP POSTのURLが表示されます。これは後ほど使用します。
一方「Post card in chat or channel」を展開すると、メッセージを送信したい投稿先、チーム、チャネルを設定できるので、エラー通知を送信したい宛先を設定します。
ツール側でエラー送信
Pythonを例に説明します。
メインの処理でエラーが発生した場合、例外処理として下記関数を呼び出すようにします。
import os
import requests
import logging
# ロガーの設定
logger = logging.getLogger(__name__)
def send_failure_notifications(error_message):
"""エラー発生時の通知を送信する"""
try:
workflows_url = "{HTTP POSTのURL}"
notification_message = create_teams_notification_message(error_message)
response = requests.post(workflows_url, json=notification_message)
if response.status_code in [200, 202]:
logger.info("Notification sent successfully.")
else:
logger.error(f"Failed to send notification. Status code: {response.status_code}")
except Exception as e:
logger.error(f"Error sending notification: {e}")
Workflowsのフローで確認したHTTP POSTのURLに向かってPOSTを投げることで、発生したエラーをTeams通知できます。
※create_teams_notification_messageは通知用アダプティブカードを構築する関数です。この部分はご自身の都合に合わせ改変してください。
実行結果
最後に
当初予想していたよりも楽に実装できました。
内製ツールのエラー通知をTeamsに投げる需要は地味ながらそこそこあると思いますので、よろしければお試しください。