1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Microsoft TeamsのプライベートチームにAI社員を召喚するときの躓きのお話

1
Last updated at Posted at 2026-06-01

Microsoft Teams のプライベートチャンネルで bot がうまく動かない問題 — 2026 年時点の仕様と現実解

はじめに

この記事は、複数 bot を Hermes Agent の profile 単位で独立運用する構成(Hermes Agent で bot ごとに LLM プロバイダを切替える — Ollama × OpenRouter 混在運用)の派生トピックです。bot を Teams に出す段で踏んだ罠を独立させたものですが、Teams 部分は Hermes 非依存なので、Hermes を使っていない方にもそのまま読めます。

manifest の設定はすべて正しいはずなのに、Microsoft Teams のプライベートチャンネルでだけ bot が「いないことになる」。半日溶かして調べた結果わかったのは、これは自分のミスではなく、Teams 側がこの領域でちょうど仕様移行の最中だった、ということだ。

しかもこの領域は 2025 年後半〜2026 年にかけて一気に動いていて、「private channel では bot は絶対に使えない」という古い理解も、「もう public developer preview だから使える」という新しい理解も、どちらも片面しか見ていない。実態は 「preview として提供されてはいるが、本番ロールアウトは停止中」 という宙ぶらりんな状態にある。

同じ罠を踏んだ人のために、2026 年時点の正確な状況と、本番で確実に運用するための現実解を整理しておく。


1. 一行サマリ

Microsoft Teams の private channel で bot を動かす話は、2026 年時点で仕様移行中。公式ドキュメント上は private channel 対応が public developer preview として提供され、bot / tab apps も対象になっている。ただし tenant / manifest / rollout 状況によっては、sideload bot が表示されない、またはメッセージイベントが届かないことがある。さらに private channel アプリ対応の本番ロールアウトは 2026 年 3 月時点で一時停止されている(Message Center MC1197145)。

本番で確実に運用するなら、「プライベートチーム」の「標準チャンネル」を使うのが現実解。これは Hermes 固有の話ではなく Teams 側の事情だ。


2. Teams の会話スコープと bot 挙動(2026 年時点)

スコープ bot install @mention 備考
Personal chat (1:1 DM) ❌ 不要(DM = bot 宛確定) 一番素直
Group chat 通常は必要。RSC で不要化可 ChatMessage.Read.Chat 対象
Standard channel (in a team) 通常は必要。RSC で不要化可 本番運用で一番安定。 host team に install した app がそのまま使える
Shared channel ⚠️ 対応済み(GA) 構成次第 app support は GA(一般展開 2026/1 中旬)。ただし app は各チャンネルに個別追加が必要、外部ユーザー制御に注意
Private channel ⚠️ preview / rollout 停止中 構成次第 app support は public developer preview。本番ロールアウトは 2026/3 に一時停止。tenant / rollout / RSC / event delivery の検証必須

ここで重要な仕様変更が一つある。standard channel では host team に install した app が channel でそのまま使えるのに対し、shared / private channel では「app を各チャンネルに明示的に追加する」必要がある。チームレベルの install は shared / private には適用されない、というモデルに変わった。記事を書く・運用する上で、この差分を押さえておくとハマりにくい。

@mention について補足。通常の group / channel bot は @mention された時だけメッセージを受け取るが、RSC(ChannelMessage.Read.Group / ChatMessage.Read.Chat)を付与すると @mention なしで会話メッセージを受け取れる。なので group chat も「絶対 @mention 必須」ではなく「通常は必須、RSC で不要化可」が正確。


3. プライベートチャンネルで何が起きるか(実測 / 2025 年時点)

ここで書くのは、private channel app support が preview として降りてくる前、あるいは preview が tenant に届いていない環境での挙動だ。

期待した挙動

  • チームに bot install → そのチームの全 channel(private 含む)で @bot 候補が出る

実際の挙動

  • 通常チャンネル(例:「一般」)で @ 打つ → bot 名出る ✅
  • プライベートチャンネルで @ 打つ → bot 名出ない ❌
  • プライベートチャンネルの「+」(アプリ追加)→ bot が検索結果に出ない ❌
  • チャンネル設定 → アプリ → アプリを追加 → bot 候補なし ❌

つまり「同じチームに居るのに、プライベートチャンネルでだけ存在しないことになる」。

実際にインストールを強行しようとすると、こういうエラー文言が出るケースも報告されている:

App isn't supported in the private channel. Select another channel.


4. 原因 — manifest の問題ではなく、Teams 側の rollout 状況

マニフェストでの宣言は満たしていたつもりだった

bot manifest 側は、private channel 対応の宣言を入れていた。

{
  "supportedChannelTypes": ["sharedChannels", "privateChannels"],
  "bots": [{
    "botId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "scopes": ["personal", "team", "groupChat"]
  }],
  "authorization": {
    "permissions": {
      "resourceSpecific": [
        {"type": "Application", "name": "ChannelMessage.Read.Group"}
      ]
    }
  }
}

それでも UI 上には出なかった。

ここで誤解しやすいのが supportedChannelTypes の役割だ。

⚠️ supportedChannelTypes だけでは bot は private channel に出ない。
2025 年時点の Microsoft Q&A では、private / shared channel で supportedChannelTypes が効くのはタブのみで、bot や messaging extension はまだ機能しない、と回答されていた。つまり当時、このフィールドに privateChannels を書いても bot を private channel に出すことには寄与しなかった。「正しく書いたつもりが、bot にはそもそも効かないフィールドだった」というのが落とし穴の入り口になっている。

2025 年時点の状況

Microsoft の公式 Q&A では、アプリがチームや通常チャットには問題なくインストールできるのに private channel で出ない件について、「ポリシーの問題ではなく、当時は単純に bot がプライベートチャンネルでサポートされていなかったため」だと説明されていた。manifest を正しく書いても挙動は変わらない、という状態だ。

2026 年時点の状況(重要・ここが本記事のアップデート)

この領域はその後一気に動いた。時系列で整理すると:

  • 2025 年 10 月〜2026 年 1 月: shared channel のアプリ対応が GA(一般展開)。bot / tab / message extension が shared channel で使えるようになった(Message Center: MC1168294)。
  • 2026 年 1 月中旬〜: private channel のアプリ対応も同じモデルでロールアウト開始がアナウンスされ、public developer preview として提供(Message Center: MC1197145)。
  • 2026 年 3 月: Microsoft が private channel アプリ対応のロールアウトを一時停止(MC1197145 の 2026/3/17 更新)。GA 前のロールバックで、再開時期は未定(Message Center で続報を出すとの告知)。

つまり 2026 年時点の正確な状態はこうだ:

  • private channel での bot 利用は「設計上絶対不可」ではない。public developer preview として道は開いている。
  • ただし 本番ロールアウトは停止中で、tenant / rollout / manifest / RSC / Graph notification の条件次第で、sideload bot が表示されない、または message event が届かないことがある。
  • preview を本番運用に依存させるのは危険。 確実に動かすなら次の回避策が現実解。

manifest 例(preview を試すなら)

preview 環境で private / shared channel app を試す場合、現在のドキュメントでは manifest を v1.25 にして supportsChannelFeatures: "tier1" を追加し、各チャンネルタイプでテストするよう案内されている。

{
  "$schema": "https://developer.microsoft.com/json-schemas/teams/v1.25/MicrosoftTeams.schema.json",
  "manifestVersion": "1.25",
  "supportsChannelFeatures": "tier1",
  "supportedChannelTypes": ["sharedChannels", "privateChannels"],
  "bots": [{
    "botId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "scopes": ["personal", "team", "groupChat"]
  }],
  "authorization": {
    "permissions": {
      "resourceSpecific": [
        {"type": "Application", "name": "ChannelMessage.Read.Group"}
      ]
    }
  }
}

⚠️ 注意: supportsChannelFeatures は、2025 年 11 月時点の Q&A では「公開スキーマ未反映なので許容された拡張として扱ってほしい」という段階だったが、現在は manifest schema v1.25(2026 年 1 月分)に正式に追加済みで、shared / private channel を含む次のレベルのチャンネル機能にオプトインするためのプロパティとして定義されている。team scope を使うアプリでは Automatic App Validation がこのプロパティを要求するケースもある。ただしプロパティが定義されていることと、private channel で実際に bot が動くこととは別問題で、後者は前述の通り preview / rollout 停止の影響を受ける。


5. 解決策

案 A: 組織アプリカタログに publish(配布の正攻法)

Teams 管理センター(admin.teams.microsoft.com)で:

  1. Teams アプリ → アプリの管理 → アップロードで ZIP(manifest.json + 2 つの icon)をアップロード
  2. アプリ詳細画面で「公開済み」/「許可」ステータスに
  3. テナント内ユーザに配布・許可される

ZIP の中身:

my-bot.zip
├── manifest.json
├── color.png   (192×192)
└── outline.png (32×32)

位置づけの注意: publish はテナント内で custom app を配布・許可するための正攻法だが、これだけで private channel に必ず表示・動作することを保証するものではない。前述の通り private channel support は preview かつ rollout 停止中なので、publish は「必要条件になり得る」が「十分条件ではない」。実際に動かすには manifest v1.25・supportsChannelFeatures: "tier1"・各 channel への追加・RSC consent・tenant policy をまとめて検証する必要がある。

その他の問題点:

  • Teams Service Administrator 権限が要る(個人だと admin がいない or 承認待ち)
  • 反映までキャッシュタイムが入る(5 分〜30 分)
  • 大企業だと申請ワークフロー必須

案 B: プライベートチームの「標準チャンネル」を使う ← 結局これが現実解

ここで重要なのが、「プライベートチーム」と「プライベートチャンネル」は別概念だということ。混同しやすいので整理する。

用語 意味
プライベートチーム 招待制のチーム(= チーム参加者がメンバー限定)
プライベートチャンネル チーム内でさらにメンバーを限定したサブチャンネル
標準チャンネル (in プライベートチーム) プライベートチームの中の普通のチャンネル。メンバーシップは team レベルで制御済み

つまり「プライベートチームの標準チャンネル」なら:

  • ✅ チーム自体が「メンバーのみ」なので、会話は招待者だけに見える(= プライバシー確保)
  • ✅ チャンネル自体は「標準」扱いなので、bot install / @mention / RSC permission を全部使える(preview に依存しない)
  • ✅ 組織ポリシーが「内輪で会話せよ」を意味するなら、これで満たせる

private channel の preview / rollout 状況に振り回されず、今ある安定機能だけで要件を満たせるのが最大の利点だ。

「プライベートチャンネルじゃないとダメ」と組織ポリシーで決まっている場合

これが厄介。文字通り「プライベートチャンネルでなければ違反」という運用ルールなら、preview の進行を待つか、admin publish + preview 有効化を実 tenant で検証するしかない。本番で安定させたいなら、ポリシー側を見直せないか確認するのが先だ。

多くの組織では、「メンバーシップを絞った場所で会話せよ」程度の意味で「プライベート」と言っている。その場合はプライベートチームの標準チャンネルで満たせる。admin と一度 1 行確認しておくと安心だ:

「会話をメンバー外に見せないこと」が要件であって、「プライベートチャンネル機能を使うこと」自体が要件ではない、で合っていますか?


6. 切り分け方(診断フロー)

bot が反応しない時の診断:

[Teams で @ 打って bot 名が候補に出るか?]
        │
   ┌────┴────┐
  Yes        No
   │          │
   │      [どこで?]
   │       │      │
   │   1:1 DM   グループ/チャンネル
   │       │      │
   │   token       [どのチャンネルタイプ?]
   │   不正?       │              │
   │              標準           プライベート
   │               │              │
   │            install        ★この記事の問題
   │           してない?       (preview 待ち or 案 B で回避)
   │
   bot は届いてる
   = mention 必須 / RSC 設定の話 (別問題)

private channel で preview を使って本番運用したい場合は、実 tenant で「install」「conversationUpdate」「message activity」「Graph read / subscription」を個別に検証すること。standard channel と同じリアルタイム配送を期待するとハマる。


7. Hermes 側の対応(おまけ)

ここは Hermes Agent で Teams adapter を使っている場合の話。

Hermes の TEAMS_HOME_CHANNEL(cron / proactive message delivery 用の送信先 ID)に、スレッド返信用の ;messageid=... 付き conversation reference を入れると、Hermes 側の入力検証で弾かれる(; が許可されない)。clean な channel / chat conversation ID を使うこと。

# NG: thread reply 用の messageid 付き ID を proactive delivery の宛先に使っている
TEAMS_HOME_CHANNEL=19:<thread-id>@thread.tacv2;messageid=<message-id>

# OK: channel/chat の clean な conversation ID
TEAMS_HOME_CHANNEL=19:<thread-id>@thread.tacv2

補足: Teams / Bot Framework 一般では conversation.id;messageid=... が含まれる場面は普通にある(スレッド返信先の表現など)。なので ;messageid= 自体が Bot Framework 全体で不正なわけではない。あくまで Hermes の TEAMS_HOME_CHANNEL の入力としては 基底の conversation ID を使う、という話。


8. まとめ — 記事の要点

  1. プライベートチャンネルとプライベートチームは別概念。 混同が多発する用語。まずここを区別する。
  2. private channel の bot 対応は 2026 年時点で仕様移行中。 「設計上絶対不可」ではなく public developer preview として道は開いているが、本番ロールアウトは 2026/3 に一時停止中supportedChannelTypes は(少なくとも 2025 年時点では)タブ用で bot には効かない。supportsChannelFeatures: "tier1" は manifest schema v1.25 に正式追加済みだが、プロパティが定義されていることと private channel で bot が動くことは別問題。preview を本番依存させない。
  3. shared channel のアプリ対応は GA(一般展開 2026/1 中旬)。ただし shared / private は app を各チャンネルに個別追加が必要で、チームレベル install は効かない。
  4. 本番の現実解は案 B(プライベートチームの標準チャンネル)。preview に依存せず、今ある安定機能で要件を満たせる。多くのケースでこれで足りる。
  5. 副次トピック: Hermes の TEAMS_HOME_CHANNEL には clean な conversation ID を使う(;messageid= 付きは弾かれる)。

関連記事

この記事は、複数 bot を Hermes Agent の profile 単位で独立運用し、それぞれ別の LLM プロバイダ(Ollama / OpenRouter)にルーティングする構成の派生トピックでした。bot の identity・記憶・制約・provider をまとめて profile 単位で分ける設計については、「Hermes Agent で bot ごとに LLM プロバイダを切替える — Ollama × OpenRouter 混在運用」にまとめています。


タグ

MicrosoftTeams Bot BotFramework Teams開発 エンタープライズ AIエージェント HermesAgent

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?