Reagieren Sie auf den Suchbefehl

Hinweis

Agents bieten eine flexiblere, intelligentere und zukunftsfähigere Erfahrung, die umfangreichere Denkprozesse, eine einfachere Entwicklung und eine bessere Abstimmung mit den sich entwickelnden Teams und der Microsoft 365-Plattform ermöglicht. Es wird empfohlen, Agents zu untersuchen und zu erstellen.

Weitere Informationen finden Sie unter Erstellen deklarativer Agents und Build-Agents in Teams.

Wenn Sie über eine Bot-basierte Nachrichtenerweiterung verfügen, können Sie diese auch als Agent erweitern .

Nachdem der Benutzer den Suchbefehl übermittelt hat, erhält der Webdienst eine composeExtension/query Aufrufnachricht, die ein value Objekt mit den Suchparametern enthält. Der Aufruf wird durch die folgenden Bedingungen ausgelöst:

  • Da werden Zeichen in das Suchfeld eingegeben.
  • initialRun in Ihrem App-Manifest auf "true" festgelegt ist. 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 und umfassen die folgenden Eigenschaften:

Eigenschaftenname Zweck
commandId Der Name des vom Benutzer aufgerufenen Befehls, der einem der im App-Manifest deklarierten Befehle entspricht.
parameters Array von Parametern. Jedes Parameterobjekt enthält den Parameternamen zusammen mit dem vom Benutzer bereitgestellten Parameterwert.
queryOptions Paginierungsparameter:
skip: Anzahl der Sprünge für diese Abfrage
count: Anzahl der zurückzugebenden Elemente.
teams.OnQuery(async (context, cancellationToken) =>
{ 
  MessageExtensionQuery? value = context.Activity.Value;
  var commandId = value?.CommandId;
  var parameters = value?.Parameters;
    var query = parameters?.FirstOrDefault()?.Value?.ToString() ?? ""; 
    // Code to handle the query. 
});

Reagieren auf Benutzeranforderungen

Wenn der Benutzer eine Abfrage durchführt, sendet Microsoft Teams eine synchrone HTTP-Anforderung an Ihren Dienst. An diesem Punkt hat Ihr Code fünf Sekunden Zeit, um eine HTTP-Antwort auf die Anforderung bereitzustellen. Während dieser Zeit kann Ihr Dienst weitere Suchvorgänge oder jede andere Geschäftslogik durchführen, die für die Verarbeitung der Anforderung erforderlich ist.

Ihr Dienst muss mit den Ergebnissen antworten, die mit der Benutzerabfrage übereinstimmen. Die Antwort muss einen HTTP-Statuscode 200 OK und eine gültige Anwendung oder ein gültiges JSON-Objekt mit den folgenden Eigenschaften angeben:

Eigenschaftenname Zweck
composeExtension Antworthüllkurve der obersten Ebene.
composeExtension.type Art der Antwort. Die folgenden Typen werden unterstützt:
result: Zeigt eine Liste der Suchergebnisse an
auth: Prompts den Benutzer zur Authentifizierung
config: Prompts den Benutzer, die Nachrichtenerweiterung einzurichten
message: Zeigt eine Nur-Text-Nachricht an
composeExtension.attachmentLayout Gibt das Layout der Anlagen an. Wird für Antworten des Typs result.
Die folgenden Typen werden unterstützt:
list: Eine Liste von Karten-Objekten, die Miniaturansichts-, Titel- und Textfelder enthalten
grid: Ein Raster mit Miniaturansichten
composeExtension.attachments Array gültiger Anlagenobjekte. Wird für Antworten des Typs result.
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 des Typs auth oder configverwendet.
composeExtension.text Anzuzeigende Meldung. Wird für Antworten des Typs message.

config response

Die config Antwort sind die Daten, die vom Server oder der App zurückgegeben werden, um die Nachrichtenerweiterung innerhalb der Messagingplattform zu konfigurieren und zu aktivieren. Wenn ein Benutzer die Nachrichtenerweiterung zum ersten Mal konfiguriert, wird eine config Antwort verwendet, um den Benutzer aufzufordern, die Nachrichtenerweiterung einzurichten und alle erforderlichen Konfigurationen vorzunehmen.

Der folgende Codeausschnitt zeigt die Antwort, die config angezeigt wird, wenn der Benutzer mit der Nachrichtenerweiterung interagiert:

{
    "composeExtension": {
        "suggestedActions": {
            "actions": [
                {
                    "type": "openUrl",
                    "title": "Open url",
                    "value": "https://<your-tunnel-url>/searchSettings.html?settings="
                }
            ]
        },
        "type": "config"
    },
    "responseType": "composeExtension"
}

Die config Antwort umfasst:

  • Die value Eigenschaft, die eine URL zum Öffnen einer Konfigurationsseite in einem Teams-Dialogfeld enthält, in dem Benutzer die erforderlichen Details eingeben und die Konfiguration übermitteln können. Einige Beispiele für diese value Eigenschaft sind:
    • https://<your-subdomain>.ngrok-free.app/searchSettings.html
    • https://<your-subdomain>.devtunnels.ms/searchSettings.html.
  • Das type Feld innerhalb composeExtension von ist festgelegt auf config, was die Art dieser Antwort als Konfiguration angibt.
  • Derjenige responseType , der diese Antwort identifiziert, ist für die composeExtension der App.

Der Screenshot zeigt die Konfigurationsantwort für die Nachrichtenerweiterung.

Initialisieren Sie das Teams-SDK auf der Konfigurationsseite, und verwenden Sie authentication.notifySuccess() es, um die gesammelten Konfigurationsdaten zurück an Teams zu senden. submitConfig() die Funktion veranschaulicht, wie Konfigurationswerte strukturiert und zurückgegeben werden, nachdem der Benutzer den Setupvorgang abgeschlossen hat.

So schließen Sie den Konfigurationsfluss für die Nachrichtenerweiterung ab:

  1. Die in der value Eigenschaft angegebene URL muss eine Webseite hosten, die die URL als Teams-Dialogfeld öffnet, wenn die Konfiguration der Nachrichtenerweiterung ausgelöst wird.

  2. Wenn eine Authentifizierung erforderlich ist, muss die Seite die Teams-Authentifizierung verwenden und nach erfolgreicher Anmeldung aufrufen authentication.notifySuccess() .

  3. Nach dem Sammeln von Benutzereingaben muss die Seite Teams über die erfolgreiche Einrichtung durch einen Aufruf notifySuccess(configData) benachrichtigen, der die Konfigurationswerte zurück an Teams sendet:

      microsoftTeams.app.initialize();
    
      function submitConfig() {
          const configData = {
              setting1: "User-selected value",
              setting2: "Another value"
          };
    
          microsoftTeams.authentication.notifySuccess(configData);
      }
    
  4. Nach notifySuccess() der Ausführung schließt sich das Konfigurationsfenster automatisch, und die Nachrichtenerweiterung wird erfolgreich eingerichtet.

auth Antworttyp

Wenn Ihr Dienst eine Benutzerauthentifizierung erfordert, müssen sich die Benutzer anmelden, bevor sie die Nachrichtenerweiterung verwenden. Weitere Informationen finden Sie unter Authentifizierung.

message Antworttyp

Eine message Antwort wird verwendet, wenn Ihre Erweiterung eine Nur-Text-Nachricht anzeigen muss. Der message Antworttyp unterstützt keine Formatierung.

Der folgende Codeausschnitt ist ein Beispiel für eine message Antwort, die von der App zurückgegeben wird:

return new MsgExt.Response
{
    ComposeExtension = new MsgExt.Result
    {
        Type = MsgExt.ResultType.Message,
        Text = "Here is the message you want to show!"
    }
};

Der Screenshot zeigt den Antworttyp der Nachricht.

result Antworttyp

Die Ergebnisliste wird in der Microsoft Teams-Benutzeroberfläche mit einer Vorschau jedes Elements angezeigt. Die Vorschau wird auf eine der beiden folgenden Arten generiert:

  • Verwenden der preview Eigenschaft innerhalb des attachment Objekts. Bei der preview Anlage kann es sich nur um eine Hero- oder eine Miniaturansichten-Karte handeln.
  • Extrahieren aus den grundlegenden title, textund image Eigenschaften des attachment Objekts. Die grundlegenden Eigenschaften werden nur verwendet, wenn die preview Eigenschaft nicht angegeben ist.

Hinweis

Suchergebnisse in Nachrichtenerweiterungen unterstützen keine Auffüllung.

Teams unterstützt die folgenden Kartentypen:

Screenshot: Ergebnisantworttyp.

Für die Hero- oder Miniaturansichten-Karte werden mit Ausnahme der Aufrufaktion andere Aktionen wie Schaltfläche und Tippen in der Vorschau-Karte nicht unterstützt. Für Hero- und Miniaturansichtskarten müssen Sie keine Vorschaueigenschaft angeben, eine Vorschau wird standardmäßig generiert. Wenn Sie mehr über Karten erfahren und lernen möchten, wie Sie die Miniaturansichts- und Hero-Karten-Typen verwenden, siehe Was sind Karten und fügen Sie Karten und Kartenaktionen hinzu.

Um eine adaptive Karte oder Connector-Karte für Microsoft 365-Gruppen zu senden, müssen Sie eine Vorschau einschließen. Die preview Eigenschaft muss eine Hero- oder Miniaturansichts-Karte sein, und die entsprechende Karte wird als Vorschau generiert. Wenn im attachment Objekt keine preview Eigenschaft angegeben ist, wird keine Vorschau generiert. Weitere Informationen finden Sie unter Verwenden von Connectorkarten für Microsoft 365-Gruppen.

Anforderungsbeispiel

teams.OnQuery(async (context, cancellationToken) =>
{ 
  MessageExtensionQuery? value = context.Activity.Value;
  var commandId = value?.CommandId;
  var parameters = value?.Parameters;
    var query = parameters?.FirstOrDefault()?.Value?.ToString() ?? ""; 
 
    var attachments = new List<TeamsAttachment>(); 
 
    // Route to appropriate search 
    if (commandId == "wikipediaSearch") 
    { 
        var results = await SearchWikipedia(query); 
        attachments = results.Select(r => 
        { 
            var title = r["title"]?.ToString() ?? "No Title"; 
            var snippet = Regex.Replace(r["snippet"]?.ToString() ?? "", "<[^>]+>", ""); 
            return CreateAttachment(CreateWikipediaCard(r), title, snippet); 
        }).ToList(); 
    } 
 
    if (attachments.Count == 0) 
    { 
        return new MsgExt.Response 
        { 
            ComposeExtension = new MsgExt.Result 
            { 
                Type = MsgExt.ResultType.Message, 
                Text = $"No results found for '{query}'" 
            } 
        }; 
    } 
 
    return new MsgExt.Response 
    { 
        ComposeExtension = new MsgExt.Result 
        { 
            Type = MsgExt.ResultType.Result, 
            AttachmentLayout = Attachment.Layout.List, 
            Attachments = attachments 
        } 
    }; 
});

Aktivieren und Behandeln von Tippaktionen

Wenn ein Benutzer ein Ergebnis aus der Suchabfrage für die Nachrichtenerweiterung auswählt, zeigt die Vorschau-Karte die Beschreibung und die definierten Tippaktionen an. Der Tippaktion muss die Eigenschaft "erforderlicher Wert" zugewiesen sein, die auf der gesendeten Karte als Schaltfläche Tippen angezeigt wird.

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 dies im Manifest festlegen initialRuntrue , 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 ausgefüllter Ergebnisse antworten. Dies ist nützlich, wenn Ihr Suchbefehl eine Authentifizierung oder Konfiguration erfordert, sodass zuletzt angezeigte Elemente, Favoriten oder andere Informationen angezeigt werden, die nicht von Benutzereingaben abhängig sind.

Die Standardabfrage hat die gleiche Struktur wie jede normale Benutzerabfrage, außer dass sie einen Parameter namens initialRun hat, der auf den Zeichenfolgenwert festgelegt trueist, 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 Python Manifest
Bot-Nachrichtenerweiterungen Dieses Beispiel zeigt eine suchbasierte Messaging-Erweiterung in Microsoft Teams, mit der Benutzer nach Wikipedia-Artikeln suchen können. Die Erweiterung unterstützt Suchbefehle, Elementauswahl und Linkentfaltung. View View View –
Auth und Konfiguration der Teams-Nachrichtenerweiterung Dieses Beispiel zeigt, wie die Authentifizierung in einer Nachrichtenerweiterung für Teams implementiert wird, um sicheren Zugriff und benutzerspezifische Interaktionen zu ermöglichen. View View View View

Nächster Schritt

Siehe auch