This workflow corresponds to n8n.io template #5142 — we link there as the canonical source.
This workflow follows the Agent → OpenAI Embeddings recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"nodes": [
{
"id": "d68e1936-eec7-4334-8317-70805c95b0ab",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
140,
180
],
"parameters": {
"text": "={{ $('get_message').item.json.text }}",
"options": {
"systemMessage": "You are a polite and professional virtual assistant.\n\nYou receive an email.\n\nYour knowledge base is stored in the Pinecone Vector Store, which contains all relevant FAQs and information needed to assist the user accurately.\n\nAlways consult the Pinecone Vector Store before generating your response.\n\nYour final answer must be sent using the \"Gmail\" tool.\n\nWhen using the Gmail tool, make sure to:\n\nFill in the Message field with the response content\n\nFill in the Subject field with a short subject line (you can use \"Reply\" if unsure)"
},
"promptType": "define"
},
"typeVersion": 1.8
},
{
"id": "0d136348-a945-43c0-bebe-1599f4aef1bd",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
80,
360
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "1f6e0331-b1e0-4450-a41a-acff7f0ccae6",
"name": "Simple Memory",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
240,
360
],
"parameters": {
"sessionKey": "={{'key'}}",
"sessionIdType": "customKey"
},
"typeVersion": 1.3
},
{
"id": "7af79daa-d3e0-4111-9005-0930debe0c03",
"name": "Gmail",
"type": "n8n-nodes-base.gmailTool",
"position": [
380,
360
],
"parameters": {
"message": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Message', ``, 'string') }}",
"options": {
"appendAttribution": false
},
"emailType": "text",
"messageId": "={{ $('get_message').item.json.id }}",
"operation": "reply"
},
"typeVersion": 2.1
},
{
"id": "5b1779a5-1cf5-4660-ab6f-456de5f07137",
"name": "Gmail Trigger",
"type": "n8n-nodes-base.gmailTrigger",
"position": [
-1160,
400
],
"parameters": {
"filters": {},
"pollTimes": {
"item": [
{
"mode": "everyHour"
},
{}
]
}
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "a8fb6a4f-037f-42d0-b5a6-e14acef1bf8a",
"name": "get_message",
"type": "n8n-nodes-base.gmail",
"position": [
-880,
400
],
"parameters": {
"simple": false,
"options": {},
"messageId": "={{ $json.id }}",
"operation": "get"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "26dd84f5-99e5-4e53-acde-ebbdf8d889d0",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1220,
160
],
"parameters": {
"color": 3,
"width": 1220,
"height": 460,
"content": "## Gmail input\n\nGmail trigger get the full email\nSpam checker is a Openai node with specific system prompt.\nIf the email is from services (google, microsoft, ecc) it considered as spam.\nIn this case the model try to extract only business emails.\nThe node print only 2 different output: \"spam\" and \"no spam\".\nIf \"spam\", nothing happen, if \"no spam\" the \"if node\" pass the message to the Agentic node"
},
"typeVersion": 1
},
{
"id": "14915f5c-0375-46b8-90ee-c412a6b0e40c",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
0
],
"parameters": {
"color": 4,
"width": 540,
"height": 620,
"content": "## AI Agent\n\nAI Agent get the message and respond to the email autonomously in base of contest.\nHere we have a vector store too, where you can add your data, like FAQ, product prices and so on"
},
"typeVersion": 1
},
{
"id": "09a0c5ca-6d4f-46ef-aa34-09b565f698f7",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
620
],
"parameters": {
"color": 6,
"width": 540,
"height": 300,
"content": "## VECTOR STORE\n"
},
"typeVersion": 1
},
{
"id": "4a56b1ab-39d6-424c-a614-06febe5f5f63",
"name": "Pinecone Vector Store",
"type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
"position": [
200,
680
],
"parameters": {
"mode": "retrieve-as-tool",
"options": {},
"toolName": "FAQ",
"pineconeIndex": {
"__rl": true,
"mode": "list",
"value": "faqmattabott",
"cachedResultName": "faqmattabott"
}
},
"typeVersion": 1.1
},
{
"id": "435fa9d9-cee9-4aad-a51b-25566a96b2af",
"name": "Embeddings OpenAI",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
60,
800
],
"parameters": {
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "d0801a3b-d336-4e50-a8da-58ff218c3673",
"name": "If",
"type": "n8n-nodes-base.if",
"position": [
-280,
400
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "921d0426-0dbf-49ac-ab67-b5538856deee",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $json.message.content }}",
"rightValue": "spam"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "ddea4fe7-e458-4949-aba5-57da659ab15c",
"name": "Spam checker",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
-640,
400
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"messages": {
"values": [
{
"role": "system",
"content": "You are a e-mail assistant. You have to check if the received e-mail are spam or not.\nYou have to check not only normal spam, but everything is not sent from a person, for example, automatic e-mail, google email, and anything out of a possible client.\n\nIf an e-mail is considered spam, as I sayd befor, your output will be \"spam\". If not, say \"no spam\".\n\nDon't respond anything else \"spam\" or \"not spam\"."
},
{
"content": "={{ $json.headers.subject }}{{ $json.headers.from }}{{ $json.text }}"
}
]
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.8
}
],
"connections": {
"If": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Gmail": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[]
]
},
"get_message": {
"main": [
[
{
"node": "Spam checker",
"type": "main",
"index": 0
}
]
]
},
"Spam checker": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"Gmail Trigger": {
"main": [
[
{
"node": "get_message",
"type": "main",
"index": 0
}
]
]
},
"Simple Memory": {
"ai_memory": [
[
{
"node": "AI Agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"Embeddings OpenAI": {
"ai_embedding": [
[
{
"node": "Pinecone Vector Store",
"type": "ai_embedding",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Pinecone Vector Store": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
gmailOAuth2openAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This n8n workflow automates the handling of incoming emails. It detects and filters out spam, searches a knowledge base (FAQ) stored in a Pinecone vector database, and sends a reply using Gmail — all powered by an AI model (GPT-4o mini).
Source: https://n8n.io/workflows/5142/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Alfred (funcional). Uses gmailTool, googleCalendarTool, gmail, embeddingsOpenAi. Event-driven trigger; 83 nodes.
Your AI workforce is ready. Are you?
This advanced n8n workflow automates the full lead enrichment, qualification, and personalized outreach process tailored specifically for the B2B real estate sector. Integrating top platforms like Api
This n8n template automatically classifies incoming emails (Sales, Support, Internal, Finance, Promotions) and routes them to a dedicated OpenAI LLM Agent for processing. Depending on the category, th
Unleash the full potential of your HighLevel CRM by adding an intelligent GPT-5 Agent that does more than just follow commands — it understands context, retrieves the right data, and executes actions