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
Apps im freigegebenen Kanal befinden sich derzeit in der öffentlichen Entwicklervorschau. Apps in privaten Kanälen sind in Kürze 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. Dieses Update 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 finden 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
Überprüfen Sie die Funktionen Ihrer App, z. B. Mitgliedschaftsgrenzen, Speicherort und externen Zugriff. Nehmen Sie keine Codeänderungen basierend auf dem Kanaltyp vor.
Verstehen, wie verschiedene Kanäle die App-Funktionalität bestimmen
Stellen Sie sicher, dass Sie verstehen, wie unterschiedliche Kanäle app-Funktionalität, Mitgliedschaft, Speicher oder Datenschutz bestimmen, andernfalls zu fehlerhaften Funktionen oder unbeabsichtigter Offenlegung von Daten führen kann:
Verwenden von kanalspezifischen Mitgliedschafts-APIs
Gehen Sie nicht davon aus, dass die Teammitgliedschaft gleich der Kanalmitgliedschaft ist. Nur Mitglieder, die dem Kanal hinzugefügt werden, 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 sharePoint-Websites 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. Basierend auf einem der folgenden Szenarien können Sie den Ansatz festlegen:
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.
Hinweis
- Tab- und Bot-Apps in freigegebenen und privaten Kanälen sind in Government Community Cloud (GCC), GCC High, Department of Defense (DoD) und Teams verfügbar, die von 21Vianet-Umgebungen betrieben werden .
- SharePoint- und die SharePoint-Seiten-Apps werden für freigegebene Kanäle in GCC-, GCC High-, DoD- und Teams-Umgebungen, die von 21Vianet-Umgebungen betrieben werden, nicht unterstützt.
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 API, die allMembers Kanalmitgliedschaften über Standard-, freigegebene und private Kanäle verwaltet und überwacht. Es verbessert die Genauigkeit, indem direkte und indirekte Member richtig 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 für den Zugriff 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 bestimmen, ob der Benutzer aus dem Kanal entfernt wird und alle Benutzerzugriffe und relevanten Berechtigungen anzeigen kann. 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 Graphmitgliedschaft
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 die Abfragezeichenfolgen nicht bereitgestellt werden, sendet das Abonnement nur Benachrichtigungen für direkte Memberupdates. Weitere Informationen finden Sie unter Kanalmitgliedschaftszugriff.
/teams/{team-id}/channels/getAllMembers?notifyOnIndirectMembershipUpdate=true&suppressNotificationWhenSharedUnsharedWithTeam=true
Mit diesem Abonnement 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
Das conversationUpdate Ereignis wird an Ihren Bot gesendet, wenn er Benachrichtigungen zu Mitgliedschaftsupdates für Teams empfängt, in denen es hinzugefügt wird. Um sowohl direkte als auch indirekte Benachrichtigungen zu Mitgliedsupdates zu erhalten, konfigurieren Sie Ihren Bot mit den folgenden Voraussetzungen:
Aktualisieren Sie das App-Manifest. 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" } ] } } }Stellen Sie sicher, dass der Bot im freigegebenen Kanal hinzugefügt wird.
Um Ereignisbenachrichtigungen für Mitglieder zu erhalten, installieren Sie den Bot auf Teamebene, 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 der Bot selbst installiert und einer Unterhaltung hinzugefügt wird
- Wenn ein Benutzer zu einer Unterhaltung hinzugefügt wird, in der der Bot installiert ist
In den folgenden Szenarien wird ein Ereignis zum Entfernen eines Mitglieds an Ihren Bot gesendet:
- Wenn der Bot selbst deinstalliert und aus einer Unterhaltung entfernt wird.
- Wenn ein Benutzer aus einer Unterhaltung entfernt wird, in der der Bot installiert ist.
Weitere Informationen finden Sie unter Unterhaltungsereignisse.
Wenn der Bot im Team oder Kanal installiert ist, empfängt das Agents SDK eine conversationUpdate Aktivität über die OnConversationUpdateActivityAsync -Methode, wenn einem anderen Team ein freigegebener Kanal hinzugefügt wird.
Wenn einem freigegebenen Kanal ein neuer Member hinzugefügt wird, wird die OnMembersAddedAsync -Methode aufgerufen. Diese Methode stellt den Kontext und die Details des Benutzers bereit, der hinzugefügt wurde, sodass 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. VerwendensharedWithTeams 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 nicht freigegeben 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 Mandanten-ID des Mitglieds oder Teams ownerTenantId wie folgt vergleichen:
Rufen Sie die "TenantId" des Mitglieds 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 über freigegebene Kanäle zusammenarbeiten. 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
Sie müssen diesen Schritt ausführen, 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 mit
channel.ownerTenantIdin 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 verwenden, die für jedes Objekt in List member of a channel response empfangen wird.
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 Online-Website (SPO) verwenden, die mit dem freigegebenen Kanal verknüpft ist, nicht die, die mit der Hostteamgruppe verknüpft ist. Sowohl freigegebene als auch private Kanäle verfügen über eine eigene SPO-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 SPO-Website zuzugreifen, die mit einem freigegebenen oder privaten Kanal verknüpft ist.
Hinweis
Informationen zu den Anforderungen für Postfach- oder Kalenderszenarien 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 verbleiben in ihrem Mandanten, während 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(), um den Kanalkontext abzurufen. Vergleichen Sie mit
user.tenant.idchannel.ownerTenantId or channel.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 Überprüfung durchzuführen:
- 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
Der private Kanal ist in der Entwicklervorschau noch nicht verfügbar und wird in Kürze verfügbar sein.
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 Microsoft Teams-Dokumentation und -Änderungsprotokolle , 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 niemals Private-Channel-Daten 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 Sie versuchen, 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 (freigegeben für ein Team) handelt, können Apps nicht direkt von diesem Standort aus hinzugefügt werden. 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 ausgeführt werden, 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 filesFolder des Kanals verwendet, um die richtige 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 der installierten Apps auf Kanalebene 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, stellen Sie die Links mithilfe der Option "Personen mit vorhandenem Zugriff" erneut aus, 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 | Diese Beispiel-App zeigt das transitive Microsoft Teams-Bot-Mitglied zum Hinzufügen und Entfernen von Ereignissen in freigegebenen Kanälen an. | View | – | – |
| Benachrichtigung über Mitgliedschaftsänderungen | Die Beispielanwendung veranschaulicht, wie Benachrichtigungen für Ereignisse mit freigegebenem Kanal in Microsoft 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