# teams-distributor > 生成したAIニュースレターをMicrosoft Teamsに自動配信するスキル。 Incoming WebhookまたはGraph APIを使用して、指定されたチャンネルに投稿します。 Adaptive Cards形式でリッチな表示が可能です。 このスキルは「Teamsに投稿して」「ニュースレターを配信して」といったプロンプトで呼び出されます。 - Author: WEI DAI - Repository: dnwdai/ai-news-collector - Version: 20260127075930 - Stars: 1 - Forks: 0 - Last Updated: 2026-02-06 - Source: https://github.com/dnwdai/ai-news-collector - Web: https://mule.run/skillshub/@@dnwdai/ai-news-collector~teams-distributor:20260127075930 --- --- name: teams-distributor description: | 生成したAIニュースレターをMicrosoft Teamsに自動配信するスキル。 Incoming WebhookまたはGraph APIを使用して、指定されたチャンネルに投稿します。 Adaptive Cards形式でリッチな表示が可能です。 このスキルは「Teamsに投稿して」「ニュースレターを配信して」といったプロンプトで呼び出されます。 --- # Teams Distributor スキル ## 概要 このスキルは、生成されたAIニュースレターをMicrosoft Teamsのチャンネルに自動配信します。 ## 配信方法 ### 1. Incoming Webhook(推奨) 最もシンプルな方法です。Teamsチャンネルに Incoming Webhook コネクタを設定し、そのURLにメッセージを送信します。 **メリット**: - 設定が簡単 - 追加の認証不要 - 即時利用可能 **制限**: - チャンネルごとにWebhook URLが必要 - 返信やインタラクションは不可 ### 2. Microsoft Graph API より高度な機能が必要な場合に使用します。 **メリット**: - 複数チャンネルへの投稿 - メッセージの編集・削除 - スレッド返信 - ユーザーメンション **必要な権限**: - `ChannelMessage.Send` - `Channel.ReadBasic.All` ## 使用方法 ### Webhookで投稿 ``` このニュースレターをTeamsに投稿して Webhook URL: https://outlook.office.com/webhook/xxx ``` ### チャンネル指定 ``` #ai-news チャンネルにニュースを投稿して ``` ### 定期投稿 ``` 毎朝9時にAIニュースを配信するよう設定して ``` ## Webhook設定手順 ### 1. Teams でWebhookを作成 1. Teamsで対象のチャンネルを開く 2. チャンネル名の横の「...」→「コネクタ」を選択 3. 「Incoming Webhook」を検索して追加 4. Webhook名を設定(例: "AI News Bot") 5. アイコンを設定(オプション) 6. 「作成」をクリック 7. 生成されたWebhook URLをコピー ### 2. 環境変数に設定 ```bash export TEAMS_WEBHOOK_URL="https://outlook.office.com/webhook/xxx" ``` ## メッセージ形式 ### シンプルテキスト プレーンテキストでの投稿: ```json { "text": "本日のAIニュースダイジェストです。\n\n1. OpenAIがGPT-5を発表..." } ``` ### Markdown Teamsは限定的なMarkdownをサポート: ```json { "text": "## 🤖 AI Daily Digest\n\n**ヘッドライン**: OpenAIがGPT-5を発表" } ``` ### Adaptive Cards(推奨) リッチなカード形式で表示: ```json { "type": "message", "attachments": [ { "contentType": "application/vnd.microsoft.card.adaptive", "content": { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.4", "body": [ { "type": "TextBlock", "text": "🤖 AI Daily Digest", "weight": "Bolder", "size": "Large" } ] } } ] } ``` ## スクリプト ### Webhook投稿 `scripts/teams_webhook.py` を使用: ```bash python scripts/teams_webhook.py --webhook-url $TEAMS_WEBHOOK_URL --file newsletter.md # または直接テキスト python scripts/teams_webhook.py --webhook-url $TEAMS_WEBHOOK_URL --text "テストメッセージ" # Adaptive Card形式 python scripts/teams_webhook.py --webhook-url $TEAMS_WEBHOOK_URL --file newsletter.json --format adaptive-card ``` ## Adaptive Card テンプレート ニュースレター用のAdaptive Cardテンプレート: ```json { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.4", "body": [ { "type": "Container", "style": "emphasis", "items": [ { "type": "ColumnSet", "columns": [ { "type": "Column", "width": "auto", "items": [ { "type": "TextBlock", "text": "🤖", "size": "Large" } ] }, { "type": "Column", "width": "stretch", "items": [ { "type": "TextBlock", "text": "AI Daily Digest", "weight": "Bolder", "size": "Large" }, { "type": "TextBlock", "text": "{{date}}", "isSubtle": true, "spacing": "None" } ] } ] } ] }, { "type": "Container", "items": [ { "type": "TextBlock", "text": "🔥 ヘッドライン", "weight": "Bolder", "size": "Medium" }, { "type": "FactSet", "facts": [ { "title": "{{headline_title}}", "value": "{{headline_summary}}" } ] } ] } ], "actions": [ { "type": "Action.OpenUrl", "title": "詳細を見る", "url": "{{detail_url}}" } ] } ``` ## 環境変数 | 変数名 | 説明 | 必須 | |--------|------|------| | `TEAMS_WEBHOOK_URL` | Incoming Webhook URL | Webhook使用時 | | `AZURE_CLIENT_ID` | Azure ADアプリケーションID | Graph API使用時 | | `AZURE_CLIENT_SECRET` | Azure ADクライアントシークレット | Graph API使用時 | | `AZURE_TENANT_ID` | Azure ADテナントID | Graph API使用時 | ## エラーハンドリング | エラーコード | 説明 | 対処法 | |-------------|------|--------| | 400 | リクエスト形式エラー | JSONペイロードを確認 | | 401 | 認証エラー | Webhook URLまたはトークンを確認 | | 429 | レート制限 | 投稿間隔を空ける | | 502/504 | Teamsサービスエラー | リトライ | ## 注意事項 - Webhook URLは機密情報として扱ってください - 1分あたりの投稿数に制限があります(約60件/分) - Adaptive Cards のサイズ上限は約28KB - 画像はURLで参照する必要があります(Base64埋め込み不可)