注:
エージェントは、より柔軟でインテリジェントで将来に備えたエクスペリエンスを提供します。これにより、より豊かな推論、よりシンプルな開発、進化する Teams および Microsoft 365 プラットフォームとのより適切な連携が可能になります。 エージェントを探索してビルドすることをお勧めします。
詳細については、「Teams での宣言型エージェントのビルドとビルド エージェント」を参照してください。
既存のボットベースのメッセージ拡張機能がある場合は、 エージェントとしても拡張 できます。
重要
このセクションのコード サンプルは、v4.6 以降のバージョンの Bot Framework SDK に基づいています。 以前のバージョンのドキュメントをお探しの場合は、ドキュメントの Resources フォルダーにある メッセージ拡張機能 - v3 SDK セクションを参照してください。
ユーザーが検索コマンドを送信すると、Web サービスは、検索パラメーターを持つvalue オブジェクトを含むcomposeExtension/query呼び出しメッセージを受け取ります。 呼び出しは、次の条件によってトリガーされます。
- 検索ボックスに文字が入力されます。
-
initialRunは 、アプリ マニフェストで true に設定されます。 詳細については、「既定の クエリ」を参照してください。
このドキュメントでは、カードとプレビューの形式でユーザーの要求に応答する方法と、Microsoft Teamsが既定のクエリを発行する条件について説明します。
要求パラメーターは、要求の value オブジェクトにあります。これには、次のプロパティが含まれます。
| プロパティ名 | 用途 |
|---|---|
commandId |
ユーザーによって呼び出されるコマンドの名前。アプリ マニフェストで宣言されているコマンドのいずれかと一致します。 |
parameters |
パラメーターの配列。 各パラメーター オブジェクトには、ユーザーが指定したパラメーター値と共にパラメーター名が含まれています。 |
queryOptions |
改ページ パラメーター: skip: このクエリのカウントをスキップする count: 返す要素の数。 |
protected override async Task<MessagingExtensionResponse> OnTeamsMessagingExtensionQueryAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionQuery query, CancellationToken cancellationToken)
{
// Code to handle the query.
}
ユーザーの要求に応答する
ユーザーがクエリを実行すると、Microsoft Teamsはサービスに同期 HTTP 要求を発行します。 その時点で、コードには要求に対する HTTP 応答を提供する 5 秒があります。 この間、サービスは、より多くの参照、または要求を処理するために必要なその他のビジネス ロジックを実行できます。
サービスは、ユーザー クエリと一致する結果で応答する必要があります。 応答は、 200 OK の HTTP 状態コードと、次のプロパティを持つ有効なアプリケーションまたは JSON オブジェクトを示す必要があります。
| プロパティ名 | 用途 |
|---|---|
composeExtension |
最上位レベルの応答エンベロープ。 |
composeExtension.type |
応答の種類。 次の種類がサポートされています。 result: 検索結果の一覧を表示します auth: 認証するユーザーをプロンプトします config: メッセージ拡張機能を設定するユーザーをプロンプトします message: プレーン テキスト メッセージを表示します |
composeExtension.attachmentLayout |
添付ファイルのレイアウトを指定します。 型 resultの応答に使用されます。 次の種類がサポートされています。 list: サムネイル、タイトル、テキスト フィールドを含むカード オブジェクトの一覧 grid: サムネイル画像のグリッド |
composeExtension.attachments |
有効な添付ファイル オブジェクトの配列。 型 resultの応答に使用されます。 次の種類がサポートされています。 application/vnd.microsoft.card.thumbnail application/vnd.microsoft.card.hero application/vnd.microsoft.teams.card.o365connector application/vnd.microsoft.card.adaptive |
composeExtension.suggestedActions |
推奨されるアクション。
auth型またはconfig型の応答に使用されます。 |
composeExtension.text |
表示するメッセージ。 型 messageの応答に使用されます。 |
config response
config応答は、メッセージング プラットフォーム内でメッセージ拡張機能を構成して有効にするためにサーバーまたはアプリから返されるデータです。 ユーザーが初めてメッセージ拡張機能を構成すると、 config 応答を使用して、メッセージ拡張機能を設定し、必要な構成を指定するようにユーザーに求められます。
次のコード スニペットは、ユーザーがメッセージ拡張機能と対話するときに表示される config 応答を示しています。
{
"composeExtension": {
"suggestedActions": {
"actions": [
{
"type": "openUrl",
"title": "Open url",
"value": "https://<your-tunnel-url>/searchSettings.html?settings="
}
]
},
"type": "config"
},
"responseType": "composeExtension"
}
config応答には、次のものが含まれます。
- Teams ダイアログで構成ページを開く URL を含む
valueプロパティを使用すると、ユーザーは必要な詳細を入力して構成を送信できます。valueプロパティの例を次に示します。https://<your-subdomain>.ngrok-free.app/searchSettings.html-
https://<your-subdomain>.devtunnels.ms/searchSettings.html.
-
composeExtension内のtypeフィールドはconfigに設定され、この応答の性質が構成として示されます。 - この応答を識別する
responseTypeは、アプリのcomposeExtension用です。
構成ページで Teams SDK を初期化し、 authentication.notifySuccess() を使用して、収集した構成データを Teams に送信します。
submitConfig() 関数は、ユーザーがセットアップ プロセスを完了した後に構成値を構造化して返す方法を示します。
メッセージ拡張機能の構成フローを完了するには、次の手順を実行します。
valueプロパティで提供される URL は、メッセージ拡張機能の構成がトリガーされたときに Teams ダイアログとして URL を開く Web ページをホストする必要があります。認証が必要な場合は、サインインが成功したときに、ページで Teams 認証を使用し、
authentication.notifySuccess()を呼び出す必要があります。ユーザー入力を収集した後、ページは、構成値を Teams に返送する
notifySuccess(configData)を呼び出して、セットアップが成功したことを Teams に通知する必要があります。microsoftTeams.app.initialize(); function submitConfig() { const configData = { setting1: "User-selected value", setting2: "Another value" }; microsoftTeams.authentication.notifySuccess(configData); }notifySuccess()が実行されると、構成ウィンドウが自動的に閉じられ、メッセージ拡張機能が正常に設定されます。
auth 応答の種類
サービスでユーザー認証が必要な場合、ユーザーはメッセージ拡張機能を使用する前にサインインする必要があります。 詳細については、「 認証」を参照してください。
message 応答の種類
message応答は、拡張機能でプレーン テキスト メッセージを表示する必要がある場合に使用されます。
message応答の種類では、書式設定はサポートされていません。
次のコード スニペットは、アプリから返される message 応答の例です。
return new MessagingExtensionResponse
{
ComposeExtension = new MessagingExtensionResult
{
Type = "message",
Text = "Here is the message you want to show!"
}
};
result 応答の種類
結果の一覧は、各項目のプレビューを含むMicrosoft Teams UI に表示されます。 プレビューは、次の 2 つの方法のいずれかで生成されます。
-
attachmentオブジェクト内でpreviewプロパティを使用する。preview添付ファイルには、ヒーローまたはサムネイル カードのみを指定できます。 -
attachmentオブジェクトの基本的なtitle、text、imageプロパティから抽出します。 基本プロパティは、previewプロパティが指定されていない場合にのみ使用されます。
注:
メッセージ拡張機能の検索結果では、パディングはサポートされていません。
Teams では、次のカードの種類がサポートされています。
ヒーローまたはサムネイル カードの場合、呼び出しアクションを除き、ボタンやタップなどの他のアクションはプレビュー カードではサポートされていません。 ヒーロー カードとサムネイル カードの場合、プレビュー プロパティを指定する必要はありません。プレビューは既定で生成されます。 カードについて知り、サムネイルとヒーローのカードの種類を使用する方法については、「カードとは何か」を参照し、カードとカードアクションを追加します。
Microsoft 365 グループのアダプティブ カードまたはコネクタ カードを送信するには、プレビューを含める必要があります。
preview プロパティはヒーローまたはサムネイルのカードである必要があり、それぞれのカードはプレビューとして生成されます。
preview プロパティが attachment オブジェクトで指定されていない場合、プレビューは生成されません。 詳細については、「Microsoft 365 グループにコネクタ カードを使用する」を参照してください。
応答の例
protected override async Task<MessagingExtensionResponse> OnTeamsMessagingExtensionQueryAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionQuery query, CancellationToken cancellationToken)
{
var text = query?.Parameters?[0]?.Value as string ?? string.Empty;
// Searches NuGet for a package.
var obj = JObject.Parse(await (new HttpClient()).GetStringAsync($"https://azuresearch-usnc.nuget.org/query?q=id:{text}&prerelease=true"));
var packages = obj["data"].Select(item => (item["id"].ToString(), item["version"].ToString(), item["description"].ToString()));
// We take every row of the results and wrap them in cards wrapped in in MessagingExtensionAttachment objects.
// The Preview is optional, if it includes a Tap, that will trigger the OnTeamsMessagingExtensionSelectItemAsync event back on this bot.
var attachments = packages.Select(package => new MessagingExtensionAttachment
{
ContentType = HeroCard.ContentType,
Content = new HeroCard { Title = package.Item1 },
Preview = new HeroCard { Title = package.Item1, Tap = new CardAction { Type = "invoke", Value = package } }.ToAttachment()
})
.ToList();
// The list of MessagingExtensionAttachments must we wrapped in a MessagingExtensionResult wrapped in a MessagingExtensionResponse.
return new MessagingExtensionResponse
{
ComposeExtension = new MessagingExtensionResult
{
Type = "result",
AttachmentLayout = "list",
Attachments = attachments
}
};
}
タップ アクションを有効にして処理する
ユーザーがメッセージ拡張機能検索クエリから結果を選択すると、プレビュー カードに、定義された説明と Tap アクションが表示されます。 Tap アクションには、送信されたカードの Tap ボタンとして表示される必要な値プロパティが割り当てられている必要があります。
protected override Task<MessagingExtensionResponse> OnTeamsMessagingExtensionSelectItemAsync(ITurnContext<IInvokeActivity> turnContext, JObject query, CancellationToken cancellationToken)
{
// The Preview card's Tap should have a Value property assigned, this will be returned to the bot in this event.
var (packageId, version, description, projectUrl, iconUrl) = query.ToObject<(string, string, string, string, string)>();
var card = new ThumbnailCard
{
Title = "Card Select Item",
Subtitle = description
};
var attachment = new MessagingExtensionAttachment
{
ContentType = ThumbnailCard.ContentType,
Content = card,
};
return Task.FromResult(new MessagingExtensionResponse
{
ComposeExtension = new MessagingExtensionResult
{
Type = "result",
AttachmentLayout = "list",
Attachments = new List<MessagingExtensionAttachment> { attachment }
}
});
}
既定のクエリ
マニフェストで initialRun を true に設定Microsoft Teams、ユーザーが最初にメッセージ拡張機能を開いたときに 既定 のクエリを発行します。 サービスは、事前設定された結果のセットを使用して、このクエリに応答できます。 これは、検索コマンドで認証または構成が必要な場合、最近表示されたアイテム、お気に入り、またはユーザー入力に依存しないその他の情報を表示する場合に便利です。
既定のクエリは、通常のユーザー クエリと同じ構造を持ちますが、次のオブジェクトに示すように、 initialRun という名前のパラメーターが trueの文字列値に設定されている点が異なります。
{
"type": "invoke",
"name": "composeExtension/query",
"value": {
"commandId": "searchCmd",
"parameters": [
{
"name": "initialRun",
"value": "true"
}
],
"queryOptions": {
"skip": 0,
"count": 25
}
},
⋮
}
コード サンプル
| サンプルの名前 | 説明 | .NET | Node.js | マニフェスト |
|---|---|---|---|---|
| Teams メッセージ拡張機能検索 | このサンプルでは、ユーザーが NuGet パッケージを検索し、結果をカードとして取得できるようにするメッセージ拡張機能を Teams で作成する方法を示します。 | 表示 | 表示 | 表示 |
| Teams メッセージ拡張機能の認証と構成 | このサンプルでは、Teams のメッセージ拡張機能に認証を実装し、セキュリティで保護されたアクセスとユーザー固有の操作を有効にする方法を示します。 | 表示 | 表示 | 表示 |
次の手順
関連項目
Platform Docs