メッセージングプラットフォーム
Microsoft Teams
「ここに入る者は一切の希望を捨てよ」
更新日: 2026-01-21 ステータス: テキスト + DM 添付ファイルはサポート済み。チャネル/グループでのファイル送信には sharePointSiteId + Graph 権限が必要(グループチャットでのファイル送信 を参照)。投票は Adaptive Cards 経由で送信されます。
必要なプラグイン
Microsoft Teams はプラグインとして提供され、コアインストールにはバンドルされていません。破壊的変更 (2026.1.15): MS Teams はコアから移動しました。使用する場合は、プラグインをインストールする必要があります。説明: コアインストールを軽量に保ち、MS Teams の依存関係を独立して更新できるようにするためです。CLI (npm レジストリ) 経由でインストール:
openclaw plugins install @openclaw/msteams
ローカルチェックアウト (git リポジトリから実行する場合):
openclaw plugins install ./extensions/msteams
configure/オンボーディング中に Teams を選択し、git チェックアウトが検出された場合、OpenClaw は自動的にローカルインストールパスを提供します。詳細: プラグイン
クイックセットアップ (初心者向け)
- Microsoft Teams プラグインをインストールします。
- Azure Bot (アプリ ID + クライアントシークレット + テナント ID) を作成します。
- これらの認証情報で OpenClaw を設定します。
/api/messages(デフォルトはポート 3978) を公開 URL またはトンネル経由で公開します。- Teams アプリパッケージをインストールし、ゲートウェイを起動します。
最小構成:
{
channels: {
msteams: {
enabled: true,
appId: "<APP_ID>",
appPassword: "<APP_PASSWORD>",
tenantId: "<TENANT_ID>",
webhook: { port: 3978, path: "/api/messages" },
},
},
}
注: グループチャットはデフォルトでブロックされます (channels.msteams.groupPolicy: "allowlist")。グループ返信を許可するには、channels.msteams.groupAllowFrom を設定します (または groupPolicy: "open" を使用して、メンションゲートされた任意のメンバーを許可します)。
目標
- Teams DM、グループチャット、またはチャネル経由で OpenClaw と会話します。
- ルーティングを確定的に保つ: 返信は常に到着したチャネルに戻ります。
- 安全なチャネル動作をデフォルトとする (設定しない限りメンションが必要)。
設定書き込み
デフォルトでは、Microsoft Teams は /config set|unset によってトリガーされる設定更新の書き込みを許可します (commands.config: true が必要)。無効にするには:
{
channels: { msteams: { configWrites: false } },
}
アクセス制御 (DM + グループ)
DM アクセス
- デフォルト:
channels.msteams.dmPolicy = "pairing"。未知の送信者は承認されるまで無視されます。 channels.msteams.allowFromは安定した AAD オブジェクト ID を使用する必要があります。- UPN/表示名は変更可能です 。直接マッチングはデフォルトで無効化されており、
channels.msteams.dangerouslyAllowNameMatching: trueでのみ有効になります。 - ウィザードは、認証情報が許可する場合、Microsoft Graph 経由で名前を ID に解決できます。
グループアクセス
- デフォルト:
channels.msteams.groupPolicy = "allowlist"(groupAllowFromを追加しない限りブロックされます)。未設定時のデフォルトを上書きするにはchannels.defaults.groupPolicyを使用します。 channels.msteams.groupAllowFromは、グループチャット/チャネルでトリガーできる送信者を制御します (channels.msteams.allowFromにフォールバック)。groupPolicy: "open"を設定すると、任意のメンバーを許可します (デフォルトでは依然としてメンションゲートされます)。- チャネルを一切許可しない 場合は、
channels.msteams.groupPolicy: "disabled"を設定します。
例:
{
channels: {
msteams: {
groupPolicy: "allowlist",
groupAllowFrom: ["user@org.com"],
},
},
}
Teams + チャネル許可リスト
channels.msteams.teamsの下にチームとチャネルをリストすることで、グループ/チ ャネル返信のスコープを制限します。- キーはチーム ID または名前です。チャネルキーは会話 ID または名前です。
groupPolicy="allowlist"でチーム許可リストが存在する場合、リストされたチーム/チャネルのみが受け入れられます (メンションゲート)。- 設定ウィザードは
Team/Channelエントリを受け入れ、保存します。 - 起動時、OpenClaw はチーム/チャネルおよびユーザー許可リストの名前を ID に解決します (Graph 権限が許可する場合) し、マッピングをログに記録します。解決できないエントリは入力されたまま保持されます。
例:
{
channels: {
msteams: {
groupPolicy: "allowlist",
teams: {
"My Team": {
channels: {
General: { requireMention: true },
},
},
},
},
},
}
仕組み
- Microsoft Teams プラグインをインストールします。
- Azure Bot (アプリ ID + シークレット + テナント ID) を作成します。
- ボットを参照し、以下の RSC 権限を含む Teams アプリパッケージ を構築します。
- Teams アプリをチーム (または DM 用の個人スコープ) にアップロード/インストールします。
~/.openclaw/openclaw.json(または環境変数) でmsteamsを設定し、ゲ ートウェイを起動します。- ゲートウェイは、デフォルトで
/api/messagesで Bot Framework の Webhook トラフィックをリッスンします。
Azure Bot セットアップ (前提条件)
OpenClaw を設定する前に、Azure Bot リソースを作成する必要があります。
ステップ 1: Azure Bot の作成
-
Azure Bot の作成 に移動します。
-
基本 タブを入力します:
フィールド 値 ボットハンドル ボット名、例: openclaw-msteams(一意である必要があります)サブスクリプション Azure サブスクリプションを選択 リソースグループ 新規作成または既存のものを使用 価格レベル 開発/テスト用は Free アプリの種類 シングルテナント (推奨 - 以下の注記を参照) 作成タイプ 新しい Microsoft アプリ ID を作成
非推奨通知: 新しいマルチテナントボットの作成は 2025-07-31 以降非推奨となりました。新しいボットには シングルテナント を使用してください。
- レビュー + 作成 → 作成 をクリックします (約 1-2 分待機)
ステップ 2: 認証情報の取得
- Azure Bot リソース → 構成 に移動します。
- Microsoft アプリ ID をコピー → これが
appIdです。 - パスワードの管理 をクリック → アプリ登録に移動します。
- 証明書とシークレット → 新しいクライアントシークレット → 値 をコピー → これが
appPasswordです。 - 概要 → ディレクトリ (テナント) ID をコピー → これが
tenantIdです。
ステップ 3: メッセージングエンドポイントの設定
- Azure Bot → 構成 で、
- メッセージングエンドポイント を Webhook URL に設定します:
- 本番環境:
https://your-domain.com/api/messages - ローカル開発: トンネルを使用します (以下の ローカル開発 (トンネリング) を参照)
- 本番環境:
ステップ 4: Teams チャネルの有効化
- Azure Bot → チャネル で、
- Microsoft Teams → 構成 → 保存 をクリックします。
- 利用規約に同意します。
ローカル開発 (トンネリング)
Teams は localhost に到達できません。ローカル開発にはトンネルを使用します: オプション A: ngrok
ngrok http 3978
# https URL をコピー、例: https://abc123.ngrok.io
# メッセージングエンドポイントを設定: https://abc123.ngrok.io/api/messages
オプション B: Tailscale Funnel
tailscale funnel 3978
# Tailscale funnel URL をメッセージングエンドポイントとして使用
Teams デベロッパーポータル (代替方法)
マニフェスト ZIP を手動で作成する代わりに、Teams デベロッパーポータル を使用できます:
- + 新しいアプリ をクリックします。
- 基本情報 (名前、説明、開発者情報) を入力します。
- アプリ機能 → ボット に移動します。
- ボット ID を手動で入力 を選択し、Azure Bot アプリ ID を貼り付けます。
- スコープを確認: 個人用、チーム、グループチャット。
- 配布 → アプリパッケージのダウンロード をクリックします。
- Teams で: アプリ → アプリの管理 → カスタムアプリをアップロード → ZIP を選択します。
これは JSON マニフェストを手動で編集するよりも簡単なことが多いです。
ボットのテスト
オプション A: Azure Web Chat (まず Webhook を確認)
- Azure Portal → Azure Bot リソース → Web チャットでテスト で、
- メッセージを送信 - 応答が表示されるはずです。
- これにより、Teams セットアップ前に Webhook エンドポイントが機能していることが確認されます。
オプション B: Teams (アプリインストール後)
- Teams アプリをインストールします (サイドロードまたは組織カタログ)。
- Teams でボットを見つけ、DM を送信します。
- 受信アクティビティのゲートウェイログを確認します。