Understanding Activity Protocolとは?Microsoft 365 Agents SDKの変更点と確認ポイント

Microsoftの「Understanding Activity Protocol」で最初に押さえるべき結論は、Activity Protocolが単なる新機能名ではなく、エージェント、ユーザー、チャネル間のやり取りをActivityという共通のJSON構造で扱うための通信ルールだという点です。Microsoft 365 Copilot、Microsoft Copilot Studio、Microsoft Teams、Microsoft 365 Agents SDKをまたいで利用されるため、管理者は「どのチャネルで何を許可するか」、開発者は「Activityの型・プロパティ・チャネル差分をどう処理するか」を確認する必要があります。(Microsoft Learn)

特に2026年5月22日付のMicrosoft 365 Agents SDK for Python v1.0.0リリースでは、Teams SSO Consent、Teams拡張、Copilot Web OAuth、チャネル別Typing Indicator、Proactive Telemetryなど、Activityを中心にした実装・運用に関わる周辺機能が整理されています。なお、Microsoft Learnの「Understanding Activity Protocol」ページ自体は2026年4月29日更新として表示されているため、日付を厳密に扱う場合はLearn本文とSDKリリースノートを分けて確認すると安全です。(Microsoft Learn) (GitHub)

目次

Activity Protocolはエージェント通信の「共通語」

Activity Protocolは、ユーザーの発言、ボタン操作、ファイル添付、会話参加、入力中表示、カスタムイベントなどをActivityとして表現します。Microsoft Learnでは、Activity ProtocolがMicrosoft 365 Copilot、Microsoft Copilot Studio、Microsoft Teams、Microsoft 365 Agents SDKで使われ、チャネルから開発者のコードまでメッセージやイベントが流れる構造を定義すると説明されています。(Microsoft Learn)

従来の感覚でいうと、Teams用、Copilot用、Webチャット用にそれぞれ別々の受信処理を書くのではなく、まずActivityとして受け取り、typeやchannelId、from、recipient、text、attachmentsなどを見て処理を分岐する考え方です。これにより、複数チャネル対応のエージェントを作るときに、実装の共通部分を増やしやすくなります。

ただし「共通化される」といっても、すべてのチャネルで同じ体験が保証されるわけではありません。Teams、Microsoft 365 Copilot、Web Chat、非Microsoftチャネルでは、カード表示、Invoke、Typing、引用、添付ファイルの扱いに差があります。Activity Protocolは共通の器であり、チャネル固有の制約を消すものではない点が重要です。(Microsoft Learn)

何が変わるのか

今回のポイントは、Activity Protocolそのものが突然別物になるというより、Microsoft 365 Agents SDKを使ったエージェント開発で「Activityを中心に設計する」前提がより明確になったことです。

確認ポイント変化の内容実務上の影響
通信モデルユーザー、エージェント、チャネル間のやり取りをActivityとして扱うチャネルごとの独自処理を減らし、共通ハンドラーを設計しやすくなる
対象サービスMicrosoft 365 Copilot、Copilot Studio、Teams、Microsoft 365 Agents SDKで利用TeamsだけでなくCopilotやCopilot Studio連携も見据えた設計が必要
開発単位TurnContextから受信Activityを読み取り、応答Activityを送信する1回の会話ターンごとに処理・状態管理・応答を整理する必要がある
チャネル差分Teams、Copilot、Web Chat、非Microsoftチャネルで対応機能が異なる本番展開前にチャネル別のテストマトリクスが必要
SDK周辺機能Python SDK v1.0.0でTeams SSO Consent、Teams拡張、Copilot Web OAuth、チャネル別Typing Indicatorなどが追加・整理認証、Teams拡張、Copilot Web、Typing表示を使う実装は移行確認が必要

Microsoft 365 Agents SDK for Python v1.0.0のリリースノートでは、BotFramework由来のDialogs Library、Teams SSO Consent Requiredフロー、Teams拡張の更新、msteams:copilot-webのような複合チャネルIDを考慮したCopilot Web OAuth Base-Channel対応、チャネル別Typing Indicator、Proactive Telemetryなどが挙げられています。(GitHub)

影響を受ける対象者

Activity Protocolの影響は、コードを書く開発者だけに限られません。Microsoft 365環境でエージェントを展開する場合、管理者、セキュリティ担当、運用担当も確認すべき範囲があります。

対象者確認すべきこと
Microsoft 365管理者Teams、Copilot、Copilot Studioなど、どのチャネルでエージェントを使わせるか
Teams管理者Teamsアプリ、SSO、メッセージ拡張、タスクモジュール、会議イベントの利用範囲
開発者Activityスキーマ、TurnContext、Activity Type、添付ファイル、引用、channelData
セキュリティ担当添付ファイルURL、認証、同意、ログ、個人情報、外部チャネル連携
運用担当チャネル別の障害切り分け、Activityログ、バージョン差分、段階展開

特に社内向けエージェントでは、Teamsで動けば十分とは限りません。将来的にMicrosoft 365 CopilotやCopilot Studio、Web Chatへ展開する可能性があるなら、初期設計の段階でActivity Protocolを前提にしておくほうが手戻りを減らせます。

Activityスキーマで見るべき主要プロパティ

Activity Protocolでは、やり取りの内容だけでなく、送信者、受信者、会話コンテキスト、発生元チャネル、インタラクション種別、ペイロードデータといったメタデータをActivityに含めます。Microsoft Learnでは、Id、Type、ChannelID、From、Recipient、Text、Attachmentなどが主要プロパティとして紹介されています。(Microsoft Learn)

プロパティ役割確認ポイント
idActivityの識別子多くの場合チャネル側で生成される。アプリ側で勝手に永続IDとして扱わない
typeActivityの種類message、event、invoke、typingなどで処理を分ける
channelId発生元チャネルmsteamsなどを見て、チャネル固有処理を判断する
from送信者ユーザーかエージェントかを判定する
recipient受信者応答先の制御やメンション処理で使う
textメッセージ本文通常のテキスト会話で中心になる
attachmentsカード、画像、ファイルなどURLの有効期限や保存先、権限を確認する
entitiesメンション、引用などの追加情報引用は添付ファイルとは別物として扱う
channelDataチャネル固有データTeams固有情報などを扱えるが、他チャネルでは同じ形とは限らない

GitHub上のActivity Protocol仕様では、ActivityオブジェクトはJSONとしてシリアライズ可能であること、typeフィールドがActivityの意味を制御すること、未知の追加フィールドを受信側が受け入れる前提が示されています。実装では「知らないフィールドが来たら落ちる」設計ではなく、必要なフィールドだけを安全に読み取り、未知の値にはフォールバックする作りが現実的です。(GitHub)

開発者が確認すべき実装ポイント

TurnContextは1ターン限りの処理単位として扱う

Microsoft 365 Agents SDKでは、チャネルから新しいActivityを受け取るたびにTurnContextが作成され、登録済みのハンドラーやメソッドに渡されます。TurnContextは1回の会話ターンの間だけ存在し、ターン終了後に破棄されます。(Microsoft Learn)

つまり、TurnContextそのものを長期保存して後から使う設計は避けるべきです。後続処理やプロアクティブメッセージで必要になる情報は、会話参照、ユーザーID、チャネルID、業務上必要な状態などに分けて保存します。

var messageText = turnContext.Activity.Text;
var channelId = turnContext.Activity.ChannelId;

このように、まずturnContext.Activityから必要な情報を取り出し、Activity.TypeとChannelIdを起点に処理を分岐するのが基本です。

Activity Typeごとにハンドリングを分ける

Activityには複数の種類があります。Microsoft Learnでは、代表的なActivity TypeとしてMessage、ConversationUpdate、Event、Invoke、Typingが挙げられています。(Microsoft Learn)

Activity Type主な用途実装時の注意点
Message通常のテキスト、添付、候補アクション最も基本。添付ファイルもMessage Activityに含まれる
ConversationUpdateメンバー参加・退出などすべてのクライアントが対応するわけではない。Teamsでは利用される
Eventクライアントやチャネルが送るカスタムイベントnameとvalueを見て独自処理を作る
Invokeコマンドや操作実行Teamsのtask/fetch、task/submitなどで使われる。未対応チャネルもある
Typing入力中表示すべてのクライアントで使えるわけではなく、Microsoft 365 CopilotはTyping Activityをサポートしない

失敗しやすいのは、すべてをMessageとして処理してしまうパターンです。たとえばTeamsのタスクモジュールやメッセージ拡張ではInvokeが関係するため、通常メッセージだけを想定した実装では期待通りに動かないことがあります。

添付ファイルは「受け取ったら終わり」ではない

Activity Protocolでは、ファイルやカードなどのリッチコンテンツは添付ファイルとして扱われます。Microsoft Learnでは、添付ファイルの実体を取得するためにクライアントが提供したURLを使い、必要に応じて自分のストレージへ移すことが説明されています。また、これらのURLは短命であることが多く、後から参照し続けられる前提にしないよう注意が示されています。(Microsoft Learn)

実務では、次のように扱うと安全です。

  • 添付ファイルのcontentUrlをログにそのまま残さない
  • 必要なファイルは早めに取得し、組織で管理するストレージへ保存する
  • 保存時にアクセス権、保持期間、削除ポリシーを決める
  • ウイルススキャンやファイル種別制限をアプリ側でも検討する
  • ファイル取得失敗時のユーザー向けエラー文を用意する

引用と添付ファイルを混同しない

Microsoft Learnでは、AttachmentとCitationは同じオブジェクト型ではないと説明されています。Teamsなどのクライアントでは、引用はActivityのEntitiesプロパティを通じて扱われ、添付ファイルとは別の情報として処理されます。(Microsoft Learn)

RAG構成のエージェントや社内ドキュメント検索エージェントでは、この違いが重要です。回答の根拠として文書を示したい場合、単にファイルを添付するだけでは「引用」としてクライアントに表示されない可能性があります。チャネルごとの引用表示仕様を確認し、Entitiesに必要な情報を入れる設計にしましょう。

管理者が確認すべき設定・展開ポイント

対象チャネルを先に決める

Activity Protocolは複数チャネル対応をしやすくしますが、管理上は「どのチャネルで使うか」を先に決める必要があります。Teams、Microsoft 365 Copilot、Copilot Studio、Web Chat、非Microsoftチャネルでは、使えるActivity Typeやカード表示、認証、引用、添付ファイルの扱いが異なります。(Microsoft Learn)

展開前に、少なくとも次のような対応表を作ると判断しやすくなります。

チャネル確認項目
Microsoft TeamsAdaptive Cards、メッセージ更新・削除、メンション、会議情報、Invoke、SSO
Microsoft 365 Copilotメッセージ中心の処理、引用、ストリーミング応答、カード制限
Copilot Studio接続方式、認証、環境、DLP、既存トピックやコネクタとの関係
Web Chat / DirectLineHTTPS通信、カスタムchannelData、Activity Type全般
非Microsoftチャネルカード表示、Typing、添付、認証、個別ドキュメントの確認

認証と同意の流れをテストする

Microsoft 365 Agents SDK for Python v1.0.0では、Teams SSOのConsent Requiredフロー対応や、Copilot Web OAuth Base-Channel対応が追加されています。特にmsteams:copilot-webのような複合チャネルIDを受け取るケースでは、OAuthトークン交換でベースチャネルを使うためのオプションが追加されています。(GitHub)

管理者と開発者は、次の観点で確認しましょう。

  • 初回利用時に同意画面が想定通り表示されるか
  • Teams上とCopilot Web上で認証結果が変わらないか
  • 条件付きアクセスや多要素認証の影響を受けるか
  • 同意が必要な権限を過剰に要求していないか
  • 失敗時にユーザーへ分かりやすい案内を返せるか

段階展開に向いたログを残す

Activity Protocol対応の運用では、単に「エラーが出た」だけでは切り分けが難しくなります。最低限、type、channelId、処理結果、例外種別、応答有無、ユーザーに返したメッセージ種別は追跡できるようにしましょう。

ただし、Activityには本文、添付ファイル情報、ユーザー情報が含まれる可能性があります。ログに全文を残すのではなく、個人情報や機密情報を除外・マスキングし、必要なメタデータ中心に記録する設計が現実的です。

移行・展開で失敗しやすいポイント

失敗例起きる問題対策
Teamsで動いた処理をCopilotにもそのまま展開するTyping、カード、引用、ストリーミングで差が出るチャネル別に対応機能を確認する
Activity.Typeを見ずにすべてMessage扱いするInvokeやEventが処理されないTypeごとのハンドラーを用意する
添付ファイルURLを長期保存する後日アクセスできない、セキュリティ上危険必要なファイルは自社管理ストレージに移す
channelDataに依存しすぎる他チャネルで動かない共通項目とチャネル固有項目を分離する
引用をAttachmentとして実装するクライアント側で引用として表示されないEntitiesでの引用表現を確認する
複合チャネルIDを想定しないCopilot WebやTeams連携時のOAuthで問題が出る可能性channelIdの形式を固定文字列だけで決め打ちしない
TurnContextを後続処理に使い回すターン終了後の処理で破綻する必要な参照情報だけ保存する

特に注意したいのは、channelIdの決め打ちです。2026年5月22日のSDKリリースノートでは、msteams:copilot-webのような複合チャネルIDに関連するOAuth対応が明記されています。文字列が完全にmsteamsでなければTeams系ではない、といった単純な判定は避けたほうが安全です。(GitHub)

展開前チェックリスト

本番導入前には、次の順番で確認すると抜け漏れを減らせます。

  • 利用するSDKの言語とバージョンを確認する
  • Activity.Typeごとの処理一覧を作る
  • channelIdごとの対応表を作る
  • Teams、Copilot、Copilot Studioなど対象チャネルで実機テストする
  • 添付ファイルの取得、保存、削除、スキャン方針を決める
  • 引用表示が必要な場合はEntitiesの扱いを検証する
  • SSO、OAuth、同意画面、条件付きアクセスをテストする
  • カード表示やInvokeが未対応のチャネル向けに代替応答を用意する
  • ログに本文や添付URLを残しすぎないようにする
  • まず限定ユーザーで段階展開し、Activityログから失敗パターンを確認する

このチェックリストで重要なのは、開発者だけで完結させないことです。Teamsアプリの許可、Copilot利用ポリシー、添付ファイルの扱い、認証同意、ログ保管は、管理者やセキュリティ担当と一緒に確認する必要があります。

まず何から対応すべきか

既存のTeams BotやCopilot Studio連携をMicrosoft 365 Agents SDKへ寄せていく場合、最初にやるべきことはコードの書き換えではありません。まず、現在のエージェントが受け取っている入力と返している応答を、Activity単位で棚卸しします。

具体的には、次の4点を表にします。

棚卸し項目例
受け取るActivity TypeMessage、Invoke、Event、ConversationUpdate
利用するプロパティText、Attachments、Entities、ChannelData
対象チャネルTeams、Microsoft 365 Copilot、Copilot Studio、Web Chat
チャネル固有処理Teamsメンション、タスクモジュール、Copilot引用、ストリーミング

この棚卸しができれば、移行時に「共通化できる処理」と「チャネル別に残す処理」が見えてきます。Activity Protocolの価値は、すべてを無理に同じ処理へ押し込むことではなく、共通部分と差分を明確に分けられる点にあります。

MicrosoftのUnderstanding Activity Protocolは、Microsoft 365エージェント開発の土台を理解するための重要な公式情報です。管理者は対象チャネル、権限、認証、添付ファイル、ログを確認し、開発者はActivity、TurnContext、Activity Type、channelData、引用と添付の違いを押さえてください。次に取るべき行動は、既存または新規エージェントの入出力をActivity単位で整理し、チャネル別のテスト表を作ることです。それが、TeamsだけでなくMicrosoft 365 CopilotやCopilot Studioまで見据えた、安全で拡張しやすい展開につながります。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次