はじめに
Qiita初投稿のため、
おかしな点は優しい目で見てください。
毎日手作業で実施していた
「CSVファイルのデータをTeamsに投稿する作業」を自動化するシステムを構築した。
Excelで管理しているメンテナンス依頼データ(CSV形式)を読み込み、
担当部署ごとにフィルターしてMicrosoft Teamsに自動投稿するシステムである。
webhookについて
**Webhook(ウェブフック)**とは、URLにデータを送信するだけで
自動的に処理を実行してくれる仕組みである。
今回のシステムでは、Power AutomateのWebhookを使用した。
Pythonプログラム → プロキシ経由 → Power Automate → Teams
なぜWebhookを使ったのか
最初は以下の方法を試したが、会社のセキュリティポリシーにより使用できなかった:
- ❌ Teams API直接接続 - 会社のファイアウォールでブロック
- ❌ SharePoint API - 権限不足で使用不可
- ❌ Power Automate + SharePoint - DLPポリシーに違反
Power AutomateのWebhookであれば、外部からのHTTPリクエストを受け取り、
Teamsに投稿する処理を実行できるため、セキュリティポリシーに違反しない。
PythonからTeamsに送る手順
1. Power Automateでフローを作成
- Power Automateで「HTTP要求の受信時」トリガーを使用
- Webhook URLを取得
- Teamsにメッセージを投稿するアクションを追加
2. Pythonプログラムの実装
(ここは全部AIに丸投げしました)
import requests
import json
# プロキシ設定
proxies = {
'http': 'http://1...',
'https': 'http://1...',
}
# Webhook URL
webhook_url = 'https://...'
# メッセージを送信
message = {
"attachments": [
{
"contentType": "application/vnd.microsoft.card.adaptive",
"content": {
"type": "AdaptiveCard",
"version": "1.5",
"body": [...]
}
}
]
}
response = requests.post(
url=webhook_url,
data=json.dumps(message),
headers={'Content-Type': 'application/json'},
proxies=proxies
)
3. CSVデータの処理
-
CSVファイル読み込み
- Pythonの
csvライブラリを使用 -
encoding='utf-8-sig'でBOM除去
- Pythonの
-
アダプティブカード形式で投稿
- 表形式で見やすく表示
プロキシに引っ掛かる
問題
最初は何を試しても接続できなかった。すべての外部サイトへの接続が失敗していた。
原因
会社のネットワークでは、プロキシサーバー経由での接続が必要だった。
プロキシサーバーとは、会社のネットワークから
インターネットに接続する際の「門番」のような役割を果たすサーバーである。
解決方法
-
proxy.pacファイルを確認
- 会社のプロキシ設定ファイル(
proxy.pac)を取得 - 実際のプロキシサーバーのアドレスを特定
- 会社のプロキシ設定ファイル(
-
プロキシ設定を追加
proxies = { 'http': 'http://1...', 'https': 'http://1...', } -
requestsライブラリにてプロキシ経由で接続
response = requests.post(url, proxies=proxies, ...)
これにより、会社のネットワークからでも外部のサービスへ接続できるようになった。
(ここも全部AIに丸投げして作成していt…)
完成
最終的な機能
- ✅ CSVファイルを自動読み込み
- ✅ PythonからWebhook使用でTeams投稿
まとめ
企業環境での制約を乗り越え、Power AutomateのWebhookを活用することで
実用的な自動化システムを構築できた。
最初は「会社のセキュリティが厳しくて、何もできないのではないか」と考えていたが
試行錯誤を繰り返すことで、必ず解決策が見つかることを実感した。
一市民開発の民でもAIフル活用で
ここまでサクッと作成できることに時代の変化を感じますね…