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:
- Automação de triagem: Marcar como lido após processar automaticamente
- Gestão de inbox: Manter caixa organizada sem intervenção manual
- Confirmação de processamento: Indicar que email foi tratado pelo sistema
- Workflows completos: Processar e marcar em um único fluxo
Como deveria funcionar internamente?
A implementação deveria:
- Validar messageId: Confirmar que email existe
- Remover label UNREAD: Chamar gmail.users.messages.modify() removendo UNREAD
- Confirmar mudança: Verificar que label foi removida
- 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
- Após processar: "Marcar como lido após extrair dados"
- Confirmação automática: "Marcar como lido após responder automaticamente"
- Triagem: "Marcar emails irrelevantes como lidos"
- 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:
- Adicione método
markAsRead()noGmailExecutorService - Adicione case
'mark_as_read'no switch do métodoexecute() - Adicione validação no método
validate()para operationmark_as_read - Adicione
'mark_as_read'emgetSupportedOperations()
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