Unterhaltungsereignisse in Ihrem Teams-Bot

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 bots – v3 SDK im Ordner Legacy SDKs der Dokumentation.

Wenn Sie Unterhaltungs-Bots für Microsoft Teams erstellen, können Sie mit Unterhaltungsereignissen arbeiten. Microsoft Teams sendet Benachrichtigungen an Ihren Bot für Unterhaltungsereignisse, die in Bereichen stattfinden, in denen Ihr Bot aktiv ist. Sie können diese Ereignisse in Ihrem Code erfassen und die folgenden Aktionen ausführen:

  • Auslösen einer Willkommensnachricht, wenn Ihr Bot einem Team hinzugefügt ist.
  • Auslösen einer Willkommensnachricht, wenn ein neues Teammitglied hinzugefügt oder eins entfernt wird.
  • Auslösen einer Benachrichtigung, wenn ein Kanal erstellt, umbenannt oder gelöscht wird.
  • Auslösen einer Benachrichtigung, wenn eine Botnachricht von einem Benutzer mit „Gefällt mir“ markiert wird.
  • Identifizieren Sie den Standardkanal für Ihren Bot anhand der Benutzereingabe (Auswahl) während der Installation.

Aktualisierungsereignisse in Unterhaltungen

Sie können Unterhaltungsaktualisierungsereignisse verwenden, um bessere Benachrichtigungen und effektive Botaktionen bereitzustellen.

Wichtig

  • Sie können jederzeit neue Ereignisse hinzufügen, und Ihr Bot beginnt, sie zu empfangen.
  • Sie müssen Ihren Bot so entwerfen, dass er unerwartete Ereignisse empfängt.
  • Wenn Sie das Bot Framework SDK verwenden, antwortet Ihr Bot automatisch mit einem 200 - OK auf jedes Ereignis, das Sie nicht behandeln möchten.
  • Wenn ein Azure Communication Services -Client (ACS) der Teams-Besprechung beitritt oder diese verlässt, werden keine Konversationsaktualisierungsereignisse ausgelöst.

Ein Bot empfängt in einem der folgenden Fälle ein conversationUpdate Ereignis:

  • Wenn der Bot einer Unterhaltung hinzugefügt wird.
  • Andere Mitglieder werden einer Unterhaltung hinzugefügt oder daraus entfernt.
  • Unterhaltungsmetadaten wurden geändert.

Das conversationUpdate-Ereignis wird an Ihren Bot gesendet, wenn er Informationen zu Mitgliedschaftsaktualisierungen für Teams empfängt, denen er hinzugefügt wurde. Er empfängt außerdem eine Aktualisierung, wenn er zum ersten Mal hinzugefügt wurde, speziell für persönliche Unterhaltungen.

In der folgenden Tabelle finden Sie eine Liste mit Teams-Unterhaltungsaktualisierungsereignissen mit weiteren Details:

Unternommene Aktion EventType Aufgerufene Methode Beschreibung Bereich
Kanal erstellt channelCreated OnTeamsChannelCreatedAsync Ein Kanal wurde erstellt. Team
Kanal umbenannt channelRenamed OnTeamsChannelRenamedAsync Ein Kanal wurde umbenannt. Team
Kanal gelöscht ChannelDeleted OnTeamsChannelDeletedAsync Ein Kanal wurde gelöscht. Team
Kanal wiederhergestellt channelRestored OnTeamsChannelRestoredAsync Ein Kanal wurde wiederhergestellt. Team
Mitglieder hinzugefügt MembersAdded OnTeamsMembersAddedAsync Ein Mitglied wurde hinzugefügt. Alle
Mitglieder entfernt MembersRemoved OnTeamsMembersRemovedAsync Ein Mitglied wurde entfernt. Alle
Team umbenannt teamRenamed OnTeamsTeamRenamedAsync Ein Team wurde umbenannt. Team
Team gelöscht TeamDeleted OnTeamsTeamDeletedAsync Ein Team wurde gelöscht. Team
Team archiviert teamArchived OnTeamsTeamArchivedAsync Ein Team wurde archiviert. Team
Team-Archivierung rückgängig gemacht teamUnarchived OnTeamsTeamUnarchivedAsync Ein Team wurde nicht archiviert. Team
Team wiederhergestellt teamRestored OnTeamsTeamRestoredAsync Ein Team wurde wiederhergestellt Team

Kanal erstellt

Das channelCreated Ereignis wird immer dann an Ihren Bot gesendet, wenn ein neuer Kanal in einem Team erstellt wird, in dem Ihr Bot installiert ist.

Der folgende Code zeigt ein Beispiel für ein Kanalereignis, das erstellt wurde:

protected override async Task OnTeamsChannelCreatedAsync(ChannelInfo channelInfo, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    var heroCard = new HeroCard(text: $"{channelInfo.Name} is the Channel created");
    // Sends an activity to the sender of the incoming activity.
    await turnContext.SendActivityAsync(MessageFactory.Attachment(heroCard.ToAttachment()), cancellationToken);
}

Kanal umbenannt

Das channelRenamed Ereignis wird immer dann an Ihren Bot gesendet, wenn ein Kanal in einem Team umbenannt wird, in dem Ihr Bot installiert ist.

Der folgende Code zeigt ein Beispiel für ein Kanalereignis, das umbenannt wurde:

protected override async Task OnTeamsChannelRenamedAsync(ChannelInfo channelInfo, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    var heroCard = new HeroCard(text: $"{channelInfo.Name} is the new Channel name");
    // Sends an activity to the sender of the incoming activity.
    await turnContext.SendActivityAsync(MessageFactory.Attachment(heroCard.ToAttachment()), cancellationToken);
}

Kanal gelöscht

Das channelDeleted Ereignis wird an Ihren Bot gesendet, wenn ein Kanal in einem Team gelöscht wird, in dem Ihr Bot installiert ist.

Der folgende Code zeigt ein Beispiel für ein Kanalereignis, das gelöscht wurde:

protected override async Task OnTeamsChannelDeletedAsync(ChannelInfo channelInfo, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    var heroCard = new HeroCard(text: $"{channelInfo.Name} is the Channel deleted");
    await turnContext.SendActivityAsync(MessageFactory.Attachment(heroCard.ToAttachment()), cancellationToken);
}

Kanal wiederhergestellt

Das channelRestored Ereignis wird an Ihren Bot gesendet, wenn ein zuvor gelöschter Kanal in einem Team wiederhergestellt wird, in dem Ihr Bot bereits installiert ist.

Der folgende Code zeigt ein Beispiel für ein Kanalereignis, das wiederhergestellt wurde:

protected override async Task OnTeamsChannelRestoredAsync(ChannelInfo channelInfo, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    var heroCard = new HeroCard(text: $"{channelInfo.Name} is the Channel restored.");
    await turnContext.SendActivityAsync(MessageFactory.Attachment(heroCard.ToAttachment()), cancellationToken);
}

Mitglieder hinzugefügt

In den folgenden Szenarien wird ein Mitglied hinzugefügtes Ereignis an Ihren Bot gesendet:

  1. Wenn der Bot selbst installiert und einer Unterhaltung hinzugefügt wird

    Im Teamkontext wird die conversation.id der Aktivität auf den id des Kanals festgelegt, den der Benutzer während der App-Installation ausgewählt hat, oder auf den Kanal, in dem der Bot installiert wurde.

  2. Wenn ein Benutzer zu einer Unterhaltung hinzugefügt wird, in der der Bot installiert ist

    Benutzer-IDs, die in der Ereignisnutzlast empfangen werden, sind für den Bot eindeutig und können für die zukünftige Verwendung zwischengespeichert werden, z. B. für das direkte Senden eines Benutzers.

Die vom Mitglied hinzugefügte Aktivität eventType wird auf teamMemberAdded festgelegt, wenn das Ereignis aus einem Teamkontext gesendet wird. Überprüfen Sie Activity das -Objekt von turnContext, um festzustellen, ob das neu hinzugefügte Element der Bot selbst oder ein Benutzer war. Wenn die MembersAdded Liste ein -Objekt enthält, wobei id mit dem id Feld des Recipient Objekts identisch ist, ist der hinzugefügte Member der Bot, andernfalls ist es ein Benutzer. Die des Bots id ist als 28:<MicrosoftAppId>formatiert.

Tipp

Verwenden Sie das InstallationUpdate -Ereignis , um zu bestimmen, wann Ihr Bot einer Unterhaltung hinzugefügt oder daraus entfernt wird.

Der folgende Code zeigt ein Beispiel für ein Ereignis, das von Teammitgliedern hinzugefügt wurde:

protected override async Task OnTeamsMembersAddedAsync(IList<TeamsChannelAccount> teamsMembersAdded , TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    foreach (TeamsChannelAccount member in teamsMembersAdded)
    {
        if (member.Id == turnContext.Activity.Recipient.Id)
        {
            // Send a message to introduce the bot to the team.
            var heroCard = new HeroCard(text: $"The {member.Name} bot has joined {teamInfo.Name}");
            // Sends an activity to the sender of the incoming activity.
            await turnContext.SendActivityAsync(MessageFactory.Attachment(heroCard.ToAttachment()), cancellationToken);
        }
        else
        {
            var heroCard = new HeroCard(text: $"{member.Name} joined {teamInfo.Name}");
            // Sends an activity to the sender of the incoming activity.
            await turnContext.SendActivityAsync(MessageFactory.Attachment(heroCard.ToAttachment()), cancellationToken);
        }
    }
}

Mitglieder entfernt

In den folgenden Szenarien wird ein Ereignis zum Entfernen eines Mitglieds an Ihren Bot gesendet:

  1. Wenn der Bot selbst deinstalliert und aus einer Unterhaltung entfernt wird.
  2. Wenn ein Benutzer aus einer Unterhaltung entfernt wird, in der der Bot installiert ist.

Die Aktivität eventType "Mitglied entfernt" wird auf teamMemberRemoved festgelegt, wenn das Ereignis aus einem Teamkontext gesendet wird. Um festzustellen, ob das entfernte neue Mitglied der Bot selbst war oder ein Benutzer, überprüfen Sie das Activity-Objekt des turnContext. Wenn die MembersRemoved Liste ein -Objekt enthält, wobei id mit dem id Feld des Recipient Objekts identisch ist, ist der hinzugefügte Member der Bot, andernfalls ist es ein Benutzer. Die ID des Bots ist als 28:<MicrosoftAppId>formatiert.

Hinweis

Wenn ein Benutzer dauerhaft aus einem Mandanten gelöscht wird, wird das membersRemoved conversationUpdate-Ereignis ausgelöst.

Der folgende Code zeigt ein Beispiel für ein entferntes Ereignis der Teammitglieder:

protected override async Task OnTeamsMembersRemovedAsync(IList<ChannelAccount> membersRemoved, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    foreach (TeamsChannelAccount member in membersRemoved)
    {
        if (member.Id == turnContext.Activity.Recipient.Id)
        {
            // The bot was removed.
            // You should clear any cached data you have for this team.
        }
        else
        {
            var heroCard = new HeroCard(text: $"{member.Name} was removed from {teamInfo.Name}");
            // Sends an activity to the sender of the incoming activity.
            await turnContext.SendActivityAsync(MessageFactory.Attachment(heroCard.ToAttachment()), cancellationToken);
        }
    }
}

Team umbenannt

Ihr Bot wird benachrichtigt, wenn das Team, in dem er sich befindet, umbenannt wurde. Er empfängt ein conversationUpdate-Ereignis mit eventType.teamRenamed im channelData-Objekt.

Der folgende Code zeigt ein Beispiel für ein Teamereignis, das umbenannt wurde:

protected override async Task OnTeamsTeamRenamedAsync(TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    var heroCard = new HeroCard(text: $"{teamInfo.Name} is the new Team name");
    // Sends an activity to the sender of the incoming activity.
    await turnContext.SendActivityAsync(MessageFactory.Attachment(heroCard.ToAttachment()), cancellationToken);
}

Team gelöscht

Der Bot erhält eine Benachrichtigung, wenn das Team gelöscht wird. Er empfängt ein conversationUpdate-Ereignis mit eventType.teamDeleted im channelData-Objekt.

Der folgende Code zeigt ein Beispiel für ein Teamereignis, das gelöscht wurde:

protected override async Task OnTeamsTeamDeletedAsync(TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    // Handle delete event.
}

Team wiederhergestellt

Der Bot erhält eine Benachrichtigung, wenn ein Team nach dem Löschen wiederhergestellt wird. Er empfängt ein conversationUpdate-Ereignis mit eventType.teamrestored im channelData-Objekt.

Der folgende Code zeigt ein Beispiel für ein wiederhergestelltes Teamereignis:

protected override async Task OnTeamsTeamrestoredAsync(TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    var heroCard = new HeroCard(text: $"{teamInfo.Name} is the team name");
    // Sends an activity to the sender of the incoming activity.
    await turnContext.SendActivityAsync(MessageFactory.Attachment(heroCard.ToAttachment()), cancellationToken);
}

Team archiviert

Der Bot erhält eine Benachrichtigung, wenn das Team installiert und archiviert wird. Er empfängt ein conversationUpdate-Ereignis mit eventType.teamarchived im channelData-Objekt.

Der folgende Code zeigt ein Beispiel für ein archiviertes Teamereignis:

protected override async Task OnTeamsTeamArchivedAsync(TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    var heroCard = new HeroCard(text: $"{teamInfo.Name} is the team name");
     // Sends an activity to the sender of the incoming activity.
    await turnContext.SendActivityAsync(MessageFactory.Attachment(heroCard.ToAttachment()), cancellationToken);
}

Team-Archivierung rückgängig gemacht

Der Bot erhält eine Benachrichtigung, wenn das Team installiert und die Archivierung aufgehoben wird. Er empfängt ein conversationUpdate-Ereignis mit eventType.teamUnarchived im channelData-Objekt.

Der folgende Code zeigt ein Beispiel für ein nicht archiviertes Teamereignis:

protected override async Task OnTeamsTeamUnarchivedAsync(TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    var heroCard = new HeroCard(text: $"{teamInfo.Name} is the team name");
    // Sends an activity to the sender of the incoming activity.
    await turnContext.SendActivityAsync(MessageFactory.Attachment(heroCard.ToAttachment()), cancellationToken);
}

Nachdem Sie nun mit den Unterhaltungsaktualisierungsereignissen gearbeitet haben, können Sie die Nachrichtenreaktionsereignisse verstehen, die für verschiedene Reaktionen auf eine Nachricht auftreten.

Ereignisse bei Nachrichtenreaktionen

Das messageReaction Ereignis wird gesendet, wenn ein Benutzer Reaktionen auf eine Nachricht hinzufügt oder entfernt, die von Ihrem Bot gesendet wurde. Die replyToId enthält die ID der Nachricht und Type ist die Art der Reaktion im Textformat. Die Arten von Reaktionen umfassen wütend, Herz, breites Grinsen, gefällt mir, traurig und überrascht. Dieses Ereignis enthält nicht den Inhalt der ursprünglichen Nachricht. Wenn die Verarbeitung von Reaktionen auf Ihre Nachrichten für Ihren Bot wichtig ist, müssen Sie die Nachrichten speichern, wenn Sie sie senden. Die folgende Tabelle enthält weitere Informationen zum Ereignistyp und zu Nutzlastobjekten:

EventType Nutzdatenobjekt Beschreibung Bereich
messageReaction reactionsAdded Reaktionen, die Bot-Nachrichten hinzugefügt wurden. Alle
messageReaction reactionsRemoved Reaktionen, aus Bot-Nachrichten entfernt wurden. Alle

Zu Bot-Nachricht hinzugefügte Reaktionen

Der folgende Code zeigt ein Beispiel für Reaktionen auf eine Bot-Nachricht:

protected override async Task OnReactionsAddedAsync(IList<MessageReaction> messageReactions, ITurnContext<IMessageReactionActivity> turnContext, CancellationToken cancellationToken)
{
    foreach (var reaction in messageReactions)
    {
      var newReaction = $"You reacted with '{reaction.Type}' to the following message: '{turnContext.Activity.ReplyToId}'";
      var replyActivity = MessageFactory.Text(newReaction);
      // Sends an activity to the sender of the incoming activity.
      var resourceResponse = await turnContext.SendActivityAsync(replyActivity, cancellationToken);
    }
}

Aus Bot-Nachricht entfernte Reaktionen

Der folgende Code zeigt ein Beispiel für Reaktionen, die aus der Bot-Nachricht entfernt wurden:

protected override async Task OnReactionsRemovedAsync(IList<MessageReaction> messageReactions, ITurnContext<IMessageReactionActivity> turnContext, CancellationToken cancellationToken)
{
    foreach (var reaction in messageReactions)
    {
      var newReaction = $"You removed the reaction '{reaction.Type}' from the following message: '{turnContext.Activity.ReplyToId}'";

      var replyActivity = MessageFactory.Text(newReaction);
      // Sends an activity to the sender of the incoming activity.
      var resourceResponse = await turnContext.SendActivityAsync(replyActivity, cancellationToken);
    }
}

Installationsupdateereignis

Der Bot empfängt ein installationUpdate-Ereignis, wenn Sie einen Bot in einem Unterhaltungsthread installieren. Die Deinstallation des Bots aus dem Thread löst auch das Ereignis aus. Bei der Installation eines Bots wird im Ereignis das Feld action auf add festgelegt, und wenn der Bot deinstalliert wird, wird das Feld action auf remove festgelegt.

Hinweis

Wenn Sie ein Upgrade für eine Anwendung durchführen, empfängt der Bot das installationUpdate -Ereignis nur zum Hinzufügen oder Entfernen eines Bots aus dem Manifest. In allen anderen Fällen wird das installationUpdate Ereignis nicht ausgelöst. Das Feld Aktion ist auf add-upgrade festgelegt, wenn Sie einen Bot hinzufügen oder auf remove-upgrade, wenn Sie einen Bot entfernen.

Updateereignis installieren

Verwenden Sie das installationUpdate-Ereignis, um eine einführende Nachricht von Ihrem Bot bei der Installation zu senden. Dieses Ereignis hilft Ihnen, Ihre Datenschutz- und Datenaufbewahrungsanforderungen zu erfüllen. Sie können auch Benutzer- oder Threaddaten bereinigen und löschen, wenn der Bot deinstalliert wird.

Ähnlich wie beim conversationUpdate Ereignis, das gesendet wird, wenn ein Bot zu einem Team hinzugefügt wird, wird die conversation.id des installationUpdate Ereignisses auf die ID des Kanals festgelegt, der von einem Benutzer während der App-Installation ausgewählt wurde, oder auf den Kanal, in dem die Installation stattgefunden hat. Die ID stellt den Kanal dar, in dem der Benutzer den Bot betreiben möchte, und muss vom Bot beim Senden einer Willkommensnachricht verwendet werden. Für Szenarien, in denen die ID des Kanals "Allgemein" explizit erforderlich ist, können Sie sie in team.idchannelDataabrufen.

In diesem Beispiel wird die conversation.id der conversationUpdate Aktivitäten und installationUpdate auf die ID des Antwortkanals im Daves Demo-Team festgelegt.

Erstellen eines ausgewählten Kanals

Hinweis

Die ausgewählte Kanal-ID wird nur bei installationUpdateAdd-Ereignissen festgelegt, die gesendet werden, wenn eine App in einem Team installiert wird.

protected override async Task OnInstallationUpdateActivityAsync(ITurnContext<IInstallationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    var activity = turnContext.Activity;
    if (string.Equals(activity.Action, "Add", StringComparison.InvariantCultureIgnoreCase))
    {
        // TO:DO Installation workflow.
    }
    else
    {
        // TO:DO Uninstallation workflow.
    }
    return;
}

Sie können auch einen dedizierten Handler für add oder remove von Szenarien als alternative Methode zum Erfassen eines Ereignisses verwenden.

protected override async Task OnInstallationUpdateAddAsync(ITurnContext<IInstallationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    // TO:DO Installation workflow return;
}

Deinstallationsverhalten für eine persönliche App mit Bot

Wenn Sie eine App deinstallieren, wird der Bot ebenfalls deinstalliert. Wenn ein Benutzer eine Nachricht an Ihre App sendet, erhält er einen 403-Antwortcode. Ihr Bot erhält einen 403-Antwortcode für neue Nachrichten, die von Ihrem Bot gepostet wurden. Das Verhalten von Bots nach der Deinstallation im persönlichen Bereich und in den Bereichen Teams und groupChat ist jetzt angepasst. Sie können keine Nachrichten mehr senden oder empfangen, nachdem eine App deinstalliert wurde.

Antwortcode deinstallieren

Ereignisbehandlung für Installations- und Deinstallationsereignisse

Wenn Sie diese Installations- und Deinstallationsereignisse verwenden, gibt es einige Fälle, in denen Bots Ausnahmen beim Empfangen unerwarteter Ereignisse von Teams gewähren, was in den folgenden Fällen auftritt:

  • Sie erstellen Ihren Bot ohne das Microsoft Bot Framework SDK, und daher gibt der Bot beim Empfangen eines unerwarteten Ereignisses eine Ausnahme.
  • Sie erstellen Ihren Bot mit dem Microsoft Bot Framework SDK, und Sie können das Standardereignisverhalten ändern, indem Sie den Basisereignishandle überschreiben.

Es ist wichtig zu wissen, dass neue Ereignisse jederzeit in der Zukunft hinzugefügt werden können und Ihr Bot sie empfängt. Sie müssen also mögliche unerwarteter Ereignisse abfangen. Wenn Sie das Bot Framework SDK verwenden, antwortet Ihr Bot automatisch mit 200 – OK auf ereignisse, die Sie nicht behandeln möchten.

Behandeln von Fehlern in Unterhaltungsereignissen

Wenn bei einem Bot bei der Behandlung verschiedener Ereignisse oder Aktivitäten ein Fehler auftritt, senden Sie keine Nachrichten, die keinen aussagekräftigen Kontext für die Konversation haben, wie im folgenden Screenshot gezeigt:

Screenshot: Fehlermeldungsantwort in botunterhaltung

In der Entwicklungsphase ist es immer hilfreich, aussagekräftige Nachrichten in Unterhaltungen zu senden, die zusätzliche Details zu einem bestimmten Fehler für ein besseres Debuggen bereitstellen. In der Produktionsumgebung müssen Sie die Fehler oder Ereignisse jedoch in Azure-Anwendung Insights protokollieren. Weitere Informationen finden Sie unter Hinzufügen von Telemetriedaten zu Ihrem Bot.

Codebeispiel

Beispielname Beschreibung .NET Node.js Python Manifest
Unterhaltungs-Bot In diesem Beispiel wird gezeigt, wie Sie verschiedene Botunterhaltungsereignisse verwenden, die in Bot Framework v4 für den persönlichen Bereich und den Teams-Bereich verfügbar sind. View View View Anzeigen

Nächster Schritt

Siehe auch