Microsoft Teams(プラグイン)
「ここに足を踏み入れる者は、すべての希望を捨てよ。」更新日: 2026-01-21 ステータス: テキスト + DM 添付ファイルはサポートされています。チャンネル/グループでのファイル送信には
sharePointSiteId + Graph 権限が必要です(グループチャットでのファイル送信 を参照)。投票は Adaptive Cards 経由で送信されます。 アンケートはアダプティブカードで送信されます。 アンケートはアダプティブカードで送信されます。
プラグインが必要
Microsoft Teams はプラグインとして提供され、コアインストールには含まれません。 破壊的変更(2026.1.15): MS Teams はコアから分離されました。使用する場合は、プラグインをインストールする必要があります。 それを使用する場合は、プラグインをインストールする必要があります。 それを使用する場合は、プラグインをインストールする必要があります。 理由: コアインストールを軽量に保ち、MS Teams 依存関係を独立して更新できるようにするためです。 CLI でインストール(npm レジストリ):クイックセットアップ(初心者向け)
- Microsoft Teams プラグインをインストールします。
- Azure Bot(App ID + クライアントシークレット + テナント ID)を作成します。
- それらの資格情報で OpenClaw を設定します。
/api/messages(デフォルトはポート 3978)を公開 URL またはトンネル経由で公開します。- Teams アプリパッケージをインストールし、ゲートウェイを起動します。
channels.msteams.groupPolicy: "allowlist")。グループ返信を許可するには channels.msteams.groupAllowFrom を設定してください(または、メンション必須で任意メンバーを許可する groupPolicy: "open" を使用します)。 グループの返信を許可するには、 channels.msteams.groupAllowFrom を設定します。(またはメンションされたメンバーを許可するには、 groupPolicy: "open" を使用します) グループの返信を許可するには、 channels.msteams.groupAllowFrom を設定します。(またはメンションされたメンバーを許可するには、 groupPolicy: "open" を使用します)
目標
- Teams の DM、グループチャット、またはチャンネル経由で OpenClaw と対話する。
- ルーティングを決定的に保つ: 返信は常に受信元のチャンネルに戻る。
- 安全なチャンネル動作をデフォルトにする(設定されていない限りメンション必須)。
設定の書き込み
デフォルトでは、Microsoft Teams は/config set|unset によってトリガーされる設定更新の書き込みを許可されています(commands.config: true が必要)。
無効化するには:
アクセス制御(DM + グループ)
DM アクセス- デフォルト:
channels.msteams.dmPolicy = "pairing"。不明な送信者は承認されるまで無視されます。 承認されるまで不明な送信者は無視されます。 承認されるまで不明な送信者は無視されます。 channels.msteams.allowFrom: allowlist for DM (AAD object ID, UPN, or display names). グラフへのアクセスが可能な場合、セットアップ時に名前をIDに変更します。
channels.msteams.teams.<teamId> .tools: チャンネル上書きがない場合に使用される、チームごとのデフォルトツールポリシー上書き(allow/deny/alsoAllow)。channels.msteams.groupAllowFromは、グループチャット/チャンネルでトリガーできる送信者を制御します(channels.msteams.allowFromにフォールバック)。- 任意メンバーを許可するには
groupPolicy: "open"を設定します(デフォルトでは引き続きメンション必須)。 - チャンネルを一切許可しない 場合は
channels.msteams.groupPolicy: "disabled"を設定します。
channels.msteams.teamsの下にチームとチャンネルを列挙して、グループ/チャンネル返信のスコープを制限します。- キーにはチーム ID または名前を使用できます。チャンネルキーには会話 ID または名前を使用できます。
groupPolicy="allowlist"が有効で、チーム許可リストが存在する場合、列挙されたチーム/チャンネルのみが受け付けられます(メンション必須)。- 設定ウィザードは
Team/Channelエントリを受け付け、保存します。 - 起動時、OpenClaw は(Graph 権限が許可されている場合)チーム/チャンネルおよびユーザー許可リストの名前を ID に解決し、マッピングをログに出力します。解決できないエントリは入力どおり保持されます。
How it works
- Microsoft Teams プラグインをインストールします。
- Azure Bot(App ID + シークレット + テナント ID)を作成します。
- ボットを参照し、以下の RSC 権限を含む Teams アプリパッケージ を作成します。
- Teams アプリをチームにアップロード/インストールします(DM の場合は個人スコープ)。
msteamsを~/.openclaw/openclaw.json(または環境変数)に設定し、ゲートウェイを起動します。- ゲートウェイは、デフォルトで
/api/messages上の Bot Framework Webhook トラフィックを待ち受けます。
Azure Bot セットアップ(前提条件)
OpenClaw を設定する前に、Azure Bot リソースを作成する必要があります。ステップ 1: Azure Bot を作成
- Create Azure Bot にアクセスします。
-
Basics タブを入力します。
フィールド 値 Bot handle ボット名(例: openclaw-msteams、一意である必要あり)Subscription Azure サブスクリプションを選択 Resource group 新規作成または既存を使用 Pricing tier 開発/テスト用に Free Type of App Single Tenant(推奨、下記注記参照) Creation type Create new Microsoft App ID
廃止通知: マルチテナントボットの作成は2025-07-31以降推奨されませんでした。 非推奨のお知らせ: 新規のマルチテナントボットの作成は 2025-07-31 以降非推奨です。新規ボットには Single Tenant を使用してください。 非推奨のお知らせ: 新規のマルチテナントボットの作成は 2025-07-31 以降非推奨です。新規ボットには Single Tenant を使用してください。
- Review + create → Create をクリックします(約 1~2 分待機)。
ステップ 2: 資格情報を取得
- Azure Bot リソース → Configuration に移動します。
- Microsoft App ID をコピーします。これが
appIdです。 - Manage Password をクリックし、App Registration に移動します。
- Certificates & secrets → New client secret → Value をコピーします。これが
appPasswordです。 - Overview → Directory (tenant) ID をコピーします。これが
tenantIdです。
ステップ 3: メッセージングエンドポイントを設定
- Azure Bot → Configuration
- Messaging endpoint に Webhook URL を設定します。
- 本番:
https://your-domain.com/api/messages - ローカル開発: トンネルを使用します(下記 ローカル開発 を参照)。
- 本番:
ステップ 4: Teams チャンネルを有効化
- Azure Bot → Channels
- Microsoft Teams → Configure → Save
- 利用規約に同意する
ローカル開発(トンネリング)
Teams はlocalhost に到達できません。ローカル開発にはトンネルを使用します。 地域開発のためにトンネルを使用してください: 地域開発のためにトンネルを使用してください:
オプション A: ngrok
Teams Developer Portal(代替手段)
マニフェスト ZIP を手動で作成する代わりに、Teams Developer Portal を使用できます。- + New app をクリックします。
- 基本情報(名前、説明、開発者情報)を入力します。
- App features → Bot に移動します。
- Enter a bot ID manually を選択し、Azure Bot の App ID を貼り付けます。
- スコープを選択します: Personal, Team, Group Chat
- Distribute → Download app package をクリックします。
- Teams で Apps → Manage your apps → Upload a custom app → ZIP を選択します。
ボットのテスト
オプション A: Azure Web Chat(Webhook の事前確認)- Azure Portal → Azure Bot リソース → Test in Web Chat
- メッセージを送信し、応答が返ることを確認します。
- これにより、Teams 設定前に Webhook エンドポイントが動作していることを確認できます。
- Teams アプリをインストールします(サイドロードまたは組織カタログ)。
- Teams でボットを見つけ、DM を送信します。
- ゲートウェイログで受信アクティビティを確認します。
セットアップ(最小・テキストのみ)
-
Microsoft Teams プラグインをインストール
- npm から:
openclaw plugins install @openclaw/msteams - ローカルチェックアウトから:
openclaw plugins install ./extensions/msteams
- npm から:
-
ボット登録
- Azure Bot を作成し(上記参照)、以下を控えます。
- App ID
- クライアントシークレット(App パスワード)
- テナント ID(シングルテナント)
- Azure Bot を作成し(上記参照)、以下を控えます。
-
Teams アプリマニフェスト
botId = <App ID>を含むbotエントリを追加します。- スコープ:
personal,team,groupChat。 supportsFiles: true(個人スコープのファイル処理に必須)。- RSC 権限を追加します(下記)。
- アイコンを作成します:
outline.png(32x32)およびcolor.png(192x192)。 - 3 つのファイルを ZIP 化します:
manifest.json,outline.png,color.png。
-
OpenClaw を設定
設定キーの代わりに環境変数を使用することもできます。
MSTEAMS_APP_IDMSTEAMS_APP_PASSWORDMSTEAMS_TENANT_ID
-
ボットエンドポイント
- Azure Bot の Messaging Endpoint を以下に設定します。
https://<host>:3978/api/messages(または任意のパス/ポート)。
- Azure Bot の Messaging Endpoint を以下に設定します。
-
ゲートウェイを実行
- プラグインがインストールされ、資格情報を含む
msteams設定が存在する場合、Teams チャンネルは自動的に起動します。
- プラグインがインストールされ、資格情報を含む
履歴コンテキスト
channels.msteams.historyLimitは、最近のチャンネル/グループメッセージをプロンプトに含める数を制御します。messages.groupChat.historyLimitにフォールバックします。無効化するには0を設定します(デフォルト 50)。0を無効にします(デフォルトは50)。0を無効にします(デフォルトは50)。- DM 履歴は
channels.msteams.dmHistoryLimit(ユーザーターン)で制限できます。ユーザーごとの上書き:channels.msteams.dms["<user_id>"].historyLimit。channels.imessage.dmHistoryLimit: ユーザー ターン数での DM 履歴上限。ユーザーごとの上書き:channels.msteams.dms["<user_id>"].historyLimit。channels.imessage.dmHistoryLimit: ユーザー ターン数での DM 履歴上限。ユーザーごとの上書き:channels.msteams.dms["<user_id>"].historyLimit。
現在の Teams RSC 権限(マニフェスト)
これらは Teams アプリマニフェスト内の 既存の resourceSpecific 権限 です。アプリがインストールされているチーム/チャット内でのみ適用されます。 これらは Teams アプリマニフェスト内の 既存の resourceSpecific 権限 です。アプリがインストールされているチーム/チャット内でのみ適用されます。 アプリがインストールされているチーム/チャット内でのみ適用されます。 チャンネル(チームスコープ):ChannelMessage.Read.Group(Application)- @mention なしで全チャンネルメッセージを受信ChannelMessage.Send.Group(Application)Member.Read.Group(Application)Owner.Read.Group(Application)ChannelSettings.Read.Group(Application)TeamMember.Read.Group(Application)TeamSettings.Read.Group(Application)
ChatMessage.Read.Chat(Application)- @mention なしで全グループチャットメッセージを受信
Teams マニフェスト例(要約)
必須フィールドを含む最小で有効な例です。ID と URL を置き換えてください。 必須フィールドを含む最小で有効な例です。ID と URL を置き換えてください。 IDとURLを置き換えます。マニフェストの注意点(必須項目)
bots[].botIdは Azure Bot の App ID と 一致する必要があります。webApplicationInfo.idは Azure Bot の App ID と 一致する必要があります。bots[].scopesには使用予定のサーフェス(personal,team,groupChat)を含める必要があります。bots[].supportsFiles: trueは個人スコープでのファイル処理に必須です。- チャンネルトラフィックを扱う場合、
authorization.permissions.resourceSpecificにはチャンネルの read/send を含める必要があります。
既存アプリの更新
既にインストールされている Teams アプリを更新する場合(例: RSC 権限の追加):- 新しい設定で
manifest.jsonを更新します。 versionフィールドをインクリメント します(例:1.0.0→1.1.0)。- アイコンとともに 再 ZIP します(
manifest.json,outline.png,color.png)。 - 新しい ZIP をアップロードします。
- オプション A(Teams Admin Center): Teams Admin Center → Teams apps → Manage apps → 対象アプリ → Upload new version
- オプション B(サイドロード): Teams → Apps → Manage your apps → Upload a custom app
- チームチャンネルの場合: 新しい権限を有効にするため、各チームでアプリを再インストールします。
- Teams を完全に終了して再起動 します(ウィンドウを閉じるだけでは不可)。
機能: RSC のみ vs Graph
Teams RSC のみ(アプリがインストール済み、Graph API 権限なし)
動作するもの:- チャンネルメッセージの テキスト 読み取り。
- チャンネルメッセージの テキスト 送信。
- 個人(DM) のファイル添付の受信。
- チャンネル/グループの 画像やファイル内容(ペイロードには HTML スタブのみ)。
- SharePoint/OneDrive に保存された添付ファイルのダウンロード。
- メッセージ履歴の読み取り(ライブ Webhook イベント以外)。
Teams RSC + Microsoft Graph Application 権限
追加される機能:- メッセージに貼り付けられたホスト済みコンテンツ(画像)のダウンロード。
- SharePoint/OneDrive に保存されたファイル添付のダウンロード。
- Graph 経由でのチャンネル/チャットのメッセージ履歴読み取り。
RSC と Graph API の比較
| Capability | RSC 権限 | Graph API |
|---|---|---|
| リアルタイムメッセージ | はい(Webhook) | いいえ(ポーリングのみ) |
| 履歴メッセージ | いいえ | はい(履歴をクエリ可能) |
| セットアップの複雑さ | アプリマニフェストのみ | 管理者同意 + トークンフローが必要 |
| オフライン動作 | いいえ(常時実行が必要) | はい(いつでもクエリ可能) |
ChannelMessage.Read.All を含む Graph API が必要です。 オフラインで失敗したメッセージに追加するには、Graph APIにChannelMessage.Read.Allが必要です(管理者の同意が必要です)。 オフラインで失敗したメッセージに追加するには、Graph APIにChannelMessage.Read.Allが必要です(管理者の同意が必要です)。
Graph 有効のメディア + 履歴(チャンネルに必須)
チャンネルで画像/ファイルが必要、または メッセージ履歴 を取得したい場合は、Microsoft Graph 権限を有効化し、管理者同意を付与する必要があります。- Entra ID(Azure AD)の App Registration で Microsoft Graph Application 権限 を追加します。
ChannelMessage.Read.All(チャンネル添付 + 履歴)Chat.Read.AllまたはChatMessage.Read.All(グループチャット)
- テナントに対して 管理者同意 を付与します。
- Teams アプリの マニフェストバージョン を上げ、再アップロードし、Teams でアプリを再インストール します。
- Teams を完全に終了して再起動 し、キャッシュされたアプリメタデータをクリアします。
User.Read.All(Application)権限を追加し、管理者の同意を付与してください。
既知の制限
Webhook タイムアウト
Teams は HTTP Webhook 経由でメッセージを配信します。処理に時間がかかりすぎる場合(例: LLM 応答が遅い場合)、以下が発生する可能性があります。 処理に時間がかかりすぎる場合(例:遅いLLM応答)、次のようになります。 処理に時間がかかりすぎる場合(例:遅いLLM応答)、次のようになります。- ゲートウェイのタイムアウト
- Teams によるメッセージの再試行(重複の原因)
- 返信の欠落
書式
Teams の Markdown は Slack や Discord より制限があります。- 基本的な書式は動作します: 太字, 斜体,
code, リンク - 複雑な Markdown(表、ネストされたリスト)は正しく表示されない場合があります。
- 投票や任意のカード送信には Adaptive Cards がサポートされています(下記参照)。
設定
主要設定(共有チャンネルパターンは/gateway/configuration を参照):
channels.msteams.enabled: チャンネルの有効/無効。channels.msteams.appId,channels.msteams.appPassword,channels.msteams.tenantId: ボット資格情報。channels.msteams.webhook.port(デフォルト3978)channels.msteams.webhook.path(デフォルト/api/messages)channels.msteams.dmPolicy:pairing | allowlist | open | disabled(デフォルト: pairing)channels.msteams.allowFrom: allowlist for DM (AAD object ID, UPN, or display names). グラフへのアクセスが可能な場合、セットアップ時に名前をIDに変更します。channels.msteams.textChunkLimit: 送信テキストのチャンクサイズ。channels.msteams.chunkMode:length(デフォルト)またはnewlineを使用して、長さ分割前に空行(段落境界)で分割します。channels.msteams.mediaAllowHosts: 受信添付のホスト許可リスト(デフォルトは Microsoft/Teams ドメイン)。channels.msteams.mediaAuthAllowHosts: メディア再試行時に Authorization ヘッダーを付与するホストの許可リスト(デフォルトは Graph + Bot Framework ホスト)。channels.msteams.requireMention: チャンネル/グループでの @mention を必須にする(デフォルト true)。channels.msteams.replyStyle:thread | top-level(返信スタイル を参照)。channels.msteams.teams.<teamId>.replyStyle: チームごとの上書き。channels.msteams.teams.<teamId>.requireMention: チームごとの上書き。channels.msteams.teams.<teamId>.toolsBySender: チームごとの送信者別ツールポリシー上書き("*"ワイルドカード対応)。channels.msteams.teams.<teamId>.toolsBySender: デフォルトでチームごとに送信者ごとのツールポリシーが上書きされます ("*"ワイルドカードがサポートされています)。channels.msteams.teams.<teamId>.channels.<conversationId>.replyStyle: チャンネルごとの上書き。channels.msteams.teams.<teamId>.channels.<conversationId>.requireMention: チャンネルごとの上書き。channels.msteams.teams.<teamId>.channels.<conversationId>.tools: チャンネルごとのツールポリシー上書き(allow/deny/alsoAllow)。channels.msteams.teams.<teamId>.channels.<conversationId>.toolsBySender: チャンネルごとの送信者別ツールポリシー上書き("*"ワイルドカード対応)。channels.msteams.sharePointSiteId: グループチャット/チャンネルでのファイルアップロード用 SharePoint サイト ID(グループチャットでのファイル送信 を参照)。
ルーティングとセッション
- セッションキーは標準のエージェント形式に従います(/concepts/session を参照)。
- ダイレクトメッセージはメインセッション(
agent:<agentId>:<mainKey>)を共有します。 - チャンネル/グループメッセージは会話 ID を使用します。
agent:<agentId>:msteams:channel:<conversationId>agent:<agentId>:msteams:group:<conversationId>
- ダイレクトメッセージはメインセッション(
返信スタイル: Threads vs Posts
Teams では、同一の基盤データモデル上で 2 種類のチャンネル UI スタイルが導入されています。| スタイル | 説明 | 推奨 replyStyle |
|---|---|---|
| Posts(クラシック) | メッセージがカードとして表示され、下にスレッド返信が付く | thread(デフォルト) |
| Threads(Slack 風) | メッセージが直線的に流れ、Slack に近い表示 | top-level |
replyStyle を使用すると: replyStyle が間違っている場合: replyStyle が間違っている場合:
- Threads スタイルのチャンネルで
thread→ 返信が不自然にネストされます。 - Posts スタイルのチャンネルで
top-level→ 返信がスレッドではなくトップレベル投稿として表示されます。
replyStyle を設定します。
添付ファイルと画像
現在の制限:- DM: Teams ボットのファイル API を介して画像およびファイル添付が動作します。
- チャンネル/グループ: 添付は M365 ストレージ(SharePoint/OneDrive)に保存されます。Webhook ペイロードには HTML スタブのみが含まれ、実際のファイルバイトは含まれません。Graph API 権限が必要 です。 Webhookペイロードは実際のファイルバイトではなく、HTMLスタブのみを含んでいます。 チャンネル添付ファイルをダウンロードするにはGraph APIの権限が必要です。
channels.msteams.mediaAllowHosts で上書きします(["*"]を使用してホストを許可します)。
認証ヘッダは channels.msteams.mediaAuthAllowHosts のホストに対してのみ付与されます(デフォルトはGraph+Botフレームワークホストです)。 このリストを厳密に保つ(マルチテナントのサフィックスは避ける)。
グループチャットでのファイル送信
ボットは FileConsentCard フロー(組み込み)を使用して DM でファイルを送信できます。ただし、グループチャット/チャンネルでのファイル送信 には追加設定が必要です。 しかし、グループチャット/チャンネルにファイルを送信するには追加の設定が必要です。 しかし、グループチャット/チャンネルにファイルを送信するには追加の設定が必要です。| コンテキスト | ファイル送信方法 | 必要な設定 |
|---|---|---|
| DM | FileConsentCard → ユーザー承認 → ボットがアップロード | 箱の外側の作品 |
| グループチャット/チャンネル | SharePoint にアップロード → 共有リンク送信 | sharePointSiteId + Graph 権限が必要 |
| 画像(任意のコンテキスト) | Base64 エンコードでインライン | 箱の外側の作品 |
グループチャットで SharePoint が必要な理由
ボットには個人用 OneDrive ドライブがありません(/me/drive Graph API エンドポイントはアプリケーション ID では動作しません)。グループチャット/チャンネルでファイルを送信するには、ボットが SharePoint サイト にアップロードし、共有リンクを作成します。 グループチャット/チャンネルのファイルを送信するには、ボットが SharePoint サイト にアップロードし、共有リンクを作成します。 グループチャット/チャンネルのファイルを送信するには、ボットが SharePoint サイト にアップロードし、共有リンクを作成します。
セットアップ
-
Entra ID(Azure AD)→ App Registration で Graph API 権限 を追加します。
Sites.ReadWrite.All(Application)- SharePoint へのファイルアップロードChat.Read.All(Application)- 任意、ユーザー単位の共有リンクを有効化
- テナントに 管理者同意 を付与します。
-
SharePoint サイト ID を取得します。
-
OpenClaw を設定します。
共有動作
| 権限 | 共有動作 |
|---|---|
Sites.ReadWrite.All のみ | 組織全体共有リンク(組織内の誰でもアクセス可能) |
Sites.ReadWrite.All + Chat.Read.All | ユーザー単位共有リンク(チャット参加者のみアクセス可能) |
Chat.Read.All 権限がない場合、ボットは組織全体共有にフォールバックします。 ユーザー単位共有の方が、チャット参加者のみがファイルにアクセスできるため安全です。Chat.Read.All 権限がない場合、ボットは組織全体共有にフォールバックします。 Chat.Read.All 権限がない場合、ボットは組織全体の共有に戻ります。
フォールバック動作
| シナリオ | 結果 |
|---|---|
グループチャット + ファイル + sharePointSiteId 設定済み | SharePoint にアップロードし、共有リンク送信 |
グループチャット + ファイル + sharePointSiteId なし | OneDrive アップロードを試行(失敗する場合あり)、テキストのみ送信 |
| 個人チャット + ファイル | FileConsentCard フロー(SharePoint 不要) |
| 任意のコンテキスト + 画像 | Base64 エンコードでインライン(SharePoint 不要) |
ファイルの保存場所
アップロードされたファイルは、設定された SharePoint サイトの既定ドキュメントライブラリ内の/OpenClawShared/ フォルダーに保存されます。
投票(Adaptive Cards)
OpenClaw は Teams の投票を Adaptive Cards として送信します(ネイティブの Teams 投票 API はありません)。- CLI:
openclaw message poll --channel msteams --target conversation:<id> ... - 投票結果はゲートウェイによって
~/.openclaw/msteams-polls.jsonに記録されます。 - 投票を記録するため、ゲートウェイはオンラインである必要があります。
- 投票結果の自動サマリー投稿は未対応です(必要に応じてストアファイルを確認してください)。
Adaptive Cards(任意)
message ツールまたは CLI を使用して、任意の Adaptive Card JSON を Teams ユーザーまたは会話に送信できます。
card パラメータは Adaptive Card の JSON オブジェクトを受け取ります。card が指定されている場合、メッセージテキストは省略可能です。 cardを指定すると、メッセージテキストはオプションです。 cardを指定すると、メッセージテキストはオプションです。
エージェントツール:
ターゲット形式
MSTeams のターゲットは、ユーザーと会話を区別するためにプレフィックスを使用します。| ターゲット種別 | 形式 | 例 |
|---|---|---|
| ユーザー(ID 指定) | user:<aad-object-id> | user:40a1a0ed-4ff2-4164-a219-55518990c197 |
| ユーザー(名前指定) | user:<display-name> | user:John Smith(Graph API が必要) |
| グループ/チャンネル | conversation:<conversation-id> | conversation:19:[email protected] |
| グループ/チャンネル(raw) | <conversation-id> | 19:[email protected](@thread を含む場合) |
user: プレフィックスがない場合、名前はグループ/チーム解決がデフォルトになります。表示名で人を指定する場合は、常に user: を使用してください。 表示名で人をターゲットにするときは常にuserを使います。 表示名で人をターゲットにするときは常にuserを使います。
プロアクティブメッセージング
- プロアクティブメッセージは、ユーザーが 一度でも対話した後 にのみ可能です。その時点で会話参照を保存します。
dmPolicyと許可リスト制御については/gateway/configurationを参照してください。
チーム ID とチャンネル ID(よくある落とし穴)
Teams URL のgroupId クエリパラメータは、設定で使用するチーム ID ではありません。URL パスから ID を抽出してください。 代わりにURLパスからIDを抽出: 代わりにURLパスからIDを抽出:
チーム URL:
- チーム ID =
/team/の後のパスセグメント(URL デコード、例:19:[email protected]) - チャンネル ID =
/channel/の後のパスセグメント(URL デコード) groupIdクエリパラメータは 無視 してください。
プライベートチャンネル
ボットのプライベートチャンネル対応には制限があります。| 機能 | 標準チャンネル | プライベートチャンネル |
|---|---|---|
| ボットのインストール | はい | 制限あり |
| リアルタイムメッセージ(Webhook) | はい | 動作しない場合あり |
| RSC 権限 | はい | 挙動が異なる場合あり |
| @mentions | はい | ボットがアクセス可能な場合 |
| Graph API 履歴 | はい | 可(権限が必要) |
- ボットとのやり取りには標準チャンネルを使用します。
- DM を使用します(ユーザーは常にボットに直接メッセージできます)。
- 履歴アクセスには Graph API を使用します(
ChannelMessage.Read.Allが必要)。
よくある問題
トラブルシューティング
- チャンネルで画像が表示されない: Graph 権限または管理者同意が不足しています。Teams アプリを再インストールし、Teams を完全に終了/再起動してください。 Teamsアプリを再インストールし、チームを完全に終了/再開します。
- チャンネルで応答がない: デフォルトではメンションが必須です。
channels.msteams.requireMention=falseを設定するか、チーム/チャンネルごとに設定してください。 - バージョン不一致(Teams が古いマニフェストを表示): アプリを削除して再追加し、Teams を完全に終了して更新してください。
- Webhook から 401 Unauthorized: Azure JWT なしで手動テストした場合に想定される挙動です。エンドポイント到達は確認できていますが、認証に失敗しています。Azure Web Chat を使用して正しくテストしてください。 Azure Web Chat を使用して適切なテストを行います。 Azure Web Chat を使用して適切なテストを行います。
マニフェストアップロードエラー
- 「Icon file cannot be empty」: マニフェストが 0 バイトのアイコンファイルを参照しています。有効な PNG アイコンを作成してください(
outline.png用 32x32、color.png用 192x192)。 有効な PNG アイコン (outline.pngは 32x32 、color.pngは 192x192 です) を作成します。 有効な PNG アイコン (outline.pngは 32x32 、color.pngは 192x192 です) を作成します。 - 「webApplicationInfo.Id already in use」: アプリが別のチーム/チャットにまだインストールされています。先にアンインストールするか、反映まで 5~10 分待ってください。 最初にそれを見つけてアンインストールするか、伝播のために5-10分待ってください。 最初にそれを見つけてアンインストールするか、伝播のために5-10分待ってください。
- アップロード時に「Something went wrong」: 代わりに https://admin.teams.microsoft.com からアップロードし、ブラウザの DevTools(F12)→ Network タブでレスポンス本文の実際のエラーを確認してください。
- サイドロード失敗: 「Upload a custom app」ではなく「Upload an app to your org’s app catalog」を試してください。制限を回避できることがあります。
RSC 権限が動作しない場合
webApplicationInfo.idがボットの App ID と完全一致していることを確認します。- アプリを再アップロードし、チーム/チャットに再インストールします。
- 組織管理者が RSC 権限をブロックしていないか確認します。
- 正しいスコープを使用していることを確認します。チームは
ChannelMessage.Read.Group、グループチャットはChatMessage.Read.Chat。
参考資料
- Create Azure Bot - Azure Bot セットアップガイド
- Teams Developer Portal - Teams アプリの作成/管理
- Teams app manifest schema
- Receive channel messages with RSC
- RSC permissions reference
- Teams bot file handling(チャンネル/グループには Graph が必要)
- Proactive messaging