Copilot for Microsoft 365のメッセージ拡張機能プラグインを作成またはアップグレードするためのガイドライン

重要

  • Microsoft Copilot for Microsoft 365のプラグインはプレビュー段階であり、Microsoft Teams のMicrosoft 365 Chatでのみ機能します。
  • Copilot for Microsoft 365がorganizationで使用できることを確認します。 Copilot の開発環境を取得するには、次の 2 つの方法があります。
    • Copilot を含むサンドボックス Microsoft 365 テナント ( TAP メンバーシップを通じて限定プレビューで利用できます)。
    • Microsoft Copilot for Microsoft 365 ライセンスを持つエンタープライズ顧客の運用環境。

Microsoft 365 プラグインは、Teams や Outlook など、さまざまな Microsoft 365 製品との統合を提供します。 統合により、ユーザーは外部システムでコンテンツを検索または作成できます。 メッセージ拡張プラグインを使用すると、Microsoft Copilot for Microsoft 365はボットを介して他のソフトウェアやサービスの API と対話できます。 Copilot for Microsoft 365を使用すると、次のことができます。

  • 最新の情報またはレコードのSearch。 たとえば、最新のインシデント チケットやアンケートの結果などです。
  • 複数のレコードに基づいて情報を要約します。 たとえば、プロジェクト Northwind に関連するすべてのインシデント チケットを要約します。

既存のメッセージ拡張機能をビルドまたはアップグレードして、Copilot for Microsoft 365での有用性と使いやすさを最大化することをお勧めします。 メッセージ拡張機能は、ユーザーに代わって実行できるスキルとして認識Copilot for Microsoft 365、1 つ以上の検索コマンドをサポートする必要があります。 さらに、拡張機能は、この記事で説明するコンプライアンス、パフォーマンス、セキュリティ、およびユーザー エクスペリエンスの標準を満たす必要があります。

図は、Microsoft Teams と Copilot for Microsoft 365 (M365 チャット) の間のユーザー エクスペリエンスを示しています。

必須の要件

Copilot for Microsoft 365のメッセージ拡張プラグインをビルドするための要件は次のとおりです。

説明を定義する

適切な説明は、アプリの機能の明確で簡潔な概要を提供し、Copilot for Microsoft 365が検索操作を効率的に検出して実行できるようにします。 ユーザーが動詞 (例: Contoso チケットの検索) と共にアプリ名を入力する場合、メッセージ拡張プラグインは Copilot for Microsoft 365 (M365 チャット) から呼び出す必要があります。

M365 Chat のメッセージ拡張プラグインのサンプル プロンプトの例を示すパス シナリオを示すスクリーンショット。

M365 Chat のプラグインとしてのメッセージ拡張のサンプル プロンプトの例のない失敗シナリオを示すスクリーンショット。

次の表に示す説明ガイドラインに従っていることを確認します。

アクション 理由
アンチ競合: 短い説明と長い説明の両方で他のプラグインの名前を使用しないでください。
責任ある AI: 不適切または不快なキーワードの使用を避けます。
プロンプトの挿入: 説明が、アプリケーションの正常な機能をバイパスするアクションを実行するように Copilot に指示しないようにします。 さらに、説明には、プロンプト挿入のコードとして使用できることを示す記号やテキストを含めることはできません。 アプリを繰り返し呼び出すフレーズ、関数、コードは使用しないでください。

アプリの説明

長短のアプリの説明を明確にし、アプリのスコープを定義する必要があります。 Copilot for Microsoft 365でアプリをプラグインとしてレンダリングするには、次のプラグイン要件に合わせてアプリの説明を変更します。

  • 長い説明では、Copilot for Microsoft 365のメッセージ拡張プラグインの機能と使用方法を明確に説明する必要があります。 たとえば、Copilot for Microsoft 365で Contoso クラウドを使用して、タスクを検索して要約します。
  • 簡単な説明では、自然言語でアプリの機能を簡単に説明する必要があり、アプリの名前を含めることができます。

次の表に、各カテゴリの簡単な説明の例を示します。

説明: チケット、バグ、プロジェクトを作成、検索、表示します。

アプリの説明の例:

{
  "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.13/MicrosoftTeams.schema.json",
  "version": "1.0.0",
  "manifestVersion": "1.13",
  "id": "2bxxxxc5-5xxx-4xxx-aXXX-94xxxx8919e5",
  "name": {
    "short": "Tasks",
    "full": "Contoso Tasks"
  },
  "description": {
    "short": "Create, search, view tickets, bugs, and projects",
    "full": "Contoso Tasks makes it easy to stay organized. Create, assign, and track tasks individually or collaboratively with your team, and see everything come together in one place."
  },

Search コマンドの説明

コマンドの説明は、ユーザーの意図と発話をプラグイン内の検索コマンドにマップし、ユーザーの意図とキーワードの分析に基づいて構築する必要があります。 コマンドの説明Search次の必要があります。

  • コマンドが自然言語で検索する内容と方法 (詳細な一覧) に焦点を当てます。
  • 動詞とシノニム (該当する場合) を含めます。
  • ネイティブ アプリの検索機能で使用される可能性が高いキーワードに焦点を当てます。

セマンティックの説明

semanticDescription プロパティは、Copilot for Microsoft 365のコマンドの詳細な説明を提供するために使用されます。 コマンドのセマンティック記述では、最大 5,000 文字がサポートされ、ユーザー インターフェイスには表示されません。 プロパティがsemanticDescription空のままの場合、Copilot for Microsoft 365は フィールドの情報をdescription使用します。 を semanticDescription記述するときは、コマンドの予期される値、制限、および範囲に関する情報を含める必要があります。

プロパティは semanticDescription 必須フィールドではありません。 ただし、アプリ マニフェストにを追加 semanticDescription する場合、既存の検証では、短い説明、パラメーター、コマンドの説明もセマンティックの説明に適用できます。

アプリが Microsoft Teams Store の申請プロセスに合格する可能性を高めるために、セマンティック説明に関する次のガイドラインを確認することをお勧めします。

  • "ユーザーが X と言っている場合"、"無視"、"削除"、"リセット"、"新しい命令"、"太字で回答する"、"何も印刷しない" などの指示フレーズは避けてください。 [必須の修正]
  • URL、絵文字、または非表示文字 (16 進数、バイナリ、型破りな記号など) は使用しないでください。 [必須の修正]
  • 文法と句読点のエラーは避けてください。 [必須の修正]
  • 過度に冗長な、花の多い、またはマーケティング言語を避けてください。 [推奨される修正]
  • "#1"、"驚くべき"、"最適" などの最上級の要求は避けてください。 [推奨される修正]

次の表に、各カテゴリのコマンドとセマンティックの説明の例を示します。

説明: 明日の Northwind に関連する優先度の高いタスクのSearch。

コマンドの説明の例:

"commands": [
        {
          "id": "Search",
          "type": "query",
          "title": "Tasks",
          "description": "Search for high priority tasks related to Northwind that are due tomorrow.",
          "SemanticDescription": "Search for issues, epics, stories, tasks, sub tasks, bugs + additional details."
          "initialRun": true,
          "fetchTask": false,
          "context": [
            "commandBox",
            "compose",
            "message"
          ],

パラメータの説明

各メッセージ拡張コマンドは、対応する 'parameters' プロパティをサポートしており、最大 5 つのパラメーターをサポートしており、最初のパラメーターはメッセージ拡張検索バーに表示する必要があります。 パラメーターには適切な説明が必要です。許容されるパラメーター、列挙型、頭字語、および出力形式の組み合わせを含める必要があります。

semanticDescription プロパティは、Microsoft Copilot のコマンドの詳細な説明を提供するために使用されます。 パラメーターのセマンティック記述は最大 2,000 文字をサポートし、ユーザー インターフェイスには表示されません。 プロパティが semanticDescription 空のままの場合、Copilot は フィールドの情報を description 使用します。 を semanticDescription記述するときは、コマンドの予期される値、制限、および範囲に関する情報を含める必要があります。

適切なパラメーターの説明では、出力形式の自然言語でのシステムの要件について説明します。 次に、各カテゴリの基本的な検索要求と高度な検索要求の例をいくつか示します。

基本検索: Northwind に関連するタスクをSearchします。
高度な検索: 明日の Northwind に関連する優先度の高いタスクをSearchします。

パラメーターの説明の例:

"parameters": [
    {
        "name": "Name",
        "title": "Project or Task Name",
        "description": "Project name or task name as keyword.",
        "inputType": "text"
    },
    {
        "name": "Time",
        "title": "Time",
        "description": "Date or number of days for which you need tasks for.",
        "semanticDescription": "Date or number of days for which you need tasks for. Output: Number",
        "inputType": "text"
    },
    {
        "name": "Priority",
        "title": "Priority",
        "description": "Priority of tasks.",
        "semanticDescription": "Priority of tasks. Acceptable values are high, medium, low, NA",
        "inputType": "text"
    }] 

複合発話

注:

ダイアログを介したSearch (TeamsJS v1.x ではタスク モジュールと呼ばれます) は、M365 Chat ではサポートされていません。

M365 チャットの場合、検索ベースのメッセージ拡張機能は、正確な情報を深く取得するために、3 つ以上の一意の複合発話をサポートする必要があります。 複合発話を有効にするには、 アプリ マニフェスト (以前は Teams アプリ マニフェストと呼ばれる) を更新して、3 つ以上の検索パラメーターを処理するように検索範囲を拡張し、次のことを確認する必要があります。

  • 複数のパラメーターに基づく検索をサポートするように Web サービスを更新します。 ユーザー要求に応答する方法の詳細については、「 検索コマンドに応答する」を参照してください。

  • Copilot for Microsoft 365は、ユーザー発話の一部ではないパラメーターに空の文字列または null 値を渡す場合があります。これは、パラメーターを処理するように Web サービスを更新します。

  • メッセージ拡張は最大 10 個のコマンド (9 個の使用可能) をサポートし、各コマンドには対応するプロパティがあり、最大 5 つのパラメーターをサポートします parameters


次のコードは、アプリ マニフェストで定義されている複数のパラメーターの例です。
"commands": [
                {
                    "id": "inventorySearch",
                    "context": [
                        "compose",
                        "commandBox"
                    ],
                    "description": "Search products by name, category, inventory status, supplier location, stock level",
                    "title": "Product inventory",
                    "type": "query",
                    "parameters": [
                        {
                            "name": "productName",
                            "title": "Product name",
                            "description": "Enter a product name here",
                            "inputType": "text"
                        },
                        {
                            "name": "categoryName",
                            "title": "Category name",
                            "description": "Enter the category of the product",
                            "inputType": "text"
                        },
                        {
                            "name": "inventoryStatus",
                            "title": "Inventory status",
                            "description": "Enter what status of the product inventory. Possible values are 'in stock', 'low stock', 'on order', or 'out of stock'",
                            "inputType": "text"
                        },
                        {
                            "name": "supplierCity",
                            "title": "Supplier city",
                            "description": "Enter the supplier city of product",
                            "inputType": "text"
                        },
                        {
                            "name": "stockQuery",
                            "title": "Stock level",
                            "description": "Enter a range of integers such as 0-42 or 100- (for >100 items). Only use if you need an exact numeric range.",
                            "inputType": "text"
                        }
                    ]
                },
                {
                    "id": "discountSearch",
                    "context": [
                        "compose",
                        "commandBox"
                    ],
                    "description": "Search for discounted products by category",
                    "title": "Discounts",
                    "type": "query",
                    "parameters": [
                        {
                            "name": "categoryName",
                            "title": "Category name",
                            "description": "Enter the category to find discounted products",
                            "inputType": "text"
                        }
                    ]
                },
                {
                    "id": "revenueSearch",
                    "context": [
                        "compose",
                        "commandBox"
                    ],
                    "description": "Find products based on their revenue/period",
                    "title": "Revenue",
                    "type": "query",
                    "parameters": [
                        {
                            "name": "revenueRange",
                            "title": "Revenue range",
                            "description": "Enter 'high' or 'low' or enter a range of integers such as 0-10000 or 5000- using this exact format",
                            "inputType": "text"
                        }
                    ]
                }
            ]

Northwind アプリがシーフードと在庫パラメーターの応答を返すパス シナリオの例を示すスクリーンショット。

検索パラメーターには、許容されるパラメーター、列挙型、頭字語、および出力形式を含む適切な説明が必要です。 詳細と例については、「 パラメーターの説明」を参照してください。

サンプル プロンプト

プロパティは samplePrompts 、Copilot 内のさまざまなプラグインを使用する方法についてユーザーをガイドします。 Copilot は、サンプル プロンプトを使用して、ユーザーのプロンプトを表示します。 プロンプトは、異なるロケールに適応でき、異なるコマンド間でクリアする必要があります。 サンプル プロンプトは、Copilot for Microsoft 365内の次の領域で使用できます。

  • First Run Experience (FRE): ユーザーが最初にプラグインをインストールまたは有効にしたとき。
  • プロンプト ライブラリまたはCopilot Lab: ユーザーがプロンプトのヘルプを求めるとき。
  • プラグインの提案: より良い発話に向けてユーザーをガイドします。

Copilot で有効にしたメッセージ拡張プラグインの場合に表示されるサンプル プロンプトを示すスクリーンショット。

注:

  • アプリ マニフェストで プロパティが samplePrompts 指定されていない場合、プロンプトは表示されません。
  • プロパティは samplePrompts 、アプリの申請プロセス中にアプリの検証に必須です。
  • アプリに複数のコマンドを定義すると、最大 3 つのプロンプト (上位 3 つのコマンドのそれぞれから 1 つ) がユーザーに表示されます。 プロンプトは回転して、さまざまなコマンド間でさまざまなプロンプトセットをユーザーに提供します。

Microsoft Teams Store の申請プロセスにアプリが合格する可能性を高めるために、次のガイドラインに従うことをお勧めします。

  • プラグインには、少なくとも 3 つのプロンプトと、各コマンドに対して最大 5 つのプロンプトが必要です。
  • 各プロンプトは 128 文字を超えてはなりません。
  • 同じプラグイン内の 2 つのコマンドに、同じプロンプトを含めてはなりません。
  • サンプル プロンプトは、本質的にジェネリックであり、カスタム参照を含めないようにする必要があります。 たとえば、プロジェクト名とタスク名です。
  • すべてのサンプル プロンプトが機能し、応答を返す必要があります。
  • プロンプトはコマンドに関連している必要があります。

次のコードは、アプリ マニフェストの プロパティの samplePrompts 例です。

"composeExtensions": [
	{
		"canUpdateConfiguration": true,
		"botId": "bxxxxxx5-xxxx-xxxx-xxxx-4xxxxxx16599",
		"commands": [
			{
				"id": "orders",
				"title": "Orders",
				"context": [
					"Commandbox",
					"Compose"
				],
				"description": "Search for orders",
				"semanticDescription": "Search for orders",
				"samplePrompts": [
					{
						"text": "Search for all orders"
					},
					{
						"text": "Search for orders related to Contoso"
					},
					{
						"text": "Search for all pending orders"
					},
					{
						"text": "Search for all completed ordered for Fabrikam"
					}
				]
			}
		]
	}
]

アダプティブ カードの応答

メッセージ拡張機能は、アダプティブ カードを使用してユーザー入力に応答します。 メッセージ拡張プラグインのアダプティブ カードは、効果的に機能し、リッチに表示され、次の要件を満たす必要があります。

  • アダプティブ カードの応答には、アダプティブ カードのコンテンツとプレビューカード情報が同じテンプレートの一部として含まれている必要があります。 [必須]

    M365 チャット アプリの応答にプレビューとコンテンツが同じ応答で含まれていることを示すサンプル アプリの例を示すスクリーンショット。


    アダプティブ カード応答テンプレートの例
    {
        "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
        "type": "AdaptiveCard",
        "version": "1.5",
        "body": [
          {
            "type": "Container",
            "items": [
              {
                "type": "TextBlock",
                "text": "${companyName}",
                "size": "Medium",
                "wrap": true,
                "style": "heading"
              },
              {
                "type": "TextBlock",
                "text": "${stockExchange} ${stockSymbol}",
                "isSubtle": true,
                "spacing": "None",
                "wrap": true
              },
              {
                "type": "TextBlock",
                "text": "${formattedDate} ${formattedTime}",
                "wrap": true
              }
            ]
          },
          {
            "type": "Container",
            "spacing": "None",
            "items": [
              {
                "type": "ColumnSet",
                "columns": [
                  {
                    "type": "Column",
                    "width": "stretch",
                    "items": [
                      {
                        "type": "TextBlock",
                        "text": "${currentPrice} ",
                        "size": "ExtraLarge",
                        "wrap": true
                      },
                      {
                        "type": "TextBlock",
                        "text": "${priceChange} ${percentChange}",
                        "color": "${changeColor}",
                        "spacing": "None",
                        "wrap": true
                      }
                    ]
                  },
                  {
                    "type": "Column",
                    "width": "auto",
                    "items": [
                      {
                        "type": "FactSet",
                        "facts": [
                          {
                            "title": "Open",
                            "value": "${openPrice} "
                          },
                          {
                            "title": "High",
                            "value": "${highPrice} "
                          },
                          {
                            "title": "Low",
                            "value": "${lowPrice} "
                          }
                        ]
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ],
        "previewCard": {
          "contentType": "application/vnd.microsoft.card.hero",
          "content": {
            "title": "${companyName}",
            "text": "${stockSymbol}"
          }
        }
      }
    
  • アプリのロゴ、タイトル、サムネイル、および情報のタイトルとは別に、アダプティブ カード内のデータは少なくとも 2 つの情報を表す必要があります。 最も頻繁に検索される属性 (変更されたデータ、作成者、状態、フラグなど) からフィールドを識別できます。 [必須]

    アダプティブ カード応答の情報タイトル、追加のユーザー フィールド、アクション ボタンの例を示すスクリーンショット。

  • アダプティブ カードは、デスクトップ、Web、モバイル (iOS および Android) で提示できる必要があります。 [必須]

  • アダプティブ カードには少なくとも 1 つのアクション ボタンが含まれている必要がありますが、4 つ以上のアクション ボタンは含まれません。 [必須]

    注:

    アクションの種類 imBackmessageBack は、データ オブジェクトではサポートされていません。

    次のアクションの種類をお勧めします。

    • Action.OpenUrl: カードから指定した URL を開きます。
    • Action.ToggleVisibility: カード内の 1 つ以上の要素を表示または非表示にします。
    • Action.Execute: 入力フィールドを収集し、ボット サービスに要求として送信します。
    • Action.Submit: データ オブジェクトで型呼び出しを使用して、ダイアログまたは Stageview を開きます。

    図は、M365 チャットのアダプティブ カード応答の [在庫の更新]、[補充]、[取り消し] アクション ボタンの例を示しています。

  • ユーザーがダイアログ、ステージビュー、またはカードから直接カードに関する情報を変更できる場合は、ユニバーサル アクションと自動更新をサポートするためにアダプティブ カードをお勧めします。 [推奨]

  • アダプティブ カードには 、メタデータの一部として URL を含める必要があります。これにより、カードをハブ間で簡単にコピーできます。 [推奨]

  • サムネイルとは別に、アダプティブ カード内の画像には代替テキストが必要です。 [推奨]

技術的要件

プラグインを検証、呼び出し、シームレスに動作させるには、次の条件を満たしていることを確認します。

条件 履行
マニフェストのバージョン アプリ マニフェストのバージョンは 1.13 以降である必要があります。 [必須]
Microsoft 365 チャネル ユーザーが Outlook からメッセージ拡張機能を操作するには、Microsoft 365 チャネルをボットに追加する必要があります。 詳細については、「 Microsoft 365 チャネルの追加」を参照してください。 [必須]
応答時間 応答時間は、99% の場合は 9 秒、75% の場合は 5 秒、50% の場合は 2 秒を超えてはなりません。 [必須]
信頼性 アプリは 99.9% の可用性を維持する必要があります。 たとえば、Microsoft 365 Chatがプラグインを 1,000 回呼び出す場合、意味のある応答を 999 回提供する必要があります。 [必須]
ゼロ回帰 検証のためにアプリを再送信する必要がある場合は、以前に動作していた既存のメッセージ拡張機能の機能を中断しないでください。 この要件は、独立系ソフトウェア ベンダー (ISV) アプリにのみ適用され、organization用に構築されたアプリには適用されません。 [必須]
シングル サインオン (SSO) 該当する場合は、SSO のMicrosoft Entra ID アプリの登録を更新します。 [推奨]
コンテンツ セキュリティ ポリシー 該当する場合は、コンテンツ セキュリティ ポリシー ヘッダーを変更します。 [推奨]

重要

該当する場合は、コンテンツ セキュリティ ポリシー ヘッダーを、コンテンツ セキュリティ ポリシー ヘッダーX-Frame-Optionsの構成に従って更新します。

コード サンプル

サンプルの名前 説明 TypeScript
Northwind インベントリ メッセージ拡張機能 このサンプルでは、Microsoft Copilot for Microsoft 365で Teams メッセージ拡張機能をプラグインとして使用する方法を示します。 表示

関連項目