Criar aplicativos para usuários anônimos

Usuários anônimos não têm uma identidade do Azure Active Directory (Azure AD) e não são federados com um locatário. Os participantes anônimos são como usuários externos, mas sua identidade não é mostrada na reunião. Um usuário anônimo pode ser um apresentador ou um participante, mas não pode ser um organizador. Você pode criar bots, extensões de mensagens e cartões e módulos de tarefa em seu aplicativo para se envolver com participantes anônimos da reunião.

Observação

Aplicativos para usuários anônimos têm suporte apenas na área de trabalho do Teams e no cliente móvel do Teams para iOS e não há suporte em reuniões de canal.

Para que usuários anônimos interajam com os aplicativos em reuniões do Teams, certifique-se de:

  1. Atualize o manifesto do aplicativo.
  2. Habilite a interação anônima do aplicativo de usuário no centro de administração do Teams.

Atualização de manifesto de aplicativo para usuários anônimos

Para permitir que usuários anônimos interajam com o aplicativo de guia, atualize a supportsAnonymousGuestUsers propriedade para true no esquema de manifesto do aplicativo v1.16 ou posterior. A seguir está um exemplo do manifesto:


 "meetingExtensionDefinition": {
  "supportsAnonymousGuestUsers": true
 }

Para obter mais informações, consulte esquema de manifesto do aplicativo.

Fluxo de autenticação de usuário anônimo

Os usuários anônimos não podem ser autenticados por meio da autenticação Azure AD ou getAuthToken do SDK do cliente, pois não são Azure AD contas. getAuthToken falha para usuários anônimos retornando o erro useGetAuthToken: Failed with error - User is not authenticated. Se você precisar autenticar usuários anônimos, seu aplicativo deve identificar usuários anônimos e fornecer uma experiência de autenticação alternativa nas reuniões. Você pode determinar se um usuário é anônimo validando o contexto do usuário.

Administração configuração para interação anônima do aplicativo de usuário

Os administradores do Teams podem usar o centro de administração do Teams para habilitar ou desabilitar a interação anônima do aplicativo de usuário para todo o locatário. Se seu aplicativo precisar ser acessado por usuários anônimos, verifique se os administradores do locatário habilitam a interação anônima do aplicativo de usuário. Essa configuração é habilitada por padrão. Para obter mais informações, confira permitir que usuários anônimos interajam com aplicativos em reuniões.

Para testar sua experiência de aplicativos para usuários anônimos, selecione a URL no convite da reunião e participe da reunião em uma janela do navegador privado.

In-Meeting getContext da biblioteca de clientes do Teams

Os aplicativos recebem as seguintes informações para um usuário anônimo quando eles chamam a getContext API do estágio de aplicativo compartilhado. Você pode reconhecer usuários anônimos verificando um userLicenseType valor de Anonymous.

Observação

O SDK do Live Share não tem suporte para usuários anônimos.


microsoftTeams.app.getContext().then((context) => {
    if (context.user.licenseType === "Anonymous")
        {
            // Add your custom logic here
        }
});

Nome da propriedade Descrição
userObjectId Cadeia de caracteres vazia para usuário anônimo.
userLicenseType Anonymous representa um usuário anônimo.
loginHint Cadeia de caracteres vazia para usuário anônimo.
userPrincipalName Cadeia de caracteres vazia para usuário anônimo.

Para obter mais informações sobre getContext, confira obter contexto usando a biblioteca JavaScript do Microsoft Teams.

Atividades de bot e APIs

Com algumas diferenças, as atividades enviadas ao bot e as respostas que ele recebe das APIs do bot são consistentes entre participantes anônimos e não anônimos da reunião.

Obter membros e obter APIs de membro único

Os membros get e obter APIs de membro único retornam informações limitadas para usuários anônimos:

{ 
  "id": "<GUID1>", 
  "name": "<AnonTest (Guest)>",  
  "tenantId": "<GUID2>", 
  "userRole": "anonymous" 
}
Nome da propriedade Descrição
id Valor gerado exclusivo para o usuário anônimo.
name Nome fornecido pelo usuário anônimo ao ingressar na reunião.
tenantId ID do locatário do organizador da reunião.
userRole anonymous, representa o usuário anônimo.

Atividade ConversationUpdate MembersAdded and MembersRemoved

MembersAdded

protected override async Task OnTeamsMembersAddedAsync(IList<TeamsChannelAccount> membersAdded, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
  {
     foreach (var teamMember in membersAdded)
     {
         // If UserRole == "anonymous", it indicates an anonymous user
         if (teamMember.UserRole == "anonymous" )
          {
             // Add your custom logic here
          }
          else
          {
           // Add your custom logic here
          }
     }
  }

MembersRemoved

protected override async Task OnTeamsMembersRemovedAsync(IList<TeamsChannelAccount> membersRemoved, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
   foreach (var member in membersRemoved)
   {
      // If AadObjectId is null, it indicates an anonymous user
       if (member.AadObjectId == null)
       {
           // Add your custom logic here
       }
       else
       {
           // Add your custom logic here
       }
   }

Observação

Quando um usuário anônimo entra ou sai de uma reunião, o from objeto na carga sempre tem a ID do organizador da reunião, mesmo que a ação tenha sido tomada por outra pessoa.

Criar API de Conversa

Os bots não têm permissão para iniciar uma conversa individual com um usuário anônimo. Se um bot chamar a API Criar Conversa com a ID do usuário de um usuário anônimo, ele receberá uma 400 Solicitação Incorreta status código e a seguinte resposta de erro:

var conversationParameters = new ConversationParameters
    {
       IsGroup = false,
       Bot = turnContext.Activity.Recipient,
       Members = new ChannelAccount[] { teamMember },
       TenantId = turnContext.Activity.Conversation.TenantId,
    };
    
    await ((CloudAdapter)turnContext.Adapter).CreateConversationAsync(
    conversationParameters,
    async (t1, c1) =>
    {
       conversationReference = t1.Activity.GetConversationReference();
       await ((CloudAdapter)turnContext.Adapter).ContinueConversationAsync(
       _appId,
       conversationReference,
       async (t2, c2) =>
       {
         await t2.SendActivityAsync(proactiveMessage, c2);
        },
        cancellationToken);
    },
cancellationToken);
{ 
  "error": {
    "code": "BadArgument",
    "message": "Bot cannot create a conversation with an anonymous user"
  }
} 

Cartões Adaptáveis

Usuários anônimos podem exibir e interagir com Cartões Adaptáveis no chat da reunião. As ações de Cartão Adaptável se comportam da mesma maneira para usuários anônimos e não anônimos. Para obter mais informações, confira Ações de cartão.

Limitações e problemas conhecidos

  • Atualmente, a getContext API não retorna uma ID de usuário para o usuário anônimo, embora as APIs do bot façam e não é possível correlacionar o usuário anônimo entre essas duas APIs.

  • Usuários anônimos veem um ícone de aplicativo genérico em mensagens de bot e cartões, em vez do ícone real do aplicativo.

    A captura de tela mostra como o ícone do aplicativo é exibido para usuário anônimo.

Exemplo de código

Nome do exemplo Descrição .NET Node.js
Suporte anônimo ao usuário Aplicativo de exemplo para mostrar o suporte anônimo do usuário em aplicativos de reunião. View View

Próxima etapa

Confira também