Reagieren Sie auf den Suchbefehl
Wichtig
Die Codebeispiele in diesem Abschnitt basieren auf Version 4.6 und höheren Versionen des Bot Framework SDK. Wenn Sie nach Dokumentation zu früheren Versionen suchen, lesen Sie den Abschnitt Nachrichtenerweiterungen – v3 SDK im Ordner Ressourcen der Dokumentation.
Nachdem der Benutzer den Suchbefehl übermittelt hat, empfängt Ihr Webdienst eine composeExtension/query
Aufrufnachricht, die ein value
-Objekt mit den Suchparametern enthält. Der Aufruf wird mit den folgenden Bedingungen ausgelöst:
- Wenn Zeichen in das Suchfeld eingegeben werden.
-
initialRun
ist in Ihrem App-Manifest auf TRUE festgelegt, und Sie erhalten die Aufrufnachricht, sobald der Suchbefehl aufgerufen wird. Weitere Informationen finden Sie unter Standardabfrage.
In diesem Dokument erfahren Sie, wie Sie auf Benutzeranforderungen in Form von Karten und Vorschauen reagieren und unter welchen Bedingungen Microsoft Teams eine Standardabfrage ausgibt.
Die Anforderungsparameter befinden sich im value
-Objekt in der Anforderung, das die folgenden Eigenschaften enthält:
Eigenschaftenname | Zweck |
---|---|
commandId |
Der Name des vom Benutzer aufgerufenen Befehls, der mit einem der im App-Manifest deklarierten Befehle übereinstimmt. |
parameters |
Array von Parametern. Jedes Parameterobjekt enthält den Parameternamen zusammen mit dem vom Benutzer bereitgestellten Parameterwert. |
queryOptions |
Paginierungsparameter:skip : Anzahl für diese Abfrage überspringencount : Anzahl der zurückzugebenden Elemente. |
protected override async Task<MessagingExtensionResponse> OnTeamsMessagingExtensionQueryAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionQuery query, CancellationToken cancellationToken)
{
// Code to handle the query.
}
Reagieren auf Benutzeranforderungen
Wenn der Benutzer eine Abfrage ausführt, stellt Microsoft Teams eine synchrone HTTP-Anforderung an Ihren Dienst. An diesem Punkt hat 5
Ihr Code Sekunden, um eine HTTP-Antwort auf die Anforderung bereitzustellen. Während dieser Zeit kann Ihr Dienst weitere Suchvorgänge oder eine andere Geschäftslogik durchführen, die für die Anforderung erforderlich ist.
Ihr Dienst muss mit den Ergebnissen antworten, die der Benutzerabfrage entsprechen. Die Antwort muss einen HTTP-Statuscode von 200 OK
und eine gültige Anwendung oder ein JSON-Objekt mit den folgenden Eigenschaften angeben:
Eigenschaftenname | Zweck |
---|---|
composeExtension |
Antwortumschlag der obersten Ebene. |
composeExtension.type |
Typ der Antwort. Die folgenden Typen werden unterstützt:result : Zeigt eine Liste der Suchergebnisse an.auth : Fordert den Benutzer zur Authentifizierung auf.config : Fordert den Benutzer auf, die Nachrichtenerweiterung einzurichten.message : Zeigt eine Nur-Text-Nachricht an |
composeExtension.attachmentLayout |
Gibt das Layout der Anlagen an. Wird für Antworten vom Typ result verwendet. Die folgenden Typen werden unterstützt: list : Eine Liste von Kartenobjekten, die Miniaturansichten, Titel und Textfelder enthaltengrid : Ein Raster mit Miniaturansichten |
composeExtension.attachments |
Array gültiger Anlagenobjekte. Wird für Antworten vom Typ result verwendet. Die folgenden Typen werden unterstützt: application/vnd.microsoft.card.thumbnail application/vnd.microsoft.card.hero application/vnd.microsoft.teams.card.o365connector application/vnd.microsoft.card.adaptive |
composeExtension.suggestedActions |
Vorgeschlagene Aktionen. Wird für Antworten vom Typ auth oder config verwendet. |
composeExtension.text |
Anzuzeigende Meldung. Wird für Antworten vom Typ message verwendet. |
Konfigurationsantwort
Konfigurationsantwort sind die Daten, die vom Server oder der Anwendung zum Konfigurieren und Aktivieren der Nachrichtenerweiterung innerhalb der Messagingplattform zurückgegeben werden. Der folgende Code ist ein Beispiel für die Konfiguration der Nachrichtenerweiterung:
{
"name": "composeExtension/submitAction",
"type": "invoke",
"timestamp": "2024-03-08T14:10:47.575Z",
"localTimestamp": "2024-03-08T19:40:47.575+05:30",
"id": "f:7dfe18de-94e3-9f38-5d44-adeb31cd8243",
"channelId": "msteams",
"serviceUrl": "https://smba.trafficmanager.net/amer/",
"from": {
"id": "29:1PBlnIsEROUYzpFjULDVodMHrnpujmfhBdQAf0pcO1EkaDkhI0_Pj_ql-jZUYOGdSc3_KcqaIIjzbleraVJ2Z3g",
"name": "MOD Administrator",
"aadObjectId": "ce9def33-d7fc-444c-8728-be1f95e6b6f2"
},
"conversation": {
"isGroup": true,
"conversationType": "groupChat",
"tenantId": "4ad59956-0f88-4b88-a9d0-570b6eb4e66b",
"id": "19:1dd50ba7-e5bd-46ea-b34e-80a415148de7_ce9def33-d7fc-444c-8728-be1f95e6b6f2@unq.gbl.spaces"
},
"recipient": {
"id": "28:9a2b01fc-88c1-40e1-bf87-5079c8e35626",
"name": "PSDAzureBot"
},
"entities": [
{
"locale": "en-GB",
"country": "GB",
"platform": "Web",
"timezone": "Asia/Calcutta",
"type": "clientInfo"
}
],
"channelData": {
"tenant": {
"id": "4ad59956-0f88-4b88-a9d0-570b6eb4e66b"
},
"source": {
"name": "compose"
}
},
"value": {
"commandId": "razorView",
"commandContext": "compose",
"data": {
"Title": "Welcome to RazorView!",
"DisplayData": " Today's date is 8-3-2024, Friday"
},
"context": {
"theme": "default"
}
},
"locale": "en-GB",
"localTimezone": "Asia/Calcutta"
}
Die folgende Antwort ist die Konfigurationsantwort, die angezeigt wird, wenn der Benutzer mit der Compose-Erweiterung interagiert:
{
"composeExtension": {
"type": "config",
"suggestedActions": {
"actions": [
{
"type": "openUrl",
"value": "https://7a03-2405-201-a00c-7191-b472-ff64-112d-f806.ngrok-free.app"
}
]
}
}
}
Antwortkartentypen und Vorschauen
Hinweis
Die Suchergebnisse der Nachrichtenerweiterung unterstützen kein Auffüllen.
Teams unterstützt die folgenden Kartentypen:
Um ein besseres Verständnis und einen besseren Überblick über Karten zu erhalten, sehen Sie , was Karten sind.
Informationen zum Verwenden der Miniaturansichts- und Herokartentypen finden Sie unter Hinzufügen von Karten und Kartenaktionen.
Weitere Informationen zur Connectorkarte für Microsoft 365-Gruppen finden Sie unter Verwenden von Connectorkarten für Microsoft 365-Gruppen.
Die Ergebnisliste wird auf der Microsoft Teams-Benutzeroberfläche mit einer Vorschau der einzelnen Elemente angezeigt. Die Vorschau wird auf eine der beiden Arten generiert:
- Verwenden der
preview
-Eigenschaft imattachment
-Objekt. Diepreview
Anlage kann nur eine Hero- oder Miniaturansichtskarte sein. - Extrahieren aus den grundlegenden
title
Eigenschaften ,text
undimage
desattachment
-Objekts. Die grundlegenden Eigenschaften werden nur verwendet, wenn diepreview
Eigenschaft nicht angegeben ist.
Für die Hero- oder Miniaturansichtskarte werden mit Ausnahme der Aufrufaktion andere Aktionen wie Schaltflächen und Tippen in der Vorschaukarte nicht unterstützt.
Um eine adaptive Karte oder Eine Connectorkarte für Microsoft 365-Gruppen zu senden, müssen Sie eine Vorschau einschließen. Die preview
Eigenschaft muss eine Hero- oder Miniaturansichtskarte sein. Wenn Sie die Vorschaueigenschaft im attachment
-Objekt nicht angeben, wird keine Vorschau generiert.
Für Hero- und Miniaturansichtskarten müssen Sie keine Vorschaueigenschaft angeben, es wird standardmäßig eine Vorschau generiert.
Anforderungsbeispiel
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
}
};
}
Aktivieren und Behandeln von Tippaktionen
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 }
}
});
}
Standardabfrage
Wenn Sie im Manifest auf true
festlegeninitialRun
, gibt Microsoft Teams eine Standardabfrage aus, wenn der Benutzer die Nachrichtenerweiterung zum ersten Mal öffnet. Ihr Dienst kann auf diese Abfrage mit einer Reihe vorab aufgefüllter Ergebnisse antworten. Dies ist nützlich, wenn Ihr Suchbefehl eine Authentifizierung oder Konfiguration erfordert, die zuletzt angezeigten Elemente, Favoriten oder andere Informationen anzeigt, die nicht von der Benutzereingabe abhängig sind.
Die Standardabfrage hat dieselbe Struktur wie jede reguläre Benutzerabfrage, wobei das name
Feld auf initialRun
und value
auf true
festgelegt ist, wie im folgenden Objekt gezeigt:
{
"type": "invoke",
"name": "composeExtension/query",
"value": {
"commandId": "searchCmd",
"parameters": [
{
"name": "initialRun",
"value": "true"
}
],
"queryOptions": {
"skip": 0,
"count": 25
}
},
⋮
}
Codebeispiel
Beispielname | Beschreibung | .NET | Node.js | Manifest |
---|---|---|---|---|
Teams Nachrichtenerweiterungen – Suche | In diesem Beispiel wird gezeigt, wie Sie eine suchbasierte Nachrichtenerweiterung erstellen. Es durchsucht Nudget-Pakete und zeigt die Ergebnisse in der suchbasierten Messagingerweiterung an. | View | View | View |
Authentifizierung und Konfiguration der Teams-Nachrichtenerweiterung | Dieses Beispiel zeigt eine Nachrichtenerweiterung, die über eine Konfigurationsseite verfügt, Suchanforderungen akzeptiert und Ergebnisse zurückgibt, nachdem sich der Benutzer angemeldet hat. Es zeigt auch, dass keine App-Installationslinks entfurling zusammen mit normalem Link-Entfurling | View | View | View |
Nächster Schritt
Siehe auch
Platform Docs