Link profundo para um aplicativo

Os links profundos no Microsoft Teams são ferramentas poderosas que permitem aos usuários navegar diretamente para conteúdo ou ações específicas em um aplicativo. Os links profundos são configurados para executar várias ações, como abrir uma guia, iniciar uma caixa de diálogo de instalação do aplicativo ou navegar dentro do aplicativo.

Observação

Este tópico reflete a versão 2.0.x da biblioteca de cliente JavaScript do Microsoft Teams (TeamsJS). Se você estiver usando uma versão anterior, consulte a visão geral da biblioteca do TeamsJS para obter diretrizes sobre as diferenças entre o TeamsJS mais recente e as versões anteriores.

Aqui estão alguns dos cenários em que você pode usar um link profundo:

  • Instalação do aplicativo: você pode usar links profundos que permitem aos usuários saber mais sobre um aplicativo e instalá-lo em diferentes escopos.
  • Bots e conectores: você pode usar links profundos em mensagens de bots e conectores para informar os usuários sobre alterações na guia ou em seus itens.
  • Navegar até uma página específica: você pode criar links profundos que permitem que os usuários naveguem para páginas específicas em seu aplicativo.
  • Aplicativo personalizado: você pode gerar links profundos para um aplicativo personalizado. No entanto, se um aplicativo no Microsoft Teams Store compartilhar a mesma ID do aplicativo que a ID do aplicativo personalizado, o link profundo abrirá o aplicativo na Teams Store em vez do aplicativo personalizado.
  • Para dispositivos móveis: Você também pode criar um link profundo para um aplicativo para dispositivos móveis depois que seu aplicativo for aprovado para o cliente móvel do Teams. Para que o link profundo funcione no Teams iOS, você precisa da ID da equipe do Apple App Store Connect. Para obter mais informações, consulte como atualizar a ID da equipe do Apple App Store Connect.

Os links profundos permitem que os usuários do aplicativo abram uma caixa de diálogo de instalação do aplicativo para saber qualquer informação sobre o aplicativo ou instalá-lo em contextos diferentes. Você pode criar um link profundo para um aplicativo das seguintes maneiras:

Com o link profundo, você pode abrir uma caixa de diálogo de instalação do aplicativo diretamente do cliente do Teams usando a ID do aplicativo.

https://teams.microsoft.com/l/app/<your-app-id>?tenantId=<tenantId>

<your-app-id> é a ID do seu aplicativo (fxxxxxxx-0xxx-4xxx-8xxx-cxxxxxxxxxxx).

ID do aplicativo para diferentes tipos de aplicativos

A tabela a seguir lista os diferentes tipos de IDs de aplicativo usadas para diferentes tipos de aplicativos para links profundos:

Tipo de aplicativo Tipo de ID do aplicativo
Aplicativo personalizado carregado no Teams ID do manifesto
Aplicativos enviados para o catálogo da organização ID do catálogo da organização
Aplicativos enviados para a Teams Store ID da loja

Para obter mais informações, consulte como encontrar a ID com base na ID do manifesto do aplicativo.

Os aplicativos podem usar a biblioteca de clientes JavaScript do Microsoft Teams (TeamsJS) para iniciar a caixa de diálogo de instalação do aplicativo, eliminando a necessidade de geração manual de links profundos. Aqui está um exemplo de como disparar a caixa de diálogo de instalação do aplicativo usando o TeamsJS em seu aplicativo:

// Open an app install dialog from your tab
if(appInstallDialog.isSupported()) {
    const dialogPromise = appInstallDialog.openAppInstallDialog({ appId: "<appId>" });
    dialogPromise.
      then((result) => {/*Successful operation*/}).
      catch((error) => {/*Unsuccessful operation*/});
}
else { /* handle case where capability isn't supported */ }

Para obter mais informações, confira appInstallDialog.

Os usuários do aplicativo podem navegar pelo conteúdo no Teams a partir de sua guia usando o TeamsJS. Você poderá usar um link profundo para navegar no seu aplicativo se a guia precisar conectar os usuários a outro conteúdo no Teams, como um canal, mensagem, outra guia ou para abrir uma caixa de diálogo de agendamento. Em alguns casos, a navegação também pode ser realizada usando o TeamsJS, e recomendamos usar os recursos tipados do TeamsJS sempre que possível.

Você pode configurar links profundos para navegar no seu aplicativo das seguintes maneiras:

As guias pessoais têm um escopo personal, enquanto as guias de canal e grupo usam escopos team ou group. Os dois tipos de guia têm sintaxe ligeiramente diferente, pois apenas a guia configurável tem uma channel propriedade associada ao objeto de contexto. Para obter mais informações sobre escopos de guia, consulte manifesto do aplicativo.

Para criar um link profundo em um bot, conector ou card de extensão de mensagem, use o seguinte formato:

https://teams.microsoft.com/l/entity/<appId>/<entityId>?tenantId=<tenantId>&webUrl=<entityWebUrl>&label=<entityLabel>&context=<context>&openInMeeting=false

  • Se o bot enviar uma mensagem contendo um TextBlock com um link profundo, uma nova guia do navegador será aberta quando o usuário selecionar o link. Isso acontece no Chrome e no aplicativo da área de trabalho do Teams quando eles estão em execução no Linux.

  • Se o bot enviar a mesma URL de link profundo em um Action.OpenUrl, a guia Teams será aberta na guia atual do navegador quando o usuário selecionar o link.

Parâmetros de consulta

Nome do parâmetro Descrição
appId A ID do centro de administração do Microsoft Teams.

Exemplo: fe4a8eba-2a31-4737-8e33-e5fae6fee194
entityId A ID da guia, que você forneceu ao configurar a guia. Ao gerar uma URL para vinculação profunda, continue a usar a ID da entidade como um nome de parâmetro na URL. Ao configurar a guia, o objeto context se refere ao entityId como page.id.

Exemplo: Lista de tarefas 123
entityWebUrl ou subEntityWebUrl Um campo opcional com uma URL de fallback a ser usada se o cliente não for compatível com a renderização da guia.

Exemplo: https://tasklist.example.com/123
ou
https://tasklist.example.com/list123/task456
entityLabel ou subEntityLabel Um rótulo para o item em sua guia a ser usado ao exibir o link profundo.

Exemplo: Lista de Tarefas 123 ou Tarefa 456
context.subEntityId Uma ID para o item dentro da guia. Ao gerar uma URL para deep linking, continue a usar subEntityId como o nome do parâmetro na URL. Ao configurar a guia, o objeto context se refere ao subEntityId como page.subPageId.

Exemplo: Tarefa 456
context.channelId ID do canal do Microsoft Teams que está disponível na guia contexto. Esta propriedade está disponível somente em guias configuráveis com um escopo de equipe. Ele não está disponível em guias estáticas, que têm um escopo pessoal .

Exemplo: 19:cbe3683f25094106b826c9cada3afbe0@thread.skype
context.chatId ID do Chat que está disponível no contexto da guia para chat em grupo e reunião.

Exemplo: 17:b42de192376346a7906a7dd5cb84b673@thread.v2
context.contextType O Chat é o único com suporte contextType para reuniões.

Exemplo: chat
openInMeeting Use openInMeeting para controlar a experiência do usuário quando a guia de destino está associada a uma reunião. Se o usuário interagir com o link profundo em uma experiência de reunião contínua, o Teams abrirá o aplicativo no painel lateral da reunião. Defina esse valor como false para sempre abrir o aplicativo na guia de chat da reunião em vez do painel lateral, independentemente do status da reunião. O Teams ignora qualquer valor diferente de false.

Exemplo: false

Importante

  • Verifique se todos os parâmetros de consulta e os espaços em branco estão codificados corretamente em URI. A seguir está um exemplo de parâmetros de consulta codificados em URI:

    var encodedWebUrl = encodeURIComponent('https://tasklist.example.com/123/456&label=Task 456');
    var encodedContext = encodeURIComponent(JSON.stringify({"subEntityId": "task456"}));
    var taskItemUrl = 'https://teams.microsoft.com/l/entity/fe4a8eba-2a31-4737-8e33-e5fae6fee194/tasklist123?webUrl=' + encodedWebUrl + '&context=' + encodedContext;
    
  • Não há suporte para o link profundo de um aplicativo do Teams com URI codificado no Outlook.

Para obter mais informações sobre como obter os parâmetros de consulta para os tipos de guia internos, consulte Configurar os tipos de guia internos no Microsoft Teams.

Você pode configurar links profundos em seu aplicativo por meio do TeamsJS para permitir que os usuários naveguem em diferentes páginas dentro de seu aplicativo. O comportamento de navegação de um aplicativo do Teams estendido pelo Microsoft 365 Office depende de dois fatores:

  1. O destino para o qual o link profundo aponta.
  2. O host em que o aplicativo Teams está em execução

Se o aplicativo Teams estiver em execução no host onde o link profundo é direcionado, seu aplicativo será aberto diretamente no host. No entanto, se o aplicativo Teams estiver sendo executado em um host diferente de onde o link profundo é direcionado, o aplicativo será aberto primeiro no navegador.


Suporte para links profundos no TeamsJS

O TeamsJS permite que os aplicativos do Teams estendidos no Outlook e Microsoft 365 sejam marcar se o host der suporte ao recurso que você está tentando usar. Para verificar o suporte de um host de uma funcionalidade, você pode usar a função isSupported() associada ao namespace da API. O TeamsJS organiza APIs em recursos por meio de namespaces. Por exemplo, antes de usar uma API no pages namespace, você pode marcar o valor booleano retornado pages.isSupported() e executar a ação apropriada no contexto do seu aplicativo e da interface do usuário do aplicativo. Para obter mais informações, consulte como criar guias e outras experiências hospedadas com a biblioteca TeamsJS.

O código a seguir demonstra como navegar até uma entidade específica no aplicativo Teams:

Você pode acionar a navegação de sua guia usando a função pages.navigateToApp() conforme mostrado no código a seguir:

if (pages.isSupported()) {
  const navPromise = pages.navigateToApp({ appId: <appId>, pageId: <pageId>, webUrl: <webUrl>, subPageId: <subPageId>, channelId:<channelId>});
  navPromise.
     then((result) => {/*Successful navigation*/}).
     catch((error) => {/*Failed navigation*/});
}
else { /* handle case where capability isn't supported */ }

A funcionalidade de páginas da biblioteca TeamsJS fornece suporte para navegação entre guias em um aplicativo. Especificamente, o pages.currentApp namespace oferece uma função navigateTo(NavigateWithinAppParams) para permitir a navegação para uma guia específica no aplicativo atual e uma função navigateToDefaultPage() para navegar até a primeira guia definida no manifesto do aplicativo. O código a seguir ilustra como navegar até uma guia específica e padrão:

O código a seguir ilustra como navegar até uma guia específica:

if (pages.currentApp.isSupported()) {
    const navPromise = pages.currentApp.navigateTo({pageId: <pageId>, subPageId: <subPageId>});
    navPromise.
        then((result) => {/*Successful navigation*/}).
        catch((error) => {/*Failed navigation*/});
}
else {/*Handle situation where capability isn't supported*/
    const navPromise = pages.navigateToApp({appId: <appId>, pageId: <pageId>});
    navPromise.
        then((result) => {/*Successful navigation*/}).
        catch((error) => {/*Failed navigation*/});
}

Configurar navegação do botão Voltar

Quando um aplicativo tem várias guias, um usuário pode usar o botão voltar do aplicativo host do Microsoft 365 para voltar no histórico de navegação. No entanto, o histórico não inclui as ações que um usuário executa em uma guia. Para aprimorar a experiência do botão Voltar, você pode manter sua própria pilha de navegação interna e configurar um manipulador personalizado para seleções de botão Voltar. Isso pode ser feito por meio da registerBackButtonHandler() função no pages.backStack namespace.

Depois de registrar o manipulador, ele ajuda você a resolver a solicitação de navegação antes que o sistema tome uma ação. Se o manipulador for capaz de gerenciar a solicitação, ele deverá retornar true para que o sistema saiba que nenhuma ação adicional é necessária. Se a pilha interna estiver vazia, ela deverá retornar false para que o sistema possa chamar a navigateBack() função e executar a ação apropriada.

Retornar o foco para o aplicativo host

Depois que o usuário começa a usar elementos em uma guia, por padrão, o foco permanece com os elementos do iFrame até que o usuário selecione fora dele. Se o iFrame fizer parte da navegação do usuário com atalhos de teclado (a tecla Tab ou a tecla F6), você poderá se concentrar no aplicativo host. Você pode se concentrar no aplicativo host usando a pages.returnFocus() função. A returnFocus() função aceita um booliano indicando a direção para avançar o foco no aplicativo host; true para frente e false para trás. Geralmente, para frente realça a barra de pesquisa e para trás realça a barra de aplicativos.

Você pode permitir que os usuários do aplicativo naveguem até um chat pessoal com o aplicativo configurando o link profundo manualmente.

https://teams.microsoft.com/l/entity/<appId>/conversations?tenantId=<tenantId>

appId é a ID do seu aplicativo. Para obter mais informações, consulte ID do aplicativo para diferentes tipos de aplicativos.

Você pode compartilhar links profundos para entidades em aplicativos do Teams para navegar até o conteúdo e as informações em seu aplicativo de guia. Por exemplo, se seu aplicativo de guia contiver uma lista de tarefas, os membros da equipe poderão criar e compartilhar links para tarefas individuais. Quando o usuário do aplicativo seleciona o link, ele navega até a guia que se concentra no item específico.

Adicione uma ação de cópia do link a cada item da maneira mais adequada para a interface do usuário. Quando o usuário executar essa ação, chame pages.shareDeepLink() para exibir uma caixa de diálogo contendo um link que o usuário pode copiar para a área de transferência. Ao fazer essa chamada, passe uma ID para o item. Você o obtém de volta no contexto quando o link é seguido e sua guia é recarregada.

pages.shareDeepLink({ subPageId: <subPageId>, subPageLabel: <subPageLabel>, subPageWebUrl: <subPageWebUrl> })

Você deve substituir os seguintes parâmetros pelas informações apropriadas:

Nome do parâmetro Descrição
subPageId Um identificador exclusivo para o item em sua página para o qual você está vinculando profundamente.
subPageLabel Um rótulo do item a ser usado para exibir o link profundo.
subPageWebUrl Uma URL de fallback a ser usada se o cliente não puder renderizar a página.

Para obter mais informações, consulte pages.shareDeepLink().

Observação

  • Esse link profundo é diferente dos links fornecidos pelo item de menu Copiar link para , que gera apenas um link profundo que aponta para essa guia.
  • shareDeepLink não funciona em plataformas móveis do Teams.

Os links profundos das guias da Estrutura do SharePoint (SPFx) permitem que os usuários naveguem diretamente para guias específicas em um site do SharePoint ou aplicativo do Teams. Isso aprimora a experiência do usuário, fornecendo acesso rápido a conteúdo e funcionalidades relevantes.

Você pode usar o seguinte formato de link profundo em um bot, conector ou card de extensão de mensagem:

https://teams.microsoft.com/l/entity/<appId>/<EntityId>?webUrl=<entityWebUrl>/<EntityName>.

Observação

  • Quando um bot envia uma TextBlock mensagem com um link profundo, uma nova guia do navegador é aberta quando os usuários selecionam o link. Isso acontece no Chrome e no aplicativo da área de trabalho do Microsoft Teams em execução no Linux.
  • Se o bot enviar a mesma URL de link profundo em um Action.OpenUrl, a guia Teams será aberta no navegador atual quando o usuário selecionar o link. Nenhuma nova guia do navegador está aberta.

Parâmetros de consulta

Valor Descrição
APP_ID Sua ID de manifesto.

Exemplo: fxxxxxxx-0xxx-4xxx-8xxx-cxxxxxxxxxxx
entityID A ID do item que você forneceu ao configurar a guia.

Exemplo: tasklist123
entityWebUrl Uma URL de fallback a ser usada se o cliente não der suporte à renderização da guia.

Exemplo: https://tasklist.example.com/123 ou https://tasklist.example.com/list123/task456
entityName Um rótulo para o item em sua guia a ser usado ao exibir o link profundo.

Exemplo: Task List 123 ou Task 456

Um link profundo de caixa de diálogo é uma serialização do TaskInfo objeto com dois outros detalhes, o APP_ID e, opcionalmente, o BOT_APP_ID.

  • https://teams.microsoft.com/l/task/APP_ID?url=<TaskInfo.url>&height=<TaskInfo.height>&width=<TaskInfo.width>&title=<TaskInfo.title>&completionBotId=BOT_APP_ID

  • https://teams.microsoft.com/l/task/APP_ID?card=<TaskInfo.card>&height=<TaskInfo.height>&width=<TaskInfo.width>&title=<TaskInfo.title>&completionBotId=BOT_APP_ID

Para os tipos de dados e valores permitidos para <TaskInfo.url>, <TaskInfo.card>, <TaskInfo.height>, <TaskInfo.width> e <TaskInfo.title>, consulte objeto TaskInfo.

Dica

Codifique a URL do link profundo ao usar o card parâmetro, por exemplo, função JavaScriptencodeURI().

A tabela a seguir fornece informações sobre APP_ID e BOT_APP_ID:

Valor Tipo Obrigatório Descrição
APP_ID string Sim - Para aplicativos de terceiros, use o aplicativo id do manifesto ou do APP_ID Centro de administração do Teams, pois são idênticos.

- Para aplicativos personalizados ou aplicativos personalizados criados para sua organização (aplicativos LOB), use o APP_ID centro de administração do Teams ou use a API do Graph.

- A matriz validDomains no manifesto para APP_ID deve conter o domínio para url if url está presente na URL do link profundo. A ID do aplicativo já é conhecida quando uma caixa de diálogo é invocada de uma guia ou bot, e é por isso que ela não está incluída no TaskInfo.
BOT_APP_ID string Não Se um valor para completionBotId for especificado, o objeto result será enviado usando uma mensagem task/submit invoke para o bot especificado. Especificar BOT_APP_ID deve ser especificado como um bot no manifesto do aplicativo, que você não pode enviar a nenhum bot.

Observação

APP_ID e BOT_APP_ID pode ser o mesmo em muitos casos, se um aplicativo tiver um bot recomendado para usar como ID do aplicativo e se houver um.

Você também pode gerar um link profundo para compartilhar o aplicativo no estágio e iniciar ou ingressar em uma reunião.

Para links profundos para compartilhar conteúdo no estágio, consulte o link profundo para compartilhar conteúdo no estágio em reuniões.

Observação

  • A geração de um link profundo para compartilhar conteúdo no palco em reuniões está disponível apenas na visualização pública do desenvolvedor.
  • O link profundo para compartilhar conteúdo para o estágio da reunião é suportado apenas no cliente de área de trabalho do Teams.

Você pode gerar um link profundo para o painel lateral da reunião em uma reunião.

Use o seguinte formato para criar um link profundo para o painel lateral da reunião:

https://teams.microsoft.com/l/entity/<appId>/<entityId>?webUrl=<entityWebUrl>&label=<entityLabel>&context=<context>.

Por padrão, um link profundo é aberto em um painel lateral da reunião. Para abrir um link profundo diretamente em um aplicativo, em vez do painel lateral da reunião, adicione openInMeeting=false conforme mostrado no seguinte formato de link profundo:

https://teams.microsoft.com/l/entity/<appId>/<entityId>?webUrl=<entityWebUrl>&label=<entityLabel>&context=<context>&openInMeeting=false

Para obter mais informações, confira o link profundo para uma guia.

Um link profundo não é aberto no painel lateral da reunião nos seguintes cenários:

  • Não há nenhuma reunião ativa.
  • O aplicativo não tem sidePanel contexto declarado no manifesto do aplicativo.
  • openInMeeting está definido como false no link profundo.
  • O link profundo é selecionado fora da janela ou componente da reunião.
  • O link profundo não corresponde à reunião atual, por exemplo, se o link profundo for criado a partir de outra reunião.

Você pode invocar o Stageview por meio de um link profundo da sua guia, encapsulando a URL do link profundo na app.openLink(url) API. O link profundo também pode ser passado por meio de uma ação OpenURL no cartão. A openMode propriedade definida na API determina a resposta do Stageview. Para obter mais informações, consulte invocar o Stageview por meio de um link profundo.

Práticas recomendadas

  • Os links profundos só funcionarão corretamente se a guia tiver sido configurada usando a biblioteca v0.4 ou posterior, pois ela possui uma ID de entidade. Os links profundos para guias sem IDs de entidade ainda vão para a guia, mas não podem fornecer a sub'EntityId para a guia.
  • No Microsoft Windows, o Teams não pode lidar com links profundos INTERNET_MAX_URL_LENGTH que excedem 2048 caracteres devido ao limite na API ShellExecuteEx do Windows.
  • Ao criar um link profundo, verifique se o caminho para o cliente do Teams e outros metadados se encaixam dentro desse limite.
  • Se o seu link profundo contiver dados grandes, inclua um identificador exclusivo no link que seu aplicativo pode usar para buscar os dados necessários do serviço de back-end.

Exemplo de código

Nome do exemplo Descrição .NET Node.js TypeScript
Consumo de links profundos subEntityId Este aplicativo de exemplo do Teams destaca links profundos para várias funcionalidades, como iniciar chamadas, chats e navegar em guias e aplicativos. Ele apresenta um guia de configuração abrangente e oferece suporte a interações com bots e guias para maior envolvimento do usuário. View View NA
Navegação no aplicativo Guia Este exemplo ilustra o recurso de navegação de guias em um aplicativo do Microsoft Teams, permitindo transições suaves entre diferentes guias. Projetado para uso com Node.js, ele destaca como os usuários podem navegar efetivamente no aplicativo para uma experiência aprimorada. NA View NA
Valores de passagem de link profundo de tabulação Este aplicativo de exemplo para o Microsoft Teams ilustra a criação e o uso de links profundos dinâmicos para passar valores contextuais para aplicativos Web autônomos e de guia. Ele destaca as diferenças na formatação e no consumo de links com base no ambiente de acesso do usuário, aprimorando os recursos de navegação e exibição de dados. NA NA View