Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis
- Unterstützung für Apps in freigegebenen Kanälen ist jetzt allgemein verfügbar.
- Unterstützung für Apps in privaten Kanälen ist in der öffentlichen Entwicklervorschau verfügbar.
Freigegebene und private Kanäle in Microsoft Teams ermöglichen eine flexible Zusammenarbeit innerhalb von Teams und organisationenübergreifend. Derzeit werden Bot- und Registerkarten-Apps in freigegebenen und privaten Kanälen unterstützt. Die Verwendung dieses Updates bietet mehrere Vorteile:
Freigegebene Kanäle: Ermöglichen Sie eine nahtlose Kommunikation mit internen oder externen Mitgliedern, ohne den Kontext des Benutzers zu ändern. Diese Kanäle gewährleisten eine sichere präzise Zugriffssteuerung und die Synchronisierung von Mitgliedschaften in Echtzeit.
Private Kanäle: Stellen Sie sicheren Raum für ausgewählte Teammitglieder bereit, um an vertraulichen oder vertraulichen Inhalten zusammenzuarbeiten, um Datenschutz und fokussierte Diskussionen innerhalb des Teams zu gewährleisten.
Grundlegendes zu Kanälen für die App-Integration
Verschiedene Kanäle bestimmen die Sichtbarkeit von Apps, den Benutzerzugriff und das Datenspeicherungsverhalten:
| Kanäle | Access | Zusammenarbeit | Dateispeicherort |
|---|---|---|---|
| Standard | Standardmäßig alle Teammitglieder | Ideal für die teamweite Zusammenarbeit, bei der Bots oder Registerkarten für jeden verfügbar sein müssen | SharePoint-Website des Teams |
| Privat | Nur für ausgewählte Teammitglieder | Geeignet für Szenarien, die eingeschränkten Zugriff auf Bots, Connectors oder Dateien erfordern | SharePoint-Website des privaten Kanals |
| Shared | Team- und organization | Ermöglicht die Interaktion mit Benutzern außerhalb des Hostteams, ohne dass diese dem Team beitreten müssen | SharePoint-Website des freigegebenen Kanals |
Kanalübergreifende Funktionen
Hier sehen Sie eine Übersicht über die verschiedenen Kanäle und ihre Funktionen für verschiedene Parameter:
| Modell | Kanalfunktionen | Standardkanal | Freigegebene und private Kanäle |
|---|---|---|---|
| Mitgliedschaft | Kann Personen zum Kanal hinzufügen, ohne dem Hostteam hinzuzufügen | ❌ | ✔️ (für private Kanäle nicht unterstützt) |
| Die Kanalmitgliedschaft kann auf eine Teilmenge des Hostteams beschränkt werden. | ❌ | ✔️ | |
| Kanal kann für andere Teams freigegeben werden, um Mitglieder zu erben | ❌ | ✔️ (für private Kanäle nicht unterstützt) |
|
| Kanal kann direkt mit seinem übergeordnetes Team | Nicht zutreffend | ✔️ (für private Kanäle nicht unterstützt) |
|
| Externe Benutzer können am Kanal teilnehmen | ✔️ (B2B-Zusammenarbeitsbenutzer) |
✔️ | |
| Der Kanal wird unter einem Hostteam gehostet. | ✔️ | ✔️ | |
| Speicherplatz | Jeder Kanal verfügt über eine dedizierte SharePoint-Website. | ❌ (erbt Teamwebsite) |
✔️ |
| App-Modell | Die App muss im Hostteam installiert sein. | ✔️ | ✔️ |
| App installiert zum Hosten des Teams automatisch im Kanal verfügbar | ✔️ | ❌ | |
| Die App muss jedem Kanal hinzugefügt werden. | ❌ | ✔️ |
Wichtig
- Vermeiden Sie es, sich auf Kanaltypwerte für die App-Logik zu verlassen.
- Die Teams-Kanalerfahrungen entwickeln sich weiter. Um sicherzustellen, dass Ihre App im Laufe der Zeit kompatibel bleibt, erstellen Sie keine Logik, die von bestimmten
membershipTypeOder-WertenchannelTypeabhängt, die von Microsoft Graph, Agents SDK oder Teams SDK zurückgegeben werden. Verwenden Sie stattdessen die funktionsbasierten APIs und Ereignisse, die von der Plattform bereitgestellt werden, um zu bestimmen, wie sich Ihre App innerhalb eines Kanals verhalten soll.
Hinweis
- Überprüfen Sie die Funktionen Ihrer App, z. B. Mitgliedschaftsgrenzen, Speicherort und externen Zugriff, bevor Sie die Unterstützung für freigegebene und private Kanäle aktivieren.
- Nachrichtenerweiterung: Nur Apps, die ausschließlich im persönlichen Bereich arbeiten, erfordern keine Updates, die für Benutzer in freigegebenen und privaten Kanälen verfügbar sind.
Verstehen, wie verschiedene Kanäle die App-Funktionalität bestimmen
Stellen Sie sicher, dass Sie verstehen, wie verschiedene Kanäle app-Funktionalität, Mitgliedschaft, Speicher oder Datenschutz bestimmen. Andernfalls kann es zu einer fehlerhaften Funktionalität oder einer unbeabsichtigten Offenlegung von Daten kommen:
Verwenden von kanalspezifischen Mitgliedschafts-APIs
Gehen Sie nicht davon aus, dass die Teammitgliedschaft gleich der Kanalmitgliedschaft ist. Nur Mitglieder, die Sie dem Kanal hinzufügen, können an freigegebenen und privaten Kanälen teilnehmen.
Unterscheiden zwischen Benutzern und Rollen
Kanalmitglieder können mandanteninterne Benutzer, Gäste oder mandantenübergreifende Benutzer (externe Benutzer von anderen Mandanten) umfassen. Wenn Ihre App zwischen verschiedenen Benutzern unterscheiden muss, um den Zugriff, die Datensichtbarkeit und die Featureverfügbarkeit zu verwalten, müssen Sie Benutzerrollen und Mandanten-IDs überprüfen, bevor Sie Berechtigungen erteilen.
Gehen Sie nicht von einer einzelnen SharePoint-Website aus, die an ein Team gebunden ist
Im Gegensatz zu Standardkanälen, die eine SharePoint-Website für das Team freigeben, verfügen private und freigegebene Kanäle über eigene SharePoint-Websites. Verwenden Sie immer die richtige URL für jeden Kanal, um fehlende Dateien oder Fehler beim nicht autorisierten Zugriff zu vermeiden.
Beibehalten des Datenbereichs für Kanäle
Aggregieren oder Cross-Post-Daten über Kanäle hinweg nur bei Bedarf, um versehentliche Lecks zu verhindern. Beispielsweise sollten Analyse-Apps keine privaten Kanaldaten in teamweiten Berichten enthalten, es sei denn, die Berechtigungen sind klar definiert.
Aktivieren von Apps für freigegebene und private Kanäle
Die meisten Apps können freigegebene und private Kanäle mit einem einfachen Manifestupdate unterstützen. Entscheiden Sie sich basierend auf einem der folgenden Szenarien für den Ansatz:
Apps ohne Abhängigkeit von angegebenen Parametern
Wenn Ihre App dies nicht tut:
- Verwenden der Kanal- oder Teammitgliedschaft zum Bestimmen der Nachrichtenübermittlung, Aufgabenzuweisung oder Berechtigungen
- Zugreifen auf oder Verwalten von Dateien, die in Teams oder SharePoint gespeichert sind
- Kombinieren oder Freigeben von Daten über mehrere Kanäle oder Teams hinweg
- Anpassen der Benutzeroberfläche basierend auf Benutzern (intern, Gäste oder externe Mitglieder)
Dann müssen Sie nur folgendes ausführen:
- Hinzufügen
supportsChannelFeaturesvon :tier1zu Ihrem App-Manifest - Überprüfen Sie das erwartete Verhalten, und testen Sie Ihre App kanalübergreifend.
Es besteht keine Abhängigkeit von klassischem Und Administratorzugriff für supportsChannelFeatures: tier1.
Apps mit Abhängigkeit von angegebenen Parametern
Wenn Ihre App erweiterte Szenarien verarbeitet oder von den angegebenen Parametern abhängig ist, die im Abschnitt Apps ohne Abhängigkeit von angegebenen Parametern aufgeführt sind, lesen Sie diesen Leitfaden, um gezielte Updates und die bewährten Methoden zu erhalten. Schreiben Sie Ihren Code nicht neu.
Abrufen des Kontexts für freigegebene und private Kanäle
Verwenden Sie beim Laden der Benutzeroberfläche in einem freigegebenen oder privaten Kanal die vom getContext Anruf empfangenen Daten für freigegebene oder private Kanäle. Der getContext Aufruf veröffentlicht zwei neue Eigenschaften, hostTeamGroupID und hostTenantID, die zum Abrufen der Kanalmitgliedschaft mithilfe von Microsoft Graph-APIs verwendet werden. Jeder Kanal wird innerhalb eines Hostteams erstellt. Weitere Informationen finden Sie unter Abrufen von Kontext in freigegebenen Kanälen und Abrufen von Kontext für Ihre Registerkarte für private Kanäle.
Kanalmitgliedschaft verwalten
Verwenden Sie die allMembers API, um Kanalmitgliedschaften über Standard-, freigegebene und private Kanäle hinweg zu verwalten und zu überwachen. Es verbessert die Genauigkeit, indem direkte und indirekte Member korrekt reflektiert werden. Weitere Informationen finden Sie unter Auflisten allerMembers.
GET /teams/{team-id}/channels/{channel-id}/allMembers
Identifizieren von Mitgliedern
- Direkte Mitglieder: Benutzer, die dem Kanal direkt hinzugefügt werden, einschließlich Benutzern aus anderen Mandanten (mandantenübergreifend).
- Indirekte Mitglieder: Benutzer, die Mitglieder des Teams sind, für das der Kanal freigegeben wird, einschließlich Teams im selben Mandanten oder in einem mandantenübergreifenden.
Sie können ermitteln, ob ein Mitglied eines freigegebenen oder privaten Kanals direkt oder indirekt ist, indem Sie die @microsoft.graph.originalSourceMembershipUrl Anmerkung überprüfen. Diese Eigenschaft identifiziert die Quelle des Zugriffs eines Members auf die Kanäle:
| Membertyp | Anmerkungsbereich |
|---|---|
| Direktes Mitglied | Die @microsoft.graph.originalSourceMembershipUrl -Eigenschaft zeigt an, dass der Benutzer direkt zu den Kanälen hinzugefügt wird. |
| Indirektes Mitglied | Die @microsoft.graph.originalSourceMembershipUrl -Eigenschaft enthält eine URL, die auf das Quellteam verweist und die indirekte Mitgliedschaft angibt. |
Hinweis
Möglicherweise erhalten Sie doppelte Benachrichtigungen, wenn ein Mitglied einem freigegebenen Kanal hinzugefügt wird. Dieses Szenario kann auftreten, wenn das Mitglied bereits direkt oder indirekt Teil des freigegebenen Kanals ist. Verwenden Sie die allMembers API, um alle direkten und indirekten Member anzuzeigen. Ignorieren Sie die Benachrichtigung, wenn der Member bereits vorhanden ist, entweder direkt oder indirekt.
Verwalten indirekter Mitgliedschaften über Kanäle hinweg
Sie können die indirekte Mitgliedschaft in Kanälen mithilfe der folgenden Microsoft Graph-APIs verwalten:
Verwenden Sie die
allMembersAPI, um alle Benutzer abzurufen, die Mitglieder eines bestimmten Kanals sind.GET /teams/{team-id}/channels/{channel-id}/allMembersVerwenden Sie die
doesUserHaveAccessAPI, um zu überprüfen, ob der Benutzer aus dem Kanal entfernt wurde, und kann alle Benutzerzugriffe und relevanten Berechtigungen anzeigen. Apps mit klassischen Anwendungsberechtigungen und RSC-Berechtigungen können diese API verwenden.GET /teams/{team-id}/channels/{channel-id}/doesUserHaveAccess(userId='@userid',tenantId='@TenantID',userPrincipalName='@UserPrincipalName')Verwenden Sie die
sharedWithTeamsAPI, um alle Teams aufzulisten, für die ein Kanal freigegeben ist.GET /teams/{team-id}/channels/{channel-id}/sharedWithTeamsVerwenden Sie die
allowedMembersAPI, um Benutzer aus einem freigegebenen Team abzurufen, die auf einen freigegebenen Kanal zugreifen können.GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams/{sharewithteamsId}/allowedMembersHinweis
Die
allowedMembersAPI gibt nur neu zugeordnete Benutzer zurück und gilt nicht für nicht freigegebene Ereignisse.
Abrufen von App-Benachrichtigungen für Änderungen der Microsoft Graph-Mitgliedschaft
Apps, die in freigegebenen und privaten Kanälen installiert sind, erhalten Benachrichtigungen, wenn Benutzer einem Team hinzugefügt oder daraus entfernt werden, das den Kanal teilt.
Um App-Benachrichtigungen zu erhalten, müssen Sie:
- Installieren Sie die App in einem Hostteam, und aktivieren Sie sie für den freigegebenen oder privaten Kanal. Weitere Informationen zum Installieren der App finden Sie unter Installieren der App.
- Erstellen Sie ein gültiges Microsoft Graph-Änderungsbenachrichtigungsabonnement, um zugeordnete Teammitgliedschaftsänderungen und freigegebene oder nicht freigegebene Ereignisse mithilfe unterstützter APIs zu überwachen.
Um sowohl direkte als auch indirekte Memberupdatebenachrichtigungen zu erhalten, müssen Sie beim Erstellen eines Abonnements beide Abfragezeichenfolgenparameter einschließen. Wenn Sie die Abfragezeichenfolgen nicht angeben, sendet das Abonnement nur Benachrichtigungen für direkte Memberupdates. Weitere Informationen finden Sie unter Kanalmitgliedschaftszugriff.
/teams/{team-id}/channels/getAllMembers?notifyOnIndirectMembershipUpdate=true&suppressNotificationWhenSharedUnsharedWithTeam=true
Mithilfe dieses Abonnements können Apps Mitgliedschaftsänderungen in Kanälen und den zugehörigen Teams überwachen. Weitere Informationen zum Erstellen eines Microsoft Graph-Abonnements für Änderungsbenachrichtigungen finden Sie unter Erstellen eines Abonnements.
Abrufen von App-Benachrichtigungen für Änderungen der Botmitgliedschaft
Ihr Bot empfängt das conversationUpdate Ereignis, wenn er Benachrichtigungen zu Mitgliedschaftsupdates für Teams erhält, in denen er hinzugefügt wird. Um sowohl direkte als auch indirekte Benachrichtigungen zu Mitgliedsupdates zu erhalten, richten Sie Ihren Bot mit den folgenden Voraussetzungen ein:
Aktualisieren Sie das App-Manifest auf v1.25. Fügen Sie hinzu
supportsChannelFeatures,tier1um die App-Bereitschaft zu deklarieren.Anfordern Resource-Specific Zustimmungsberechtigung (RSC)
Ihre App muss die folgende RSC-Berechtigung anfordern, um auf Kanalmitgliedschaftsinformationen zuzugreifen:
{ "authorization": { "permissions": { "resourceSpecific": [ { "name": "ChannelMember.Read.Group", "type": "Application" } ] } } }Hinzufügen des Bots im freigegebenen Kanal
Um Benachrichtigungen zu Mitgliedsereignissen zu erhalten, installieren Sie den Bot auf Teams-Ebene, und lassen Sie ihn manuell im freigegebenen Kanal zu.
Dieser Prozess stellt sicher, dass der Bot aktiv ist und zum Empfangen von Benachrichtigungen sowohl für direkte als auch für indirekte Mitglieder autorisiert ist.
Verwalten hinzugefügter und entfernter Memberereignisse
In den folgenden Szenarien wird ein Mitglied hinzugefügtes Ereignis an Ihren Bot gesendet:
- Wenn Sie den Bot installieren und zu einer Unterhaltung hinzufügen.
- Wenn Sie einen Benutzer zu einer Unterhaltung hinzufügen, in der der Bot installiert ist.
Ihr Bot empfängt in den folgenden Szenarien ein Ereignis zum Entfernen eines Mitglieds:
- Wenn Sie den Bot deinstallieren und aus einer Unterhaltung entfernen.
- Wenn Sie einen Benutzer aus einer Unterhaltung entfernen, in der der Bot installiert ist.
Weitere Informationen finden Sie unter Unterhaltungsereignisse.
Wenn Sie den Bot im Team oder Kanal installieren, empfängt das Agents SDK eine conversationUpdate Aktivität über die OnConversationUpdateActivityAsync -Methode, wenn Sie einem anderen Team einen freigegebenen Kanal hinzufügen.
Wenn Sie einem freigegebenen Kanal ein neues Mitglied hinzufügen, wird die OnMembersAddedAsync -Methode aufgerufen. Diese Methode stellt den Kontext und die Details des Benutzers bereit, der hinzugefügt wurde, damit der Bot entsprechend reagieren kann.
Die folgenden Agents SDK-Beispiele gelten sowohl für direkte als auch indirekte Member zum Hinzufügen und Entfernen von Ereignissen.
Element hinzugefügtes Ereignis
public async Task OnMembersAddedAsync(ITurnContext turnContext, AppState turnState, CancellationToken cancellationToken)
{
var membersAdded = turnContext.Activity.MembersAdded;
List<string> addedMembers = new List<string>();
foreach (var member in membersAdded)
{
if (member.Id != turnContext.Activity.Recipient.Id)
{
addedMembers.Add($"Member {member.Name} (ID {member.Id}) added.");
}
}
await ActivityUtils.SendAdaptiveCard(
"Member Added",
addedMembers,
new List<object> { "membersAdded", membersAdded },
turnContext,
cancellationToken).ConfigureAwait(false);
Ereignis zum Entfernen eines Mitglieds
public async Task OnMembersRemovedAsync(ITurnContext turnContext, AppState turnState, CancellationToken cancellationToken)
{
var membersRemoved = turnContext.Activity.MembersRemoved;
List<string> removedMembers = new List<string>();
foreach (var member in membersRemoved)
{
if (member.Id != turnContext.Activity.Recipient.Id)
{
removedMembers.Add($"Member {member.Name} (ID {member.Id}) removed.");
}
}
await ActivityUtils.SendAdaptiveCard(
"Member Removed",
removedMembers,
new List<object> { "membersRemoved", membersRemoved },
turnContext,
cancellationToken).ConfigureAwait(false);
}
Behandeln von Massenmitgliedschaftsänderungen für graph
Wenn Massenmitgliedschaftsänderungen vorgenommen werden, schränkt Teams Benachrichtigungen zu Aktualisierungen einzelner Mitgliedschaften ein, wenn ein Kanal für ein Team freigegeben oder freigegeben wird. Verwenden sharedWithTeams Sie die Abonnementressource, um die Benachrichtigungsüberladung bei Mitgliedschaftsupdates zu reduzieren, z. B. wenn ein freigegebener Kanal einem Team mit Tausenden von Mitgliedern hinzugefügt oder daraus entfernt wird:
/teams/{team-id}/channels/{channel-id}/sharedWithTeams
Das sharedWithTeams Abonnement sendet eine einzelne Benachrichtigung, wenn ein Kanal für ein Team freigegeben oder freigegeben wird. Es vermeidet Tausende von benutzerspezifischen Benachrichtigungen und verbessert die Leistung für Apps, die Mitgliedschaftsänderungen überwachen. Stellen Sie sicher, dass Sie die Mitgliederliste des freigegebenen Kanals mithilfe der allMembers-API aktualisieren, nachdem Sie eine Benachrichtigung vom Team erhalten haben, die für freigegeben oder aufgehoben wurde .
Überprüfen des Benutzerzugriffs für Graphmitgliedschaftsupdates
Wenn eine App eine Benachrichtigung über das Entfernen eines Mitglieds für ein indirektes Mitgliedschaftsupdate empfängt , ist es wichtig zu überprüfen, ob der Benutzer aus dem Kanal entfernt wird, insbesondere, da derselbe Benutzer möglicherweise sowohl direkte als auch indirekte Mitgliedschaft hat. Wenn beispielsweise ein Benutzer aus einem Team entfernt wird, das einen Kanal gemeinsam verwendet, muss Ihre App bestätigen, ob der Zugriff des Benutzers auf den freigegebenen Kanal widerrufen wird. Verwenden Sie die doesUserHaveAccess API, um zu bestimmen, ob der Benutzer aus dem freigegebenen Kanal entfernt wird. Weitere Informationen zu Benutzerzugriffen und relevanten Berechtigungen finden Sie unter doesUserHaveAccess-API .
GET /teams/{team-id}/channels/{channel-id}/doesUserHaveAccess(userId='@userid',tenantId='@TenantID',userPrincipalName='@UserPrincipalName')
Wenn eine App eine Benachrichtigung über ein mitglied hinzugefügtes Mitglied für ein indirektes Mitgliedschaftsupdate empfängt, lesen Sie die AllMembers-API , um die Liste aller Mitglieder zu aktualisieren.
GET /teams/{team-id}/channels/{channel-id}/allMembers
Klassifizieren von Mitgliedern als mandantenintern oder out-tenant
Sie können Mitglieder als mandantenintern oder out-tenant klassifizieren, indem Sie die TenantId des Mitglieds oder Teams wie folgt vergleichen ownerTenantId :
Rufen Sie die des
TenantIdMembers ab, das Sie vergleichen möchten.GET /teams/{host-team-group-id}/channels/{channel-id}/allMembersRufen Sie
microsoftTeams.app.getContext()auf Ihrer Registerkarte aus der Teams JavaScript-Clientbibliothek auf. Der getContext()-Aufruf gibt den Kontext des freigegebenen Kanals zurück, der die Details wiedisplayName,membershipType,ownerGroupIdundownerTenantIdenthält.Vergleichen Sie die
TenantIddes Members mit derownerTenantId-Eigenschaft, und bestimmen Sie, ob es sich bei dem Mitglied um einen Mandanten oder einen out-tenant handelt.
Grundlegendes zu App-Berechtigungen in freigegebenen Kanälen
Sie können mit externen Mitgliedern außerhalb Ihrer organization zusammenarbeiten, indem Sie freigegebene Kanäle verwenden. App-Berechtigungen in freigegebenen Kanälen folgen der App-Liste des Hostteams und der App-Richtlinie des Hostmandanten.
Hinweis
Die Benachrichtigungs-API für Aktivitätsfeeds unterstützt keine mandantenübergreifenden Benachrichtigungen für Apps in einem freigegebenen Kanal.
Überprüfen der Botinstallation in einem Kanal
Wenn einem anderen Team ein freigegebener Kanal hinzugefügt wird, empfängt das Agents SDK nur dann eine conversationUpdate Aktivität über die OnConversationUpdateActivityAsync -Methode, wenn der Bot im Team installiert ist. Es gibt keine dedizierte API, um zu überprüfen, ob Ihre App Teil eines Kanals ist. Bots können erkennen, wann Ihre App indirekt zu einem Kanal hinzugefügt wird.
Verwenden Sie dieses channelMemberAdded Ereignis, um appspezifische Logik auszulösen, z. B.:
- Senden einer Begrüßungsnachricht
- Abrufen der Kanalliste
- Konfigurieren von Registerkarten
- Starten geplanter Aufträge
protected override async Task OnConversationUpdateActivityAsync(
ITurnContext<IConversationUpdateActivity> turnContext,
CancellationToken cancellationToken)
{
var tcd = turnContext.Activity.GetChannelData<TeamsChannelData>();
var eventType = tcd?.EventType?.ToLowerInvariant();
var extended = turnContext.Activity.GetChannelData<SharedChannelChannelData>();
var raw = turnContext.Activity.ChannelData as JObject
?? (turnContext.Activity.ChannelData != null
? JObject.FromObject(turnContext.Activity.ChannelData)
: new JObject());
_logger.LogInformation("ConversationUpdate eventType={EventType}, channelId={ChannelId}, teamId={TeamId}",
eventType, tcd?.Channel?.Id, tcd?.Team?.Id);
switch (eventType)
{
case "channelshared":
{
var hostTeam = extended?.Team;
var sharedWith = extended?.SharedWithTeams ?? new List<TeamInfoEx>();
_logger.LogInformation("ChannelShared: hostTeam={HostTeamId}, sharedWithCount={Count}",
hostTeam?.Id, sharedWith.Count);
foreach (var team in sharedWith)
{
_logger.LogInformation("SharedWithTeam: id={Id}, name={Name}, aadGroupId={AadGroupId}, tenantId={TenantId}",
team.Id, team.Name, team.AadGroupId, team.TenantId);
}
await turnContext.SendActivityAsync(
MessageFactory.Text($" Channel shared with {sharedWith.Count} team(s)."),
cancellationToken);
break;
}
case "channelunshared":
{
var unsharedFrom = extended?.UnsharedFromTeams ?? new List<TeamInfoEx>();
_logger.LogInformation("ChannelUnshared: unsharedFromCount={Count}", unsharedFrom.Count);
foreach (var team in unsharedFrom)
{
_logger.LogInformation("UnsharedFromTeam: id={Id}, name={Name}, aadGroupId={AadGroupId}, tenantId={TenantId}",
team.Id, team.Name, team.AadGroupId, team.TenantId);
}
await turnContext.SendActivityAsync(
MessageFactory.Text($" Channel unshared from {unsharedFrom.Count} team(s)."),
cancellationToken);
break;
}
default:
break;
}
await base.OnConversationUpdateActivityAsync(turnContext, cancellationToken);
}
Authentifizieren externer Benutzer für den Zugriff auf App-Inhalte in SharePoint
Führen Sie diesen Schritt aus, wenn Ihre App Inhalte auf der SharePoint-Website des Mandanten speichert, der den Kanal hostet und ein SharePoint-Token anfordert.
- Speichern Sie die Hostmandanten-ID des freigegebenen Kanals, in dem die Registerkarte konfiguriert ist.
- Rufen Sie die Hostmandanten-ID mithilfe
channel.ownerTenantIdvon in JSv2 oder aus demgetContextAufruf in JSv1 ab.
Senden Sie nun den gespeicherten Host tenantId innerhalb tenantId des Aufrufparameters getAuthToken , um mandantenübergreifenden Benutzern den Zugriff auf Inhalte zu ermöglichen, die auf einer SharePoint-Website gehostet werden, die an den freigegebenen Kanal angefügt ist.
Identifizieren von Gastbenutzern in Kanälen mithilfe von Graph-API
Sie können ermitteln, ob ein Mitglied eines Kanals ein Gastbenutzer ist, der von externen organization zu Ihrem Mandanten eingeladen wird, indem Sie die roles -Eigenschaft für jedes Objekt in der Liste der Mitglieder einer Kanalantwort verwenden.
Für Gäste: roles = guest.
Verwenden Sie die folgende allMembers API, um alle Gastbenutzer in einem Kanal genau abzurufen:
GET /teams/{team-id}/channels/{channel-id}/allMembers
Diese API funktioniert über Standard- und andere Kanäle hinweg und wird für die zuverlässige Identifizierung von Gastmitgliedern empfohlen.
Zugreifen auf SharePoint-Daten in freigegebenen und privaten Kanälen
Wenn Sie eine App mit SharePoint Framework erstellen, müssen Sie die SharePoint in Microsoft 365 (SPO)-Website verwenden, die mit dem freigegebenen Kanal verknüpft ist, nicht die website, die mit der Hostteamgruppe verknüpft ist. Sowohl freigegebene als auch private Kanäle verfügen über eine eigene SharePoint-Website, auf die nur Mitglieder dieses bestimmten freigegebenen oder privaten Kanals zugreifen können.
Verwenden Sie die Microsoft Graph-Einladungs-API, um auf die Dokumentbibliothek der SharePoint in Microsoft 365-Website zuzugreifen, die mit einem freigegebenen oder privaten Kanal verknüpft ist.
Hinweis
Informationen zu anforderungen für Postfach- oder Calendar-Szenarien finden Sie unter Featureanfrage und allgemeine Hilfe.
Zugreifen auf SharePoint-Speicher für Kanaldateien mithilfe von Graph-API
Verwenden Sie die folgende API, um auf das Stammverzeichnis von SharePoint-Dateien eines Kanals zuzugreifen:
GET /teams/{teamId}/channels/{channelId}/filesFolder
Diese API gibt ein DriveItem-Objekt für den Dateistamm dieses Kanals zurück. Weitere Informationen finden Sie unter Kanaldateien.
Verwenden Sie die folgenden Eigenschaften für alle nachfolgenden Dateivorgänge:
-
parentReference.driveId: Die SharePoint-DriveId für die Website des Kanals. -
itemId: Die folderId für den Stamm des Kanals.
Das erwartete Laufwerkverhalten der Kanäle lautet wie folgt:
- Standard Kanäle verwenden die driveId der Teamwebsite.
- Andere Kanäle verwenden eine separate
driveIdfür ihre einzelnen Websites.
Hinweis
Speichern und wiederverwenden Sie immer die und itemId , die driveId von der API zurückgegeben werden.
Hartcodieren Sie keine Bibliotheksnamen oder URLs basierend auf Annahmen über die Teamwebsite, da sich der Standort der Teamwebsite ändern kann.
Verwenden Sie diese GET /teams/{teamId}/channels/{channelId}/filesFolder API für alle Kanaltypen.
Verwalten des Dateizugriffs für externe oder Gastbenutzer mithilfe von Graph-API
Externe Benutzer bleiben in ihrem Mandanten, wenn sie auf die SharePoint-Website des Hostkanals zugreifen. So aktivieren Sie den Zugriff:
- Konfigurieren Sie den mandantenübergreifenden Zugriff auf beiden Seiten.
- Stellen Sie sicher, dass Ihre App mehrinstanzenfähig ist und die Zustimmung im Hostmandanten erhält.
Authentifizieren externer Benutzer in Registerkarten oder Aufgabenmodulen
Wenn Ihr Registerkarten- oder Aufgabenmodul auf SharePoint-Ressourcen im Basismandanten des Kanals zugreifen muss, führen Sie die folgenden Schritte aus:
Erkennen externer Benutzer Verwenden Sie
getContext()zum Abrufen des Kanalkontexts. Vergleichen Sieuser.tenant.idmitchannel.ownerTenantIdoderchannel.hostTenantId. Wenn sie sich unterscheiden, ist der Benutzer extern.Anfordern eines Tokens vom Basismandanten Rufen Sie getAuthToken() mit der Mandanten-ID (
user.tenant.idodertid) des externen Benutzers an, um sicherzustellen, dass das Token von seinem Basismandanten ausgestellt wird.
Testen Ihrer App über mehrere Kanäle hinweg
Stellen Sie vor dem Veröffentlichen von Updates sicher, dass Ihre App in allen Kanaltypen in realen Situationen ordnungsgemäß funktioniert.
Standardkanal
Vergewissern Sie sich, dass die vorhandene Funktionalität nach ihren Änderungen intakt bleibt. Stellen Sie sicher, dass Registerkarten, Bots und Messagingerweiterungen weiterhin wie erwartet funktionieren.
Freigegebener Kanal
Privater Kanal
Erstellen Sie einen privaten Kanal in Team A mit mindestens zwei Mitgliedern (Besitzer und Mitglied).
Führen Sie die folgenden Schritte aus, um die Unterstützung für private Kanäle zu überprüfen:
- Fügen Sie die App zu Team A hinzu, und fügen Sie sie dann dem privaten Kanal hinzu.
- Vergewissern Sie sich, dass die Registerkarte ordnungsgemäß im privaten Kanal geladen wird.
- Testen Sie Botantworten für verschiedene Benutzertypen:
- Mandanteninternes Mitglied
- Gastbenutzer oder externer Benutzer
- Wenn Ihre App Mitglieder auflistet oder Aufgaben zuweist, vergewissern Sie sich, dass nur Kanalmitglieder und nicht das gesamte Team verwendet werden.
- Fügen Sie dem privaten Kanal ein neues Mitglied hinzu, und überprüfen Sie Folgendes:
- Ob Ihre App ein Mitgliedschaftsänderungsereignis empfängt
- Gibt an, ob Ihre Mitgliedschafts-API das neue Mitglied widerspiegelt
Tests in diesen Szenarien helfen Ihnen, Probleme mit Funktionalität, Berechtigungen und Benutzererfahrung zu erkennen.
Hinweis
Unterstützung für Apps im privaten Kanal ist in der öffentlichen Entwicklervorschau verfügbar.
Bewährte Methoden für die Unterstützung aller Kanäle
Was Sie tun sollten
- Rufen Sie immer die Mitgliederliste und die Rollen des aktuellen Kanals ab, bevor Sie Aktionen ausführen. Wenn Sie beispielsweise Benachrichtigungen senden oder Aufgaben zuweisen, richten Sie sich nur an die tatsächlichen Kanalmitglieder und nicht an das gesamte Team.
- Steuern des Datenzugriffs und der Freigabe basierend auf kanalbezogener Mitgliedschaft und Berechtigungen. Weitere Informationen finden Sie unter Verwalten der Kanalmitgliedschaft.
- Bestimmen Sie , ob Benutzer intern, Gäste oder Extern (mandantenübergreifend) sind, und authentifizieren Sie sie in ihrem Basismandanten. Überprüfen Sie Berechtigungen für mandantenübergreifende Szenarien immer, insbesondere beim Zugriff auf Dateien. Weitere Informationen finden Sie unter Identifizieren von Gastbenutzern in Kanälen mithilfe von Graph-API.
- Aktualisieren Sie Hilfetext und Benutzerhandbücher , um zu erläutern, wie sich Ihre App in verschiedenen Kanaltypen verhält, einschließlich Einschränkungen für Gäste oder externe Benutzer.
- Lesen Sie die Dokumentation und Änderungsprotokolle von Teams , um auf den neuesten Updates für APIs, Berechtigungen und Kanalkonfigurationen zu bleiben.
Was Sie nicht tun sollten
- Beschränken Sie vertrauliche Aktionen auf Besitzer oder interne Benutzer, und bieten Sie Eingeschränkte Features für Gäste oder externe Teilnehmer.
- Schließen Sie private Kanaldaten niemals in umfassendere Berichte oder öffentliche Kanäle ein, es sei denn, dies ist explizit autorisiert.
Häufig gestellte Fragen
Warum ist die App nicht sichtbar, wenn ich versuche, sie einem Kanal hinzuzufügen?
Die App wird möglicherweise nicht angezeigt, wenn dem Manifest die erforderliche Unterstützung fehlt, z supportsChannelFeatures: tier1. B. . Darüber hinaus verfügt das Installationsprogramm möglicherweise nicht über ausreichende Berechtigungen. Nur Teammitglieder oder Besitzer können Apps hinzufügen, und lokale Richtlinien müssen die App-Installation zulassen. Wenn es sich bei dem Kanal um einen eingehenden freigegebenen Kanal handelt (der für ein Team freigegeben wurde), können Sie keine Apps direkt von diesem Standort hinzufügen. Wechseln Sie in solchen Fällen zum Hostteam, um die App dem Kanal hinzuzufügen. Sie können erkennen, ob ein Kanal freigegeben ist, indem Sie die Kanalmetadaten für die Hostteam-ID überprüfen.
Warum erhalte ich beim Aufrufen von Kanal-APIs den Fehler 403, der besagt, dass die App in diesem Kanal nicht aktiviert ist?
Dieser Fehler tritt auf, wenn die App auf Teamebene installiert, aber nicht dem Kanal hinzugefügt wird. Um dieses Problem zu beheben, vergewissern Sie sich, dass die App dem Kanal hinzugefügt wurde. Wenn Ihre App ressourcenspezifische Zustimmung (Resource-Specific Consent, RSC) verwendet, überprüfen Sie, ob die im Manifest deklarierten Berechtigungen mit den API-Aufrufen übereinstimmen, die Sie ausführen, ChannelMember.Read.Group z. B. für die Lesekanalmitgliedschaft. Wiederholen Sie den Vorgang, nachdem Sie die App hinzugefügt haben. Initiieren Sie für Bots kanalspezifische Logik, wenn der Bot das channelMemberAdded Ereignis empfängt, um zu überprüfen, ob der Kanal erfolgreich hinzugefügt wurde.
Warum erscheint die Kanalliste unvollständig und zeigt nur Besitzer oder fehlende Benutzer an?
Die Kanalliste scheint unvollständig zu sein, da die Teammitglieder-API anstelle der richtigen kanalspezifischen API verwendet wird. Um dieses Problem zu beheben, verwenden Sie die /channels/{id}/allMembers API, um die vollständige Kanalliste abzurufen. Wenn in der Antwort weiterhin nur Besitzer angezeigt werden, wird die App wahrscheinlich nicht zum Kanal hinzugefügt. Fordern Sie den Benutzer auf, die App dem Kanal hinzuzufügen, und wiederholen Sie dann die Anforderung, um die aktualisierte Liste abzurufen.
Warum schlägt der Dateizugriff für einige Benutzer fehl, obwohl sie Teil des Kanals sind?
Dieser Fehler kann auftreten, wenn die App die SharePoint-Hauptwebsite des Teams anstelle der spezifischen Website des Kanals verwendet. Die Freigaberichtlinien Ihres organization blockieren möglicherweise den Linktyp, oder externen Benutzern fehlen die erforderlichen Berechtigungen. Um dieses Problem zu beheben, stellen Sie sicher, dass Ihre App die -Eigenschaft des Kanals filesFolder verwendet, um die richtigen driveId und itemId für Dateivorgänge abzurufen. Wenn Sie Dateien freigeben, verwenden Sie Personen mit vorhandenen Zugriffslinks oder die Einladungs-API, um bestimmten Benutzern oder Gruppen Zugriff zu gewähren.
Warum treten bei externen Benutzern Authentifizierungsprobleme in Registerkarten oder Aufgabenmodulen auf?
Authentifizierungsprobleme treten häufig auf, wenn die App ein Token für den Hostmandanten anstelle des Basismandanten des Benutzers anfordert. Um dieses Problem zu beheben, überprüfen Sie, ob der Benutzer extern ist, indem Sie mit der Mandanten-ID des Hosts oder Besitzers vergleichen context.user.tenant.id . Wenn sie unterschiedlich sind, ist der Benutzer extern, und Ihre App muss das Token für den Basismandanten des Benutzers anfordern. Sie können diesen Schritt ausführen, indem Sie beim Aufrufen getAuthTokenvon die richtige Mandanten-ID (tid) übergeben.
Gewusst wie wissen, dass meine App einem Kanal hinzugefügt wurde?
Dieses Problem kann auftreten, wenn die App eine zentralisierte Liste installierter Apps auf Kanalebene erwartet oder vom Installationsverhalten auf Teamebene abhängig ist. Derzeit ist keine Liste auf Kanalebene installedApps verfügbar. Stattdessen müssen Bots innerhalb des Kanals auf das channelMemberAdded Ereignis lauschen, um zu erkennen, wann sie hinzugefügt werden. Wenn die App einen 403-Fehler erhält und das Ereignis verpasst, wird der Benutzer aufgefordert, den Bot dem Kanal hinzuzufügen, und verwaltet den Fehler.
Warum kann meine App keine Nachrichtenänderungsbenachrichtigungen in freigegebenen oder privaten Kanälen erstellen?
Nachrichtenänderungsbenachrichtigungen können in freigegebenen oder privaten Kanälen fehlschlagen, da Abonnements für /channels/{id}/messages blockiert werden, wenn ressourcenspezifische Zustimmung (RSC) in diesen Kanaltypen verwendet wird. Wenn Ihre App beim Versuch, ein Abonnement zu erstellen, einen Fehler 403 erhält, wird dieses Verhalten erwartet. Um dieses Problem zu beheben, verwenden Sie bedarfsgesteuerte Nachrichtenlesevorgänge, nachdem die App dem Kanal erfolgreich hinzugefügt wurde.
Warum schlagen Dateilinks für externe Benutzer weiterhin fehl, auch wenn die App dem Kanal hinzugefügt wurde?
Der Fehler bei der Meldungsänderungsbenachrichtigung tritt auf, wenn die Freigaberichtlinie des Mandanten den Linktyp blockiert oder wenn der Benutzer keinen Zugriff auf das Element hat, auch wenn er Mitglied des Kanals ist. Eine weitere häufige Ursache ist, dass die App Links generiert, die auf das Teamlaufwerk anstatt auf das dedizierte Laufwerk des Kanals verweisen. Um dieses Problem zu beheben, rufen Sie die Links mithilfe der Option "Personen mit vorhandenem Zugriff " erneut auf, oder verwenden Sie die Einladungs-API, um bestimmten Benutzern Zugriff zu gewähren. Stellen Sie außerdem sicher, dass die Links auf das Kanallaufwerk verweisen, das mithilfe der filesFolder -Eigenschaft und nicht mit der Teamwebsite identifiziert werden kann.
Codebeispiele
| Beispielname | Beschreibung | .NET | Node.js | Python |
|---|---|---|---|---|
| Freigegebene Botkanalereignisse | In dieser Beispiel-App wird das transitive Teams-Bot-Mitglied zum Hinzufügen und Entfernen von Ereignissen in freigegebenen Kanälen angezeigt. | View | – | – |
| Benachrichtigung über Mitgliedschaftsänderungen | Die Beispielanwendung veranschaulicht, wie Benachrichtigungen für Ereignisse im freigegebenen Kanal in Teams gesendet werden. Szenarien umfassen das Hinzufügen, Entfernen von Benutzern oder die Aktualisierung der Mitgliedschaft sowie das Freigeben oder Aufheben der Freigabe des Kanals für ein Team. | View | View | Anzeigen |
Siehe auch
- Kanalmitgliedschaft verwalten
- Grundlegendes zu App-Berechtigungen in freigegebenen Kanälen
- Erstellen von Registerkarten für Teams
- Freigegebene Kanäle in Microsoft Teams
- Kanalressourcentyp
- Aufbewahrungsrichtlinie für Teams-Speicherorte
- Verwenden Sie den Gastzugriff und den externen Zugriff, um mit Personen außerhalb Ihres Unternehmens zusammenzuarbeiten
- Verwalten externer Besprechungen und Chatten mit Personen und Organisationen mithilfe von Microsoft-Identitäten