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:
- Notificações em tempo real: Alertar equipes sobre eventos importantes
- Automação de comunicação: Enviar mensagens automatizadas para canais
- Adaptive Cards: Criar mensagens ricas e interativas
- Gestão de reuniões: Agendar e criar reuniões automaticamente
- Integração workflow: Conectar processos externos ao Teams
Como funciona internamente?
Quando o MICROSOFT_TEAMS é executado, o sistema:
- Identifica operação: send_message, send_notification, create_meeting, get_channels, send_adaptive_card
- Valida parâmetros: Webhook URL ou access token são obrigatórios
- Prepara payload: Formata mensagem no padrão MessageCard do Teams
- Executa operação: Via webhook (simples) ou Graph API (avançado)
- Retorna resultado: Confirmação de envio ou dados da operação
- 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
- Alertas de sistema: Notificar equipe sobre falhas ou problemas
- Notificações de vendas: Avisar sobre novos leads ou vendas
- Aprovações: Enviar solicitações de aprovação com Adaptive Cards
- Relatórios: Enviar resumos diários/semanais para canais
- 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
- Abra o Microsoft Teams
- Vá até o canal desejado
- Clique em "..." → Conectores
- Procure "Incoming Webhook"
- Clique em "Configurar"
- Dê um nome ao webhook
- Copie a URL gerada
- 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