Pular para conteúdo

MICROSOFT_TEAMS - Integração com Microsoft Teams

O que é este Node?

O MICROSOFT_TEAMS é o node responsável por integrar com Microsoft Teams para enviar mensagens, notificações, adaptive cards, criar reuniões e gerenciar canais.

Por que este Node existe?

Microsoft Teams é plataforma de colaboração essencial em empresas. O MICROSOFT_TEAMS existe para:

  1. Notificações em tempo real: Alertar equipes sobre eventos importantes
  2. Automação de comunicação: Enviar mensagens automatizadas para canais
  3. Adaptive Cards: Criar mensagens ricas e interativas
  4. Gestão de reuniões: Agendar e criar reuniões automaticamente
  5. Integração workflow: Conectar processos externos ao Teams

Como funciona internamente?

Quando o MICROSOFT_TEAMS é executado, o sistema:

  1. Identifica operação: send_message, send_notification, create_meeting, get_channels, send_adaptive_card
  2. Valida parâmetros: Webhook URL ou access token são obrigatórios
  3. Prepara payload: Formata mensagem no padrão MessageCard do Teams
  4. Executa operação: Via webhook (simples) ou Graph API (avançado)
  5. Retorna resultado: Confirmação de envio ou dados da operação
  6. Se erro: Lança exceção com detalhes

Código interno (infrastructure-executor.service.ts:49-73):

private async executeMicrosoftTeams(parameters: any, context: any): Promise<any> {
  const { operation, webhookUrl, message, channelId, teamId, accessToken } = parameters;

  this.logger.log(`👥 MICROSOFT_TEAMS - Operation: ${operation}`);

  switch (operation) {
    case 'send_message':
      return this.sendTeamsMessage(webhookUrl, message, accessToken, context);

    case 'send_notification':
      return this.sendTeamsNotification(webhookUrl, message, context);

    case 'create_meeting':
      return this.createTeamsMeeting(parameters, context);

    case 'get_channels':
      return this.getTeamsChannels(teamId, accessToken, context);

    case 'send_adaptive_card':
      return this.sendAdaptiveCard(webhookUrl, parameters.card, context);

    default:
      throw new Error(`Unsupported Microsoft Teams operation: ${operation}`);
  }
}

Quando você DEVE usar este Node?

Use MICROSOFT_TEAMS sempre que precisar integrar com Teams:

Casos de uso

  1. Alertas de sistema: Notificar equipe sobre falhas ou problemas
  2. Notificações de vendas: Avisar sobre novos leads ou vendas
  3. Aprovações: Enviar solicitações de aprovação com Adaptive Cards
  4. Relatórios: Enviar resumos diários/semanais para canais
  5. Monitoramento: Alertas de métricas e KPIs importantes

Quando NÃO usar MICROSOFT_TEAMS

  • Slack: Use node SLACK para Slack
  • Email: Use node EMAIL para notificações por email
  • WhatsApp: Use nodes WhatsApp para mensagens no WhatsApp

Parâmetros Detalhados

operation (string, obrigatório)

O que é: Tipo de operação a ser executada no Teams.

Valores válidos: - send_message: Enviar mensagem simples - send_notification: Enviar notificação - create_meeting: Criar reunião - get_channels: Listar canais de um time - send_adaptive_card: Enviar Adaptive Card

Flow completo para testar:

{
  "name": "Teste TEAMS - Send Message",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "teams_1",
      "type": "microsoft_teams",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Enviar para Teams",
        "parameters": {
          "operation": "send_message",
          "webhookUrl": "https://outlook.office.com/webhook/SEU_WEBHOOK_URL",
          "message": "Olá do Lumina Flow!"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Mensagem enviada para Teams!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "teams_1" },
    { "source": "teams_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Mensagem aparece no canal do Teams configurado!

webhookUrl (string, obrigatório para webhook)

O que é: URL do webhook do canal do Teams.

Como obter: No Teams, vá em Canal → Conectores → Incoming Webhook

Flow completo para testar:

{
  "name": "Teste TEAMS - Webhook URL",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Pedir Nome",
        "parameters": {
          "message": "Qual seu nome?",
          "variable": "nome"
        }
      }
    },
    {
      "id": "teams_1",
      "type": "microsoft_teams",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Notificar Teams",
        "parameters": {
          "operation": "send_message",
          "webhookUrl": "https://outlook.office.com/webhook/SEU_WEBHOOK_URL",
          "message": "Novo usuário: {{nome}}"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Equipe notificada sobre {{nome}}!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "teams_1" },
    { "source": "teams_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Canal do Teams recebe notificação personalizada.

message (string, obrigatório para mensagens)

O que é: Conteúdo da mensagem a ser enviada.

Flow completo para testar:

{
  "name": "Teste TEAMS - Message",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "teams_1",
      "type": "microsoft_teams",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Alerta Importante",
        "parameters": {
          "operation": "send_notification",
          "webhookUrl": "https://outlook.office.com/webhook/SEU_WEBHOOK_URL",
          "message": "🚨 ALERTA: Sistema processou 100 novos pedidos!"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Alerta enviado!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "teams_1" },
    { "source": "teams_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Mensagem formatada aparece no Teams.

card (object, opcional)

O que é: Objeto Adaptive Card para mensagens ricas e interativas.

Flow completo para testar:

{
  "name": "Teste TEAMS - Adaptive Card",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "teams_1",
      "type": "microsoft_teams",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Enviar Card",
        "parameters": {
          "operation": "send_adaptive_card",
          "webhookUrl": "https://outlook.office.com/webhook/SEU_WEBHOOK_URL",
          "card": {
            "title": "Nova Venda Realizada",
            "text": "Parabéns! Uma nova venda foi concluída.",
            "sections": [
              {
                "activityTitle": "Cliente: João Silva",
                "activitySubtitle": "Valor: R$ 1.500,00",
                "facts": [
                  { "name": "Produto:", "value": "Plano Premium" },
                  { "name": "Data:", "value": "15/01/2025" }
                ]
              }
            ]
          }
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Card enviado para Teams!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "teams_1" },
    { "source": "teams_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Adaptive Card rico aparece no canal.

accessToken (string, opcional)

O que é: Token de acesso para usar Graph API (operações avançadas).

Quando usar: Para operações que requerem Graph API (create_meeting, get_channels)

teamId (string, opcional)

O que é: ID do time do Teams (para operações de gestão).

channelId (string, opcional)

O que é: ID do canal específico (para operações em canais).

Parâmetros

Campo Tipo Obrigatório Descrição
operation string Sim send_message, send_notification, create_meeting, get_channels, send_adaptive_card
webhookUrl string Sim* URL do webhook do Teams (*exceto Graph API)
message string Sim* Conteúdo da mensagem (*para operações de mensagem)
card object Não Adaptive Card para mensagens ricas
accessToken string Não Token para Graph API
teamId string Não ID do time (para operações de gestão)
channelId string Não ID do canal

Exemplo 1: Notificação de Alerta

Objetivo: Enviar alerta de sistema para canal do Teams

JSON para Importar

{
  "name": "TEAMS - Alerta de Sistema",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "teams_1",
      "type": "microsoft_teams",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Alerta Crítico",
        "parameters": {
          "operation": "send_notification",
          "webhookUrl": "https://outlook.office.com/webhook/SEU_WEBHOOK_URL",
          "message": "🔴 ALERTA CRÍTICO\n\nServidor de produção com uso de CPU acima de 90%\n\nAção necessária imediatamente!"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Equipe de DevOps notificada!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "teams_1" },
    { "source": "teams_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

[No Teams]: 🔴 ALERTA CRÍTICO

Servidor de produção com uso de CPU acima de 90%

Ação necessária imediatamente!

Sistema: Equipe de DevOps notificada!

Exemplo 2: Notificação de Nova Venda

Objetivo: Avisar time comercial sobre nova venda

JSON para Importar

{
  "name": "TEAMS - Nova Venda",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Cliente",
        "parameters": {
          "message": "Nome do cliente:",
          "variable": "cliente"
        }
      }
    },
    {
      "id": "number_1",
      "type": "number",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Valor",
        "parameters": {
          "message": "Valor da venda:",
          "variable": "valor",
          "decimals": 2
        }
      }
    },
    {
      "id": "teams_1",
      "type": "microsoft_teams",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Notificar Vendas",
        "parameters": {
          "operation": "send_message",
          "webhookUrl": "https://outlook.office.com/webhook/SEU_WEBHOOK_URL",
          "message": "🎉 NOVA VENDA!\n\nCliente: {{cliente}}\nValor: R$ {{valor}}\nData: {{now}}\n\nParabéns à equipe!"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Time comercial notificado sobre venda de {{cliente}}!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "number_1" },
    { "source": "number_1", "target": "teams_1" },
    { "source": "teams_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Nome do cliente:
Usuário: Maria Santos
Sistema: Valor da venda:
Usuário: 2500.50
[No Teams]: 🎉 NOVA VENDA!

Cliente: Maria Santos
Valor: R$ 2500.50
Data: 2025-01-15T10:30:00Z

Parabéns à equipe!
Sistema: Time comercial notificado sobre venda de Maria Santos!

Exemplo 3: Relatório Diário

Objetivo: Enviar resumo diário de métricas

JSON para Importar

{
  "name": "TEAMS - Relatório Diário",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Métricas",
        "parameters": {
          "variables": {
            "vendas": 42,
            "tickets": 15,
            "satisfacao": 4.8
          }
        }
      }
    },
    {
      "id": "teams_1",
      "type": "microsoft_teams",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Enviar Relatório",
        "parameters": {
          "operation": "send_notification",
          "webhookUrl": "https://outlook.office.com/webhook/SEU_WEBHOOK_URL",
          "message": "📊 RELATÓRIO DIÁRIO\n\n✅ Vendas: {{vendas}}\n🎫 Tickets: {{tickets}}\n⭐ Satisfação: {{satisfacao}}/5.0\n\nÓtimo trabalho, equipe!"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Relatório enviado para Teams!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "teams_1" },
    { "source": "teams_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

[No Teams]: 📊 RELATÓRIO DIÁRIO

✅ Vendas: 42
🎫 Tickets: 15
⭐ Satisfação: 4.8/5.0

Ótimo trabalho, equipe!

Sistema: Relatório enviado para Teams!

Resposta do Node

{
  "success": true,
  "action": "teams_message_sent",
  "message": "Olá do Lumina Flow!",
  "method": "webhook",
  "timestamp": "2025-01-15T10:30:00.000Z"
}

Como Configurar Webhook no Teams

  1. Abra o Microsoft Teams
  2. Vá até o canal desejado
  3. Clique em "..." → Conectores
  4. Procure "Incoming Webhook"
  5. Clique em "Configurar"
  6. Dê um nome ao webhook
  7. Copie a URL gerada
  8. Use a URL no parâmetro webhookUrl

Boas Práticas

SIM:

  • Use webhooks para notificações simples (mais fácil)
  • Use Adaptive Cards para mensagens ricas
  • Organize canais por tipo de notificação
  • Inclua contexto relevante nas mensagens
  • Use emojis para destacar prioridade

NÃO:

  • Não envie spam (muitas mensagens frequentes)
  • Não exponha webhooks publicamente
  • Não misture alertas críticos com informativos
  • Não use para dados sensíveis sem criptografia

Dicas

💡 Webhook vs Graph API: Webhook é mais simples, Graph API oferece mais recursos

💡 Adaptive Cards: Use https://adaptivecards.io/designer para criar cards

💡 Formatação: Suporta Markdown básico em mensagens

💡 Testing: Teste webhooks antes de usar em produção

Próximo Node

SLACK - Integração com Slack → WEBHOOK - Webhooks genéricos → EMAIL - Notificações por email