Pular para conteúdo

MARK_AS_READ - Marcar Email como Lido

⚠️ FUNCIONALIDADE NÃO IMPLEMENTADA

STATUS: Esta funcionalidade ainda não está implementada no Gmail Executor atual.

ARQUIVO: /home/zielinski/develop/gptapi/src/whatsapp-flows/executors/gmail-executor.service.ts

O QUE FALTA: Adicionar operação mark_as_read que remove a label UNREAD de um email.

O que seria este Node?

O MARK_AS_READ seria o node responsável por marcar emails como lidos removendo a label UNREAD, útil para automação de triagem e processamento de emails.

Por que este Node deveria existir?

Marcar emails como lidos programaticamente permite automação completa do workflow de emails. Deveria existir para:

  1. Automação de triagem: Marcar como lido após processar automaticamente
  2. Gestão de inbox: Manter caixa organizada sem intervenção manual
  3. Confirmação de processamento: Indicar que email foi tratado pelo sistema
  4. Workflows completos: Processar e marcar em um único fluxo

Como deveria funcionar internamente?

A implementação deveria:

  1. Validar messageId: Confirmar que email existe
  2. Remover label UNREAD: Chamar gmail.users.messages.modify() removendo UNREAD
  3. Confirmar mudança: Verificar que label foi removida
  4. Retornar status: Indicar sucesso da operação

Código sugerido para implementação:

private async markAsRead(gmail: any, data: GmailNodeData): Promise<any> {
  const response = await gmail.users.messages.modify({
    userId: 'me',
    id: data.messageId,
    requestBody: {
      removeLabelIds: ['UNREAD']
    }
  });

  return {
    messageId: data.messageId,
    action: 'marked_as_read',
    labelIds: response.data.labelIds,
    success: true
  };
}

// Adicionar no switch do execute():
case 'mark_as_read':
  result = await this.markAsRead(gmail, data);
  break;

Quando você DEVERIA usar este Node?

Deveria usar MARK_AS_READ sempre que precisar de marcar emails processados:

Casos de uso

  1. Após processar: "Marcar como lido após extrair dados"
  2. Confirmação automática: "Marcar como lido após responder automaticamente"
  3. Triagem: "Marcar emails irrelevantes como lidos"
  4. Limpeza de inbox: "Processar e marcar múltiplos emails"

Quando NÃO usar MARK_AS_READ

  • Manter não lido: Se precisa de indicador visual de pendência
  • Leitura manual: Se humano precisa revisar
  • Sem processamento: Não marcar como lido sem processar

Parâmetros

Campo Tipo Obrigatório Descrição
oauth2 object Sim Credenciais OAuth2
operation string Sim Deveria ser "mark_as_read"
messageId string Sim ID do email a marcar como lido

Exemplo 1: Processar e Marcar como Lido

Objetivo: Ler email, processar e marcar como lido

JSON para Importar (Quando implementado)

{
  "name": "Processar e Marcar Lido",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Novo Email" }
    },
    {
      "id": "gmail_get_1",
      "type": "gmail",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Ler Email",
        "operation": "get",
        "oauth2": {
          "clientId": "YOUR_CLIENT_ID",
          "clientSecret": "YOUR_SECRET",
          "refreshToken": "YOUR_TOKEN"
        },
        "messageId": "{{triggerEmailId}}"
      }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Processar Dados",
        "parameters": {
          "variable": "dadosProcessados",
          "value": "Processado: {{gmail_get_1.subject}}"
        }
      }
    },
    {
      "id": "gmail_mark_1",
      "type": "gmail",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Marcar Lido",
        "operation": "mark_as_read",
        "oauth2": {
          "clientId": "YOUR_CLIENT_ID",
          "clientSecret": "YOUR_SECRET",
          "refreshToken": "YOUR_TOKEN"
        },
        "messageId": "{{gmail_get_1.id}}"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "✅ Email processado e marcado como lido"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "gmail_get_1" },
    { "source": "gmail_get_1", "target": "variable_1" },
    { "source": "variable_1", "target": "gmail_mark_1" },
    { "source": "gmail_mark_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada (quando implementado):

Sistema: ✅ Email processado e marcado como lido

Resposta do Node (quando implementado)

{
  "success": true,
  "action": "mark_as_read",
  "messageId": "18f2b9c4d5e6a7f8",
  "labelIds": ["INBOX"],
  "timestamp": "2025-10-12T21:30:00.000Z"
}

Implementação Necessária

Para implementar esta funcionalidade:

  1. Adicione método markAsRead() no GmailExecutorService
  2. Adicione case 'mark_as_read' no switch do método execute()
  3. Adicione validação no método validate() para operation mark_as_read
  4. Adicione 'mark_as_read' em getSupportedOperations()

Boas Práticas (quando implementado)

SIM: - Sempre marcar após processar com sucesso - Validar que email existe antes de marcar - Combinar com GET_EMAIL para workflow completo

NÃO: - Não marcar antes de processar - Não marcar emails importantes sem backup - Não marcar sem confirmação de processamento

Dicas

💡 Dica 1: Combine com GET_EMAILS para processar lote 💡 Dica 2: Use CONDITION para marcar apenas após validar 💡 Dica 3: MARK_AS_UNREAD reverterá esta operação

Próximo Node

MARK_AS_UNREAD - Marcar como não lido → GET_EMAIL_BY_ID - Buscar email → ARCHIVE_EMAIL - Arquivar email