Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Observação
As aplicações num canal partilhado estão atualmente em pré-visualização do programador público. As aplicações em canais privados estão disponíveis em breve!
Os canais partilhados e privados no Microsoft Teams permitem uma colaboração flexível entre equipas e organizações. Atualmente, as aplicações de bot e separador são suportadas em canais partilhados e privados. Com esta atualização, pode experimentar vários benefícios:
Canais partilhados: permita uma comunicação totalmente integrada com membros internos ou externos, sem alterar o contexto do utilizador. Estes canais garantem o controlo de acesso granular seguro e a sincronização de associações em tempo real.
Canais privados: forneça espaço seguro para que os membros da equipa selecionados colaborem em conteúdo confidencial ou confidencial, garantindo privacidade e debates focados dentro da equipa.
Compreender os canais para a integração de aplicações
Canais diferentes determinam a visibilidade da aplicação, o acesso do utilizador e o comportamento de armazenamento de dados:
| Canais | Access | Colaboração | Localização do armazenamento de ficheiros |
|---|---|---|---|
| Padrão | Todos os membros da equipa por predefinição | Ideal para colaboração em toda a equipa onde os bots ou separadores têm de estar disponíveis para todas as pessoas | Site sharePoint da equipa |
| Private | Apenas para membros da equipa selecionados | Adequado para cenários que exijam acesso restrito a bots, conectores ou ficheiros | Site do SharePoint do canal privado |
| Compartilhados | Entre equipas e entre organizações | Permite a interação com utilizadores fora da equipa de anfitriões sem exigir que se juntem à equipa | Site sharePoint do canal partilhado |
Capacidades entre canais
Eis um destaque dos diferentes canais e das suas capacidades, em vários parâmetros:
| Modelo | Capacidades do canal | Canal padrão | Canais partilhados e privados |
|---|---|---|---|
| Associação | Pode adicionar pessoas ao canal sem adicionar à equipa anfitriã | ❌ | ✔️ (não suportado para canais privados) |
| A associação ao canal pode ser limitada a um subconjunto da equipa anfitriã | ❌ | ✔️ | |
| O Canal pode ser partilhado com outras equipas para herdar membros | ❌ | ✔️ (não suportado para canais privados) |
|
| O canal pode ser partilhado diretamente com o respetivo equipe principal | N/D | ✔️ (não suportado para canais privados) |
|
| Os utilizadores externos podem participar no canal | ✔️ (Utilizadores de colaboração B2B) |
✔️ | |
| O canal está alojado numa equipa anfitriã | ✔️ | ✔️ | |
| Armazenamento | Cada canal tem um site do SharePoint dedicado | ❌ (herda o site de equipa) |
✔️ |
| Modelo de Aplicação | A aplicação tem de ser instalada na equipa de anfitriões | ✔️ | ✔️ |
| Aplicação instalada para alojar a equipa disponível automaticamente no canal | ✔️ | ❌ | |
| A aplicação tem de ser adicionada a cada canal | ❌ | ✔️ |
Importante
Verifique as capacidades da sua aplicação, como os limites de associação, a localização de armazenamento e o acesso externo. Não efetue alterações de código com base no tipo de canal.
Compreender como diferentes canais determinam a funcionalidade da aplicação
Certifique-se de que compreende como diferentes canais determinam a funcionalidade da aplicação, a associação, o armazenamento ou a privacidade. Caso contrário, pode levar a funcionalidades quebradas ou exposição a dados não intencionais:
Utilizar APIs de associação específicas do canal
Não suponha que a associação à equipa é igual à associação ao canal. Apenas os membros adicionados ao canal podem participar em canais partilhados e privados.
Distinguir entre utilizadores e funções
Os membros do canal podem incluir utilizadores no inquilino, convidados ou utilizadores entre inquilinos (utilizadores externos de outros inquilinos). Se a sua aplicação precisar de distinguir entre vários utilizadores para gerir o acesso, a visibilidade dos dados e a disponibilidade das funcionalidades, tem de validar as funções de utilizador e os IDs de inquilino antes de conceder permissões.
Não assuma um único site do SharePoint associado a uma equipa
Ao contrário dos canais padrão, que partilham o site SharePoint com a equipa, os canais privados e partilhados têm os seus próprios sites do SharePoint. Utilize sempre o URL correto para cada canal para evitar ficheiros em falta ou erros de acesso não autorizado.
Manter os dados no âmbito dos canais
Agregar ou publicar dados em vários canais apenas quando necessário, para evitar fugas acidentais. Por exemplo, as aplicações de análise não devem incluir dados de canais privados em relatórios de toda a equipa, a menos que as permissões estejam claramente definidas.
Ativar aplicações para canais partilhados e privados
A maioria das aplicações suporta canais partilhados e privados com uma atualização de manifesto simples. Com base em qualquer um dos seguintes cenários, pode decidir a abordagem:
- Aplicações sem dependência em parâmetros especificados
- Aplicações com dependência em parâmetros especificados
Aplicações sem dependência em parâmetros especificados
Se a sua aplicação não:
- Utilizar a associação de canal ou equipa para determinar a entrega de mensagens, a atribuição de tarefas ou as permissões
- Aceder ou gerir ficheiros armazenados no Teams ou no SharePoint
- Combinar ou partilhar dados em vários canais ou equipas
- Personalizar a experiência, com base em utilizadores (internos, convidados ou membros externos)
Em seguida, só precisa de:
- Adicionar
supportsChannelFeatures:tier1ao manifesto da aplicação - Verificar o comportamento esperado e testar a sua aplicação em vários canais
Não existe nenhuma dependência do acesso clássico e de administrador para supportsChannelFeatures: tier1.
Aplicações com dependência em parâmetros especificados
Se a sua aplicação processar cenários avançados ou depender dos parâmetros especificados listados na secção Aplicações sem dependência dos parâmetros especificados , leia este guia para obter as atualizações direcionadas e as melhores práticas. Não reescreva o código.
Observação
- As aplicações de separador e bot em canais partilhados e privados estão disponíveis na Cloud da Comunidade Governamental (GCC), GCC High, Departamento de Defesa (DoD) e Teams operados por ambientes 21Vianet .
- O SharePoint e as aplicações de páginas do SharePoint não são suportadas para canais partilhados em ambientes GCC, GCC High, DoD e Teams operados pela 21Vianet.
Obter contexto para canais partilhados e privados
Ao carregar a experiência de utilizador num canal partilhado ou privado, utilize os dados recebidos da getContext chamada para canais partilhados ou privados. A getContext chamada publica duas novas propriedades, hostTeamGroupID e hostTenantID, que são utilizadas para obter a associação a canais com as APIs do Microsoft Graph. Todos os canais são criados dentro de uma equipa de anfitriões. Para obter mais informações, consulte Obter contexto em canais partilhados e Obter contexto para o seu separador para canais privados.
Gerenciar associação de canal
Utilize a allMembers API que gere e monitoriza as associações de canais em canais padrão, partilhados e privados. Melhora a precisão ao refletir corretamente os membros diretos e indiretos. Para obter mais informações, consulte Listar todosMembers.
GET /teams/{team-id}/channels/{channel-id}/allMembers
Identificar membros
- Membros diretos: Utilizadores que são adicionados diretamente ao canal, incluindo utilizadores de outros inquilinos (entre inquilinos).
- Membros indiretos: Utilizadores que são membros da equipa, com os quais o canal é partilhado, incluindo equipas no mesmo inquilino ou entre inquilinos.
Pode identificar se um membro de um canal partilhado ou privado é direto ou indireto ao verificar a @microsoft.graph.originalSourceMembershipUrl anotação. Esta propriedade identifica a origem do acesso de um membro aos canais:
| Tipo de Membro | Âmbito de anotação |
|---|---|
| Membro direto | A @microsoft.graph.originalSourceMembershipUrl propriedade mostra que o utilizador é adicionado diretamente aos canais |
| Membro indireto | A @microsoft.graph.originalSourceMembershipUrl propriedade inclui um URL que aponta para a equipa de origem e indica associação indireta. |
Observação
Poderá receber notificações duplicadas quando um membro é adicionado a um canal partilhado. Este cenário pode ocorrer se o membro já fizer parte do canal partilhado direta ou indiretamente. Utilize a allMembers API para ver todos os membros diretos e indiretos. Ignore a notificação se o membro já existir, direta ou indiretamente.
Gerir a associação indireta entre canais
Pode gerir a associação indireta em canais com as seguintes APIs do Microsoft Graph:
Utilize a
allMembersAPI para obter todos os utilizadores que são membros de um canal específico.GET /teams/{team-id}/channels/{channel-id}/allMembersUtilize a
doesUserHaveAccessAPI para determinar se o utilizador é removido do canal e pode ver todos os acessos de utilizador e permissões relevantes. As aplicações com permissões de aplicações clássicas e permissões RSC podem utilizar esta API.GET /teams/{team-id}/channels/{channel-id}/doesUserHaveAccess(userId='@userid',tenantId='@TenantID',userPrincipalName='@UserPrincipalName')Utilize a
sharedWithTeamsAPI para listar todas as equipas com as quais um canal é partilhado.GET /teams/{team-id}/channels/{channel-id}/sharedWithTeamsUtilize a
allowedMembersAPI para obter utilizadores de uma equipa partilhada que pode aceder a um canal partilhado.GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams/{sharewithteamsId}/allowedMembersObservação
A
allowedMembersAPI devolve apenas os utilizadores associados recentemente e não se aplica a eventos não partilhados.
Obter notificações de aplicações para alterações de associação a gráficos
As aplicações instaladas em canais partilhados e privados recebem notificações quando os utilizadores são adicionados ou removidos de uma equipa que partilha o canal.
Para receber notificações de aplicações, tem de:
- Instale a aplicação numa equipa de anfitrião e ative-a para o canal partilhado ou privado. Para obter mais informações sobre como instalar a aplicação, consulte Instalar a aplicação.
- Crie uma subscrição de notificação de alteração válida do Microsoft Graph para monitorizar as alterações à associação à equipa associada e eventos partilhados ou não partilhados com as APIs suportadas.
Para receber notificações de atualização de membros diretos e indiretos, tem de incluir os parâmetros da cadeia de consulta ao criar uma subscrição. Se as cadeias de consulta não forem fornecidas, a subscrição apenas entrega notificações para atualizações diretas de membros. Para obter mais informações, veja Acesso à associação a canais.
/teams/{team-id}/channels/getAllMembers?notifyOnIndirectMembershipUpdate=true&suppressNotificationWhenSharedUnsharedWithTeam=true
Esta subscrição permite que as aplicações monitorizem as alterações de associação nos canais e nas respetivas equipas associadas. Para obter mais informações sobre como criar uma subscrição de notificação de alteração do Microsoft Graph, consulte Criar uma subscrição.
Obter notificações de aplicações para alterações de associação a bots
O conversationUpdate evento é enviado para o bot quando recebe notificações sobre as atualizações de associação para as equipas onde é adicionado. Para receber notificações de atualização de membros diretos e indiretos, configure o bot com os seguintes pré-requisitos:
Atualize o manifesto da aplicação. Adicione
supportsChannelFeatures:tier1para declarar a preparação da aplicação.Pedir permissão de Consentimento Resource-Specific (RSC)
A sua aplicação tem de pedir a seguinte permissão RSC para aceder às informações de associação de canais:
{ "authorization": { "permissions": { "resourceSpecific": [ { "name": "ChannelMember.Read.Group", "type": "Application" } ] } } }Certifique-se de que o bot é adicionado no canal partilhado
Para receber notificações de eventos de membros, instale o bot ao nível da equipa e permita-o manualmente no canal partilhado.
Este processo garante que o bot está ativo e autorizado a receber notificações para membros diretos e indiretos.
Gerir eventos adicionados e removidos do membro
Um evento adicionado a um membro é enviado para o bot nos seguintes cenários:
- Quando o bot, por si só, é instalado e adicionado a uma conversação
- Quando um utilizador é adicionado a uma conversação onde o bot está instalado
Um evento removido de membro é enviado para o bot nos seguintes cenários:
- Quando o bot, por si só, é desinstalado e removido de uma conversação.
- Quando um utilizador é removido de uma conversação onde o bot está instalado.
Para obter mais informações, veja Eventos de conversação.
Se o bot estiver instalado na equipa ou no canal, o SDK de Agentes recebe uma conversationUpdate atividade através do OnConversationUpdateActivityAsync método quando um canal partilhado é adicionado a outra equipa.
Quando um novo membro é adicionado a um canal partilhado, o OnMembersAddedAsync método é chamado. Este método fornece o contexto e os detalhes do utilizador que foi adicionado, permitindo que o bot responda em conformidade.
Os seguintes exemplos do SDK de Agentes aplicam-se a eventos de adição e remoção de membros diretos e indiretos.
Evento de membro adicionado
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);
Evento removido do membro
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);
}
Processar alterações de associação em massa para gráfico
Se existirem alterações de associação em massa, o Teams restringe as notificações de atualização de associação individuais quando um canal é partilhado ou não partilhado com uma equipa. Para reduzir a sobrecarga de notificação durante as atualizações de associação, como quando um canal partilhado é adicionado ou removido de uma equipa com milhares de membros, utilize osharedWithTeams recurso de subscrição:
/teams/{team-id}/channels/{channel-id}/sharedWithTeams
A sharedWithTeams subscrição envia uma única notificação quando um canal é partilhado ou não partilhado com uma equipa. Evita milhares de notificações por utilizador e melhora o desempenho das aplicações que monitorizam as alterações de associação. Certifique-se de que atualiza a lista de membros do canal partilhado com a API allMembers depois de receber uma notificação de equipa partilhada ounão partilhada.
Validar o acesso do utilizador para atualizações de associação de grafos
Quando uma aplicação recebe uma notificação de membro removido para uma atualização de associação indireta, é importante verificar se o utilizador foi removido do canal, especialmente porque o mesmo utilizador pode ter associação direta e indireta. Por exemplo, se um utilizador for removido de uma equipa que partilha um canal, a sua aplicação tem de confirmar se o acesso do utilizador ao canal partilhado é revogado. Utilize a doesUserHaveAccess API para determinar se o utilizador foi removido do canal partilhado. Veja a API doesUserHaveAccess para saber mais sobre os acessos dos utilizadores e as permissões relevantes.
GET /teams/{team-id}/channels/{channel-id}/doesUserHaveAccess(userId='@userid',tenantId='@TenantID',userPrincipalName='@UserPrincipalName')
Quando uma aplicação recebe uma notificação de membro adicionada para uma atualização de associação indireta, veja a API allMembers para atualizar a lista de todos os membros.
GET /teams/{team-id}/channels/{channel-id}/allMembers
Classificar membros como in-tenant ou out-tenant
Pode classificar os membros como no inquilino ou fora do inquilino ao comparar o "TenantId" do membro ou da equipa com ownerTenantId o seguinte:
Obtenha o "TenantId" do membro que pretende comparar.
GET /teams/{host-team-group-id}/channels/{channel-id}/allMembersChame
microsoftTeams.app.getContext()o seu separador a partir da biblioteca de cliente JavaScript do Teams. A chamada getContext() devolve o contexto do canal partilhado, que contém os detalhes, tais comodisplayName,membershipType,ownerGroupIdeownerTenantId.Compare o
TenantIddo membro com aownerTenantIdpropriedade e determine se o membro é um inquilino ou um inquilino.
Compreender as permissões de aplicações em canais partilhados
Pode colaborar com membros externos fora da sua organização através de canais partilhados. As permissões de aplicações em canais partilhados seguem a lista de aplicações da equipa anfitriã e a política de aplicações do inquilino anfitrião.
Observação
A API de notificação do feed de atividades não suporta notificações entre inquilinos para aplicações num canal partilhado.
Verificar a instalação do bot num canal
Quando um canal partilhado é adicionado a outra equipa, o SDK de Agentes recebe uma conversationUpdate atividade através do OnConversationUpdateActivityAsync método , apenas se o bot estiver instalado na equipa. Não existe uma API dedicada para marcar se a sua aplicação fizer parte de um canal. Os bots podem detetar quando a sua aplicação é adicionada indiretamente a um canal.
Utilize este channelMemberAdded evento para acionar lógica específica da aplicação, como:
- Enviar uma mensagem de boas-vindas
- A obter a lista de canais
- Configurar separadores
- Iniciar tarefas agendadas
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);
}
Autenticar utilizadores externos para aceder ao conteúdo da aplicação no SharePoint
Tem de concluir este passo quando a sua aplicação armazena conteúdos no site do SharePoint do inquilino que aloja o canal e pede um token do SharePoint.
- Guarde o ID do inquilino do anfitrião do canal partilhado onde o separador está configurado.
- Obtenha o ID do inquilino do anfitrião com
channel.ownerTenantIdno JSv2 ou agetContextpartir da chamada no JSv1.
Agora, envie o anfitrião tenantId guardado dentro tenantId do parâmetro de getAuthToken chamada para permitir que os utilizadores entre inquilinos acedam ao conteúdo alojado no site do SharePoint anexado ao canal partilhado.
Identificar utilizadores convidados em canais com API do Graph
Pode identificar se um membro de um canal é um utilizador convidado, convidado para o seu inquilino a partir de uma organização externa, através roles da propriedade recebida para cada objeto em Listar membros de uma resposta de canal .
Para convidados, "roles" = "guest"
Para obter com precisão todos os utilizadores convidados num canal, utilize a seguinte allMembers API:
GET /teams/{team-id}/channels/{channel-id}/allMembers
Esta API funciona em todos os canais padrão e outros e é recomendada para identificar de forma fiável os membros convidados.
Aceder a dados do SharePoint em canais partilhados e privados
Se estiver a criar uma aplicação com o SharePoint Framework, terá de utilizar o site do SharePoint Online (SPO) ligado ao canal partilhado e não o associado ao grupo de equipa de anfitriões. Os canais partilhados e privados têm o seu próprio site SPO que só é acessível aos membros desse canal partilhado ou privado específico.
Utilize a API de convite do Microsoft Graph para aceder à biblioteca de documentos do site do SPO ligado a um canal partilhado ou privado.
Observação
Consulte Pedido de funcionalidade e ajuda geral para quaisquer requisitos em cenários de Caixa de Correio ou Calendário.
Aceder ao armazenamento do SharePoint para ficheiros de canal com API do Graph
Para aceder à raiz de ficheiros do SharePoint de um canal, utilize a seguinte API:
GET /teams/{teamId}/channels/{channelId}/filesFolder
Esta API devolve um objeto DriveItem para a raiz de ficheiros desse canal. Para obter mais informações, veja ficheiros de canal
Utilize as seguintes propriedades para todas as operações de ficheiro subsequentes:
-
parentReference.driveId: o driveId do SharePoint para o site do canal. -
itemId: o folderId da raiz do canal.
O comportamento esperado da unidade dos canais é o seguinte:
- Standard canais utilizam o driveId do site de equipa.
- Outros canais utilizam um separador
driveIdpara os respetivos sites individuais.
Observação
Armazene e reutilize sempre os driveId e itemId devolvidos pela API.
Não codificar nomes de biblioteca ou URLs com base em pressupostos sobre o site de equipa, uma vez que a localização do site de equipa pode ser alterada.
Utilize esta GET /teams/{teamId}/channels/{channelId}/filesFolder API para todos os tipos de canal.
Gerir o acesso a ficheiros para utilizadores externos ou convidados com API do Graph
Os utilizadores externos permanecem no respetivo inquilino enquanto acedem ao site do sharepoint do canal anfitrião. Para ativar o acesso:
- Configure o acesso entre inquilinos em ambos os lados.
- Certifique-se de que a sua aplicação é multi-inquilino e recebe consentimento no inquilino do anfitrião.
Autenticar utilizadores externos em separadores ou módulos de tarefas
Quando o separador ou módulo de tarefas precisar de aceder aos recursos do SharePoint no inquilino principal do canal, execute os seguintes passos:
Detetar utilizadores externos Utilize getContext() para obter o contexto do canal. Compare
user.tenant.idcomchannel.ownerTenantId or channel.hostTenantId. Se forem diferentes, o utilizador é externo.Peça o token do inquilino raiz Chamada getAuthToken() com o ID de inquilino do utilizador externo (
user.tenant.idoutid) para garantir que o token é emitido a partir do inquilino principal.
Testar a sua aplicação em vários canais
Antes de publicar atualizações, certifique-se de que a sua aplicação funciona corretamente em todos os tipos de canais em situações reais.
Canal padrão
Confirme que a funcionalidade existente permanece intacta após as alterações. Certifique-se de que os separadores, bots e extensões de mensagens continuam a funcionar conforme esperado.
Canal compartilhado
Canal privado
Crie um canal privado na Equipa A com, pelo menos, dois membros (proprietário e membro).
Execute os seguintes passos para validar:
- Adicione a aplicação à Equipa A e, em seguida, adicione-a ao canal privado.
- Verifique se o separador é carregado corretamente no canal privado.
- Testar respostas de bot para diferentes tipos de utilizador:
- Membro no inquilino
- Utilizador convidado ou utilizador externo
- Se a sua aplicação listar membros ou atribuir tarefas, confirme que utiliza apenas membros do canal e não a equipa completa.
- Adicione um novo membro ao canal privado e marcar:
- Se a sua aplicação recebe um evento de alteração de associação
- Se a API de associação reflete o novo membro
Os testes nestes cenários ajudam-no a detetar quaisquer problemas com a funcionalidade, as permissões e a experiência do utilizador.
Observação
O canal privado ainda não está disponível na Pré-visualização do programador e estará disponível em breve.
Melhores práticas para suportar todos os canais
O que fazer
- Obtenha sempre as funções e a lista de membros do canal atual antes de efetuar ações. Por exemplo, ao enviar notificações ou atribuir tarefas, direcione apenas os membros reais do canal e não toda a equipa.
- Controlar o acesso e a partilha de dados com base na associação e permissões de canais. Para obter mais informações, veja Gerir a associação a canais.
- Determine se os utilizadores são internos, convidados ou externos (entre inquilinos) e autentique-os no respetivo inquilino doméstico. Valide sempre as permissões para cenários entre inquilinos, especialmente quando acede a ficheiros. Para obter mais informações, veja Identificar utilizadores convidados em canais com API do Graph.
- Atualize o texto da ajuda e os guias do utilizador para explicar o comportamento da sua aplicação em diferentes tipos de canais, incluindo quaisquer limitações para convidados ou utilizadores externos.
- Reveja a documentação e os registos de alterações do Microsoft Teams para se manter alinhado com as atualizações mais recentes às APIs, permissões e configurações de canais.
O que não fazer
- Restrinja ações confidenciais a proprietários ou utilizadores internos e ofereça funcionalidades limitadas a convidados ou participantes externos.
- Nunca inclua dados de canais privados em relatórios mais amplos ou canais públicos, a menos que sejam explicitamente autorizados.
Perguntas frequentes
Por que motivo a aplicação não está visível ao tentar adicioná-la a um canal?
A aplicação poderá não aparecer se faltar suporte necessário ao manifesto, como supportsChannelFeatures: tier1. Além disso, o instalador pode não ter permissões suficientes, apenas os membros da equipa ou proprietários podem adicionar aplicações e as políticas locais têm de permitir a instalação da aplicação. Se o canal for um canal partilhado de entrada (partilhado numa equipa), as aplicações não podem ser adicionadas diretamente a partir dessa localização. Nesses casos, mude para a equipa anfitriã para adicionar a aplicação ao canal. Pode detetar se um canal é partilhado ao verificar os metadados do canal para o ID da equipa de anfitrião.
Por que motivo estou a receber um erro 403 a indicar "a aplicação não ativada neste canal" ao chamar APIs de canal?
Este erro ocorre se a aplicação estiver instalada ao nível da equipa, mas não for adicionada ao canal. Para resolve este problema, confirme que a aplicação foi adicionada ao canal. Se a sua aplicação utilizar o consentimento específico do recurso (RSC), verifique se as permissões declaradas no manifesto correspondem às chamadas à API que estão a ser efetuadas, por exemplo, para ler a ChannelMember.Read.Group associação ao canal. Depois de adicionar a aplicação, repita a operação. Para bots, inicie a lógica específica do canal quando o bot receber o channelMemberAdded evento para verificar a adição com êxito ao canal.
Porque é que a lista de canais aparece incompleta, mostrando apenas os proprietários ou os utilizadores em falta?
A lista de canais aparece incompleta porque a API dos membros da equipa é utilizada em vez da API específica do canal correta. Para resolve este problema, utilize a /channels/{id}/allMembers API para obter a lista completa do canal. Se a resposta continuar a mostrar apenas os proprietários, é provável que a aplicação não seja adicionada ao canal. Peça ao utilizador para adicionar a aplicação ao canal e, em seguida, repita o pedido para obter a lista atualizada.
Porque é que o acesso a ficheiros falha para alguns utilizadores, apesar de fazerem parte do canal?
Esta falha pode ocorrer se a aplicação estiver a utilizar o site sharePoint principal da equipa em vez do site específico do canal. As políticas de partilha da sua organização podem bloquear o tipo de ligação ou os utilizadores externos podem não ter as permissões necessárias. Para resolve este problema, certifique-se de que a aplicação utiliza a propriedade filesFolder do canal para obter o driveId e o itemId corretos para operações de ficheiros. Quando estiver a partilhar ficheiros, utilize pessoas com ligações de acesso existentes ou a API de convite para conceder acesso a utilizadores ou grupos específicos.
Porque é que os utilizadores externos estão a ter problemas de autenticação em separadores ou módulos de tarefas?
Os problemas de autenticação ocorrem frequentemente quando a aplicação pede um token para o inquilino anfitrião em vez do inquilino principal do utilizador. Para resolve este problema, marcar se o utilizador é externo ao comparar context.user.tenant.id com o ID de inquilino do anfitrião ou proprietário. Se forem diferentes, o utilizador é externo e a sua aplicação tem de pedir o token para o inquilino raiz do utilizador. Pode efetuar este passo ao transmitir o ID de inquilino (tid) correto ao chamar getAuthToken.
Como fazer saber que a minha aplicação foi adicionada a um canal?
Este problema pode ocorrer se a aplicação esperar uma lista centralizada de aplicações instaladas ao nível do canal ou depender do comportamento de instalação ao nível da equipa. Atualmente, não existe nenhuma lista de Aplicações instalada ao nível do canal disponível. Em vez disso, os bots têm de escutar o channelMemberAdded evento no canal para detetar quando são adicionados. Quando a aplicação recebe um erro 403 e falha o evento, pede ao utilizador para adicionar o bot ao canal e gere o erro.
Porque é que a minha aplicação não consegue criar notificações de alteração de mensagens em canais partilhados ou privados?
As notificações de alteração de mensagens podem falhar em canais partilhados ou privados porque as subscrições para são bloqueadas ao /channels/{id}/messages utilizar o consentimento específico do recurso (RSC) nestes tipos de canais. Se a sua aplicação receber um erro 403 ao tentar criar uma subscrição, este comportamento é esperado. Para resolve este problema, utilize as leituras de mensagens a pedido após a aplicação ser adicionada com êxito ao canal.
Porque é que as ligações de ficheiros continuam a falhar para os utilizadores externos mesmo depois de a aplicação ser adicionada ao canal?
A falha de notificação de alteração da mensagem ocorre quando a política de partilha do inquilino bloqueia o tipo de ligação ou quando o utilizador não tem acesso ao item, mesmo que seja membro do canal. Outra causa comum é a aplicação poder gerar ligações que apontam para a unidade de equipa em vez da unidade dedicada do canal. Para resolve este problema, volte a emitir as ligações com a opção "pessoas com acesso existente" ou utilize a API de convite para conceder acesso a utilizadores específicos. Além disso, certifique-se de que as ligações referenciam a unidade do canal, que pode ser identificada com a propriedade filesFolder, em vez do site de equipa.
Exemplos de código
| Nome de exemplo | Descrição | .NET | Node.js | Python |
|---|---|---|---|---|
| Bot Shared Channel Events | Esta aplicação de exemplo apresenta o membro transitivo do bot do Microsoft Teams para adicionar e remover eventos em canais partilhados. | View | NA | NA |
| Notificação de Alteração de Associação | A aplicação de exemplo demonstra como enviar notificações para eventos de canais partilhados no Microsoft Teams. Os cenários incluem utilizadores que estão a ser adicionados, removidos ou membros a serem atualizados e quando o canal é partilhado ou não partilhado com uma equipa. | View | View | Exibir |
Confira também
- Gerenciar associação de canal
- Compreender as permissões de aplicações em canais partilhados
- Compilar guias para o Teams
- Canais compartilhados no Microsoft Teams
- Tipo de recurso de canal
- Política de retenção para locais do Teams
- Usar o acesso para convidado e o acesso externo para colaborar com pessoas de fora da sua organização
- Gerir reuniões externas e conversar por chat com pessoas e organizações com identidades da Microsoft