重要
このセクションのコード サンプルは、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-subdomain>"
}
]
},
"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()
が実行されると、構成ウィンドウが自動的に閉じられ、メッセージ拡張機能が正常に設定されます。
result
応答の種類
結果の一覧は、各項目のプレビューを含むMicrosoft Teams UI に表示されます。 プレビューは、次の 2 つの方法のいずれかで生成されます。
-
attachment
オブジェクト内でpreview
プロパティを使用する。preview
添付ファイルには、ヒーローまたはサムネイル カードのみを指定できます。 -
attachment
オブジェクトの基本的なtitle
、text
、image
プロパティから抽出します。 基本プロパティは、preview
プロパティが指定されていない場合にのみ使用されます。
注:
メッセージ拡張機能の検索結果では、パディングはサポートされていません。
Teams では、次のカードの種類がサポートされています。
ヒーローまたはサムネイルのカード
ヒーローまたはサムネイル カードの場合、呼び出しアクションを除き、ボタンやタップなどの他のアクションはプレビュー カードではサポートされていません。 ヒーロー カードとサムネイル カードの場合、プレビューは既定で生成されるため、 preview
プロパティを指定する必要はありません。 カードについて知り、サムネイルとヒーローのカードの種類を使用する方法については、「カードとは何か」を参照し、カードとカードアクションを追加します。
アダプティブ カードまたはコネクタ カード
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
}
};
}
タップ アクションを有効にして処理する
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、ユーザーが最初にメッセージ拡張機能を開いたときに 既定 のクエリを発行します。 サービスは、事前設定された結果のセットを使用して、このクエリに応答できます。 これは、検索コマンドで認証または構成が必要な場合、最近表示されたアイテム、お気に入り、またはユーザー入力に依存しないその他の情報を表示する場合に便利です。
既定のクエリは通常のユーザー クエリと同じ構造で、 name
フィールドは initialRun
に設定され、 value
次のオブジェクトに示すように 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