Asistente de respuesta automática inteligente de Gmail, con GPT-4o y memoria de contexto de Google Drive
Este es unPersonal Productivity, AI Chatbotflujo de automatización del dominio deautomatización que contiene 18 nodos.Utiliza principalmente nodos como If, Set, Code, Gmail, GoogleDrive. Asistente de respuestas automáticas inteligente para Gmail, con GPT-4o y memoria de contexto de Google Drive
- •Cuenta de Google y credenciales de API de Gmail
- •Credenciales de API de Google Drive
- •Clave de API de OpenAI
Nodos utilizados (18)
Categoría
{
"meta": {
"instanceId": "074f90e2bb5206c5f405a8aac6551497c72005283a5405fb08207b1b3a78c2b8",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "gmail-trigger-001",
"name": "Disparador de Gmail",
"type": "n8n-nodes-base.gmailTrigger",
"position": [
560,
400
],
"parameters": {
"simple": false,
"filters": {
"q": "-from:me"
},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
}
},
"credentials": {
"gmailOAuth2": {
"id": "YOUR_GMAIL_CRED_ID"
}
},
"typeVersion": 1
},
{
"id": "drive-download-001",
"name": "Google Drive - Download Profile",
"type": "n8n-nodes-base.googleDrive",
"position": [
760,
260
],
"parameters": {
"fileId": "YOUR_PROFILE_DOC_FILE_ID",
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "YOUR_GOOGLE_DRIVE_CRED_ID"
}
},
"typeVersion": 1
},
{
"id": "gmail-thread-001",
"name": "Gmail - Fetch Thread",
"type": "n8n-nodes-base.gmail",
"position": [
760,
540
],
"parameters": {
"threadId": "={{ $json.threadId }}",
"operation": "getAll"
},
"credentials": {
"gmailOAuth2": {
"id": "YOUR_GMAIL_CRED_ID"
}
},
"typeVersion": 2
},
{
"id": "profile-loader-001",
"name": "Profile Document Loader",
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"position": [
980,
260
],
"parameters": {
"options": {
"metadata": {
"metadataValues": [
{
"name": "type",
"value": "user_profile"
}
]
}
},
"jsonData": "={{ $json.content }}",
"jsonMode": "expressionData"
},
"typeVersion": 1
},
{
"id": "thread-loader-001",
"name": "Thread Document Loader",
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"position": [
980,
540
],
"parameters": {
"options": {
"metadata": {
"metadataValues": [
{
"name": "type",
"value": "email_thread"
}
]
}
},
"jsonData": "={{ JSON.stringify($json.messages) }}",
"jsonMode": "expressionData"
},
"typeVersion": 1
},
{
"id": "profile-splitter-001",
"name": "Profile Text Splitter",
"type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
"position": [
1200,
260
],
"parameters": {
"chunkSize": 1000,
"chunkOverlap": 100
},
"typeVersion": 1
},
{
"id": "thread-splitter-001",
"name": "Thread Text Splitter",
"type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
"position": [
1200,
540
],
"parameters": {
"chunkSize": 2000,
"chunkOverlap": 200
},
"typeVersion": 1
},
{
"id": "openai-embeddings-001",
"name": "OpenAI Incrustaciones",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
1420,
400
],
"parameters": {
"options": {}
},
"credentials": {
"openAiApi": {
"id": "YOUR_OPENAI_CRED_ID"
}
},
"typeVersion": 1.2
},
{
"id": "vector-store-001",
"name": "Simple Almacén de vectores",
"type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory",
"position": [
1640,
400
],
"parameters": {
"mode": "insert",
"memoryKey": "email_context_{{ $('Gmail Trigger').item.json.threadId }}"
},
"typeVersion": 1
},
{
"id": "prepare-context-001",
"name": "Prepare Agente Context",
"type": "n8n-nodes-base.set",
"position": [
1860,
400
],
"parameters": {
"assignments": {
"assignments": [
{
"id": "context-text",
"name": "text",
"type": "string",
"value": "=Please analyze this incoming email and generate an appropriate reply based on the user profile and email thread context.\n\nIncoming Email Subject: {{ $('Gmail Trigger').item.json.subject }}\nIncoming Email From: {{ $('Gmail Trigger').item.json.headers.from }}\nIncoming Email Body: {{ $('Gmail Trigger').item.json.textAsHtml }}\n\nInstructions:\n1. If this appears to be a newsletter, automated notification, or spam, respond with exactly 'NO_REPLY_NEEDED'\n2. If this requires a response, generate a professional and contextual reply\n3. Use the knowledge from the vector store to inform your response\n4. Keep responses concise but helpful"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "openai-chat-001",
"name": "Modelo de chat OpenAI",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2080,
580
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {
"temperature": 0.3
}
},
"credentials": {
"openAiApi": {
"id": "YOUR_OPENAI_CRED_ID"
}
},
"typeVersion": 1.2
},
{
"id": "simple-memory-001",
"name": "Simple Memoria",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
2180,
580
],
"parameters": {
"sessionKey": "=email_{{ $('Gmail Trigger').item.json.threadId }}",
"maxTokenLimit": 4000,
"sessionIdType": "customKey"
},
"typeVersion": 1.3
},
{
"id": "vector-retriever-001",
"name": "Almacén de vectores Retriever",
"type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory",
"position": [
2280,
580
],
"parameters": {
"mode": "retrieve-as-tool",
"limit": 5,
"toolName": "email_context",
"memoryKey": "email_context_{{ $('Gmail Trigger').item.json.threadId }}",
"toolDescription": "Retrieve context about the user profile and email thread history"
},
"typeVersion": 1
},
{
"id": "email-agent-001",
"name": "Correo electrónico Reply Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2080,
400
],
"parameters": {
"text": "={{ $json.text }}",
"options": {
"systemMessage": "You are an intelligent email assistant. Your job is to analyze incoming emails and generate appropriate responses based on:\n\n1. User profile information (from vector store)\n2. Email thread context (from vector store)\n3. The specific incoming email content\n\nGuidelines:\n- For newsletters, promotions, automated messages: respond with exactly 'NO_REPLY_NEEDED'\n- For legitimate emails requiring responses: generate professional, contextual replies\n- Keep responses concise but helpful\n- Use the user's communication style from their profile\n- Reference relevant context from previous emails when appropriate\n- Always be polite and professional"
},
"promptType": "define"
},
"typeVersion": 1.9
},
{
"id": "check-response-001",
"name": "Check If Reply Needed",
"type": "n8n-nodes-base.if",
"position": [
2400,
400
],
"parameters": {
"conditions": {
"combinator": "and",
"conditions": [
{
"operator": {
"type": "notContainsText"
},
"leftValue": "={{ $json.output }}",
"rightValue": "NO_REPLY_NEEDED"
}
]
}
},
"typeVersion": 2
},
{
"id": "create-draft-001",
"name": "Gmail - Create Draft",
"type": "n8n-nodes-base.gmail",
"position": [
2680,
400
],
"parameters": {
"message": "={{ $json.output.replace(/\\n/g, \"<br />\\n\") }}",
"options": {
"sendTo": "={{ $('Gmail Trigger').item.json.headers.from }}",
"threadId": "={{ $('Gmail Trigger').item.json.threadId }}"
},
"subject": "=Re: {{ $('Gmail Trigger').item.json.subject }}",
"resource": "draft",
"emailType": "html"
},
"credentials": {
"gmailOAuth2": {
"id": "YOUR_GMAIL_CRED_ID"
}
},
"typeVersion": 2
},
{
"id": "error-handler-001",
"name": "Manejador de errores",
"type": "n8n-nodes-base.code",
"position": [
2400,
600
],
"parameters": {
"jsCode": "// Log error details for debugging\nconst errorData = {\n timestamp: new Date().toISOString(),\n error: $input.all(),\n workflow: 'Gmail Auto Reply',\n threadId: $('Gmail Trigger').item?.json?.threadId || 'unknown'\n};\n\nconsole.log('Workflow Error:', JSON.stringify(errorData, null, 2));\n\nreturn [{ json: errorData }];"
},
"typeVersion": 2
},
{
"id": "sticky-note-001",
"name": "Workflow Instructions",
"type": "n8n-nodes-base.stickyNote",
"position": [
200,
200
],
"parameters": {
"color": 5,
"width": 300,
"height": 400,
"content": "# Gmail Auto-Reply with AI\n\n## Setup Required:\n1. **Gmail OAuth2** credentials\n2. **Google Drive OAuth2** credentials \n3. **OpenAI API** credentials\n4. **Profile Document**: Update YOUR_PROFILE_DOC_FILE_ID\n\n## How it works:\n1. Monitors Gmail for new emails\n2. Downloads user profile from Google Drive\n3. Fetches email thread context\n4. Creates vector embeddings for context\n5. Uses AI agent to generate appropriate replies\n6. Creates draft if reply is needed\n\n## Features:\n- Smart filtering (ignores newsletters/spam)\n- Context-aware responses\n- Memory of conversation history\n- Professional tone matching"
},
"typeVersion": 1
}
],
"active": true,
"settings": {
"executionOrder": "v1"
},
"versionId": "3",
"connections": {
"Gmail Trigger": {
"main": [
[
{
"node": "drive-download-001",
"type": "main",
"index": 0
},
{
"node": "gmail-thread-001",
"type": "main",
"index": 0
}
]
]
},
"Simple Memory": {
"ai_memory": [
[
{
"node": "Email Reply Agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"Email Reply Agent": {
"main": [
[
{
"node": "check-response-001",
"type": "main",
"index": 0
}
]
],
"error": [
[
{
"node": "Error Handler",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Email Reply Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Embeddings": {
"ai_embedding": [
[
{
"node": "Simple Vector Store",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Simple Vector Store": {
"main": [
[
{
"node": "Prepare Agent Context",
"type": "main",
"index": 0
}
]
]
},
"create-draft-001": {
"error": [
[
{
"node": "Error Handler",
"type": "main",
"index": 0
}
]
]
},
"gmail-thread-001": {
"main": [
[
{
"node": "thread-loader-001",
"type": "main",
"index": 0
}
]
],
"error": [
[
{
"node": "Error Handler",
"type": "main",
"index": 0
}
]
]
},
"thread-splitter-001": {
"ai_textSplitter": [
[
{
"node": "thread-loader-001",
"type": "ai_textSplitter",
"index": 0
}
]
]
},
"check-response-001": {
"main": [
[
{
"node": "create-draft-001",
"type": "main",
"index": 0
}
]
]
},
"Prepare Agent Context": {
"main": [
[
{
"node": "Email Reply Agent",
"type": "main",
"index": 0
}
]
]
},
"profile-splitter-001": {
"ai_textSplitter": [
[
{
"node": "profile-loader-001",
"type": "ai_textSplitter",
"index": 0
}
]
]
},
"thread-loader-001": {
"ai_document": [
[
{
"node": "Simple Vector Store",
"type": "ai_document",
"index": 0
}
]
]
},
"Vector Store Retriever": {
"ai_tool": [
[
{
"node": "Email Reply Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"profile-loader-001": {
"ai_document": [
[
{
"node": "Simple Vector Store",
"type": "ai_document",
"index": 0
}
]
]
},
"drive-download-001": {
"main": [
[
{
"node": "profile-loader-001",
"type": "main",
"index": 0
}
]
],
"error": [
[
{
"node": "Error Handler",
"type": "main",
"index": 0
}
]
]
}
}
}¿Cómo usar este flujo de trabajo?
Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.
¿En qué escenarios es adecuado este flujo de trabajo?
Avanzado - Productividad personal, Chatbot de IA
¿Es de pago?
Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.
Flujos de trabajo relacionados recomendados
Usama Rehman
@usamarehmanCompartir este flujo de trabajo