Deploy de Aplicações Custom no Microsoft Teams: Guia Prático para Admins

Duarte Spínola  |  2026-07-10

O Microsoft Teams não é apenas um cliente de chat — é uma plataforma de delivery de aplicações. PMEs podem integrar dashboards internos, ferramentas CRUD, portais de suporte e bots directamente no Teams, evitando que os utilizadores troquem de contexto. Este guia mostra como fazer deploy de apps custom no Teams, com base na documentação oficial Teams Developer Portal, Teams custom app policies e Teams PowerShell module.

ℹ️ Informação

O sideloading de apps custom está desactivado por defeito no Teams. Antes de fazer deploy, o admin precisa de activar permissões via Teams Admin Center ou PowerShell. Sem isto, as apps custom não aparecem na loja da organização.

Conteúdos

1. Tipos de Apps no Teams

O Teams suporta vários tipos de extensões de app:

Tipo Descrição Complexidade
Personal App Tab pessoal — app em ecrã inteiro para um utilizador Baixa
Tab (Channel) Web content embedded num channel do Teams Baixa-Média
Bot Bot conversacional para 1:1 ou channels Média-Alta
Messaging Extension Acções no compose box (pesquisar, partilhar) Alta
Meeting Extension App integrada em reuniões Teams Alta

2. Teams Developer Portal

O Teams Developer Portal é a ferramenta oficial para criar e gerir app packages. Acede em https://dev.teams.microsoft.com com uma conta M365.

Funcionalidades principais:

  • App Editor — criar app package visualmente (manifesto, ícones, configuração de tabs/bots)
  • App Validator — valida o manifesto contra o schema Teams antes de publicar
  • Preview in Teams — testar a app directamente no Teams client
  • Publish to org — submeter a app para a loja da organização (Teams Admin Center approval)

3. App Package e Manifesto JSON

Um app package do Teams é um ficheiro .zip contendo:

  • manifest.json — metadata da app (nome, descrição, versão, permissões, configuração)
  • color.png — ícone a cores (192x192px)
  • outline.png — ícone outline (32x32px, transparente)

Exemplo de manifest.json (schema v1.17, Teams 2026):

{
  "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.17/MicrosoftTeams.schema.json",
  "manifestVersion": "1.17",
  "version": "1.0.0",
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "packageName": "com.pme.dashboard",
  "developer": {
    "name": "PME IT",
    "websiteUrl": "https://pme.pt",
    "privacyUrl": "https://pme.pt/privacy",
    "termsOfUseUrl": "https://pme.pt/terms"
  },
  "icons": {
    "color": "color.png",
    "outline": "outline.png"
  },
  "name": {
    "short": "Dashboard PME",
    "full": "Dashboard Interno PME"
  },
  "description": {
    "short": "Dashboard de métricas internas",
    "full": "Dashboard de métricas internas da PME com indicadores de vendas, suporte e infraestrutura."
  },
  "accentColor": "#2b6cb0",
  "staticTabs": [
    {
      "entityId": "dashboard",
      "name": "Dashboard",
      "contentUrl": "https://dashboard.pme.pt/teams-tab",
      "websiteUrl": "https://dashboard.pme.pt",
      "scopes": ["personal"]
    }
  ],
  "permissions": ["identity", "messageTeamMembers"],
  "validDomains": ["dashboard.pme.pt"]
}
⚠️ Aviso

O campo validDomains é obrigatório — só podes carregar conteúdo de domínios listados. Se a tua tab carrega conteúdo de dashboard.pme.pt, esse domínio tem de estar no manifesto. Domínios não listados são bloqueados pelo Teams.

4. Opção 1: SPFx Web Parts como Tabs

A SharePoint Framework (SPFx) permite criar web parts que funcionam tanto no SharePoint como no Teams. É a opção mais simples se a PME já tem SharePoint.

# Instalar SPFx toolchain
npm install -g @microsoft/generator-sharepoint

# Criar nova SPFx web part
yo @microsoft/sharepoint --solution-name "pme-dashboard" `
  --framework react --component-type webpart `
  --component-name "DashboardTab"

# Empacotar para Teams
gulp bundle --ship
gulp package-solution --ship

# O ficheiro .sppkg gerado em /sharepoint/solution/
# pode ser deployed no SharePoint App Catalog
# e automaticamente fica disponível como Tab no Teams

Vantagens SPFx:

  • Reutiliza web parts SharePoint existentes
  • Sem necessidade de hosting separado — SharePoint hospeda o conteúdo
  • Integração nativa com Microsoft Graph API
  • Single Sign-On automático via Entra ID

5. Opção 2: Power Apps Integrado

Para PMEs sem developers, Power Apps oferece uma opção low-code. Apps criadas no Power Apps podem ser embedded directamente no Teams:

# Passo a passo Power Apps + Teams
# 1. Criar app no Power Apps Studio
#    - https://make.powerapps.com
# 2. Publicar a app
# 3. No Teams: Apps > Power Apps
# 4. Seleccionar a app publicada
# 5. Pin como Tab num channel ou como Personal App
#
# Alternativa: usar Power Apps embedded component
# Adicionar > Power Apps > seleccionar app
# A app aparece como tab interactiva no channel
💡 Dica

Power Apps incluído no Microsoft 365 Business Standard permite criar apps sem custo adicional. Para funcionalidades premium (conectores premium, SQL Server), precisa de Power Apps Premium (~€20/user/mês).

6. Opção 3: Custom App com Graph API + Bot Framework

Para apps mais complexas (bots, messaging extensions, integrações com sistemas internos), usa o Bot Framework + Microsoft Graph API:

# Criar bot com Bot Framework SDK (Node.js)
npm install botbuilder @microsoft/teams-js

# Estrutura básica do bot
const { TeamsActivityHandler, CardFactory } = require('botbuilder');

class PmeBot extends TeamsActivityHandler {
  async onMessage(context, next) {
    const text = context.activity.text.toLowerCase();
    
    if (text.includes('ticket')) {
      const card = CardFactory.adaptiveCard({
        type: 'AdaptiveCard',
        body: [{
          type: 'TextBlock',
          text: 'Novo ticket criado: #TK-001',
          size: 'large'
        }],
        $schema: 'http://adaptivecards.io/schemas/adaptive-card.json',
        version: '1.4'
      });
      await context.sendActivity({ attachments: [card] });
    }
    await next();
  }
}

module.exports.PmeBot = PmeBot;

Registrar o bot no Entra ID:

  • Entra ID > App Registrations > New Registration
  • Nome: “PME Teams Bot”
  • Redirect URI: https://pme-bot.azurewebsites.net/api/messages
  • API Permissions: Microsoft Graph > Teams > TeamsAppInstallation.ReadWriteForUser
  • Criar client secret e guardar para o bot

7. Deploy via Teams Admin Center

O upload de custom apps é feito no Teams Admin Center:

  • 1. Teams Admin Center > Apps > Manage apps
  • 2. Click “Upload new app”
  • 3. Seleccionar o ficheiro .zip (manifesto + ícones)
  • 4. A app aparece na lista com estado “Published”
  • 5. Configurar App Setup Policy para pinar a app para utilizadores
ℹ️ Informação

Se o upload falhar com erro “Custom app uploads are disabled”, precisa de activar o sideloading e ajustar as app permission policies (ver secções 8 e 9 abaixo).

8. App Permission Policies

As app permission policies controlam quem pode instalar, ver e usar apps no Teams. Por defeito, todas as apps Microsoft e third-party são permitidas, mas custom apps estão bloqueadas.

Policy Setting Default Recomendado PME
Microsoft apps Allow all Allow all
Third-party apps Allow all Block specific (review)
Custom apps Blocked Allow for IT team only

9. Activar Sideloading

O sideloading permite que utilizadores instalem apps custom directamente (sem passar pelo Admin Center). Isto é necessário durante desenvolvimento/testing:

# Conectar ao Teams PowerShell
Connect-MicrosoftTeams

# Verificar setting actual de sideloading
Get-CsTeamsAppPermissionPolicy | Select-Object Identity, DefaultCatalogApps

# Criar policy que permite custom apps (para equipa IT)
New-CsTeamsAppPermissionPolicy -Identity "IT-CustomApps" `
  -DefaultCatalogApps "Allow" `
  -PrivateCatalogApps "Allow" `
  -DefaultCatalogAppsType "AllowAllAppList"

# Atribuir policy a um grupo (IT team)
Grant-CsTeamsAppPermissionPolicy -PolicyName "IT-CustomApps" `
  -GlobalAdmin # ou especificar UPN individual

10. Deploy via PowerShell

Para automatizar o deploy, usa o Teams PowerShell module:

# Instalar Teams PowerShell module
Install-Module -Name MicrosoftTeams -Force -AllowClobber

# Conectar
Connect-MicrosoftTeams

# Upload de custom app (.zip)
$app = New-CsTeamsApp -PackagePath "C:\apps\pme-dashboard.zip"
Write-Output "App ID: $($app.Id)"

# Criar App Setup Policy (pinar app para todos)
New-CsTeamsAppSetupPolicy -Identity "PME-PinDashboard" `
  -PinnedApps "com.pme.dashboard"

# Atribuir policy a todos os utilizadores
Grant-CsTeamsAppSetupPolicy -PolicyName "PME-PinDashboard" -Global

# Verificar apps instaladas
Get-CsTeamsApp | Where-Object { $_.DisplayName -like "*Dashboard*" }

11. Troubleshooting Comum

Problema Causa Solução
App não aparece na loja Sideloading desactivado Activar via policy (secção 9)
Tab em branco Domínio não em validDomains Adicionar domínio ao manifesto
Erro “Manifesto inválido” Schema desactualizado ou campo obrigatório em falta Usar Developer Portal Validator
Bot não responde Endpoint HTTPS não acessível ou certificado inválido Verificar URL do endpoint e cert TLS
Ícones não aparecem Tamanho errado (32×32 / 192×192) Verificar dimensões exactas PNG

12. Recomendações para PMEs

  • Começar com Power Apps — para PMEs sem developers, é a forma mais rápida de ter uma app no Teams. Low-code, integrado, sem hosting.
  • SPFx se tens SharePoint — se já tens SharePoint e developers, SPFx é a opção natural. Reutiliza web parts e hosting é gratuito.
  • Custom app só se necessário — Bot Framework + Graph API é potente mas requer developer, hosting e manutenção. Reservar para casos reais.
  • Permission policies granulares — não abras custom apps para toda a organização. Cria policies por grupo (IT, Finance, Sales).
  • Testar com equipa IT primeiro — activa sideloading apenas para IT, testa a app durante 1-2 semanas, depois publica na org store.
  • Versionamento do manifesto — cada update da app requer novo upload do .zip com versão incrementada. Mantém um repositório Git com os manifestos.
  • Documentar o processo — quem pode criar apps? Quem aprova? Qual o processo de review? Documenta para evitar shadow IT.

Artigos Relacionados

Voltar ao Índice

Este artigo foi útil?

Duarte Spínola

Deixe um Comentário