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 →
{
"name": "WhatsApp Agent",
"nodes": [
{
"parameters": {
"updates": [
"messages"
],
"options": {}
},
"type": "n8n-nodes-base.whatsAppTrigger",
"typeVersion": 1,
"position": [
-1180,
-120
],
"id": "1dcc9ce2-27a4-4308-86d6-311677748af8",
"name": "WhatsApp Trigger",
"credentials": {
"whatsAppTriggerApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"promptType": "define",
"text": "={{ $json.text }}",
"options": {
"systemMessage": "=You are a helpful assistant called Sam.\n\nYou are currently talking to {{ $('WhatsApp Trigger').item.json.contacts[0].profile.name }}\n\nThe current date and time is {{ $now.toString() }}"
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 1.9,
"position": [
-520,
0
],
"id": "98b8830a-20df-4633-a1fc-f8fa959c874e",
"name": "AI Agent"
},
{
"parameters": {
"sessionIdType": "customKey",
"sessionKey": "={{ $('WhatsApp Trigger').item.json.messages[0].from }}",
"contextWindowLength": 20
},
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"typeVersion": 1.3,
"position": [
-600,
200
],
"id": "2f67e2e7-93c3-4341-954b-72241dc683f3",
"name": "Simple Memory"
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "b7b64446-f1ea-4622-990c-22f3999a8269",
"leftValue": "={{ $json.messages[0].audio }}",
"rightValue": "",
"operator": {
"type": "object",
"operation": "exists",
"singleValue": true
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Voice"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "202af928-a324-411a-bf15-68a349e7bf9e",
"leftValue": "={{ $json.messages[0].image }}",
"rightValue": "",
"operator": {
"type": "object",
"operation": "exists",
"singleValue": true
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Image"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"leftValue": "={{ $json.messages[0].text.body }}",
"rightValue": "",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"id": "08fd0c80-307e-4f45-b1de-35192ee4ec5e"
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Text"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.2,
"position": [
-1000,
-120
],
"id": "e8d8814b-15ea-4398-bae3-ac70311516d5",
"name": "Check Input Type"
},
{
"parameters": {
"resource": "media",
"operation": "mediaUrlGet",
"mediaGetId": "={{ $('WhatsApp Trigger').item.json.messages[0].image.id }}"
},
"type": "n8n-nodes-base.whatsApp",
"typeVersion": 1,
"position": [
-660,
-280
],
"id": "90d9789a-6b22-4580-9571-4469308a2615",
"name": "Get Image URL",
"credentials": {
"whatsAppApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"url": "={{ $json.url }}",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
-500,
-280
],
"id": "849203b5-62ba-4e09-9cde-9ca35d31bea4",
"name": "Download Image",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"resource": "image",
"operation": "analyze",
"modelId": {
"__rl": true,
"value": "chatgpt-4o-latest",
"mode": "list",
"cachedResultName": "CHATGPT-4O-LATEST"
},
"text": "=Describe the image in detail.",
"inputType": "base64",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 1.8,
"position": [
-340,
-280
],
"id": "1d4d684c-0c4d-48b5-bee7-f1079f933bca",
"name": "Analyze Image",
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "67552183-de2e-494a-878e-c2948e8cb6bb",
"name": "text",
"value": "=# The user provided the following image and text.\n\n## IMAGE CONTENT:\n{{ $json.content }}\n\n## USER MESSAGE:\n{{ $('WhatsApp Trigger').item.json.messages[0].image.caption || \"Describe the image\" }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-180,
-280
],
"id": "412a08d7-6629-4d76-bfe6-839f420525f7",
"name": "Image + Text Prompt"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "c05a7fbf-309a-407e-9fee-7e0b03f4a5c8",
"name": "text",
"value": "={{ $('WhatsApp Trigger').item.json.messages[0].text.body }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-740,
0
],
"id": "5ccb6ca6-5001-4fd6-b878-699db60a7f34",
"name": "Text Only Prompt"
},
{
"parameters": {
"resource": "media",
"operation": "mediaUrlGet",
"mediaGetId": "={{ $('WhatsApp Trigger').item.json.messages[0].audio.id }}"
},
"type": "n8n-nodes-base.whatsApp",
"typeVersion": 1,
"position": [
-660,
-540
],
"id": "73c653d2-9f74-4877-9f30-62bbbef8ef7e",
"name": "Get Audio URL",
"credentials": {
"whatsAppApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"url": "={{ $json.url }}",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
-500,
-540
],
"id": "84844455-d812-4255-a945-8d58c718141a",
"name": "Download Audio",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"resource": "audio",
"operation": "transcribe",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 1.8,
"position": [
-340,
-540
],
"id": "e6ebad0c-18db-42d3-a228-45c90b6d5f22",
"name": "Transcribe Audio",
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "219577d5-b028-48fc-90be-980f4171ab68",
"name": "text",
"value": "={{ $json.text }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-180,
-540
],
"id": "e6bf0705-3b67-46f2-9d5c-dd21d1655df8",
"name": "Audio Prompt"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "b9d1d759-f585-4791-a743-b9d72951e77c",
"leftValue": "={{ $('WhatsApp Trigger').item.json.messages[0].audio }}",
"rightValue": "",
"operator": {
"type": "object",
"operation": "exists",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
-180,
0
],
"id": "b4abd160-64c5-40e6-94ff-73147962d6b2",
"name": "If"
},
{
"parameters": {
"resource": "audio",
"input": "={{ $('AI Agent').item.json.output }}",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 1.8,
"position": [
160,
-20
],
"id": "99654efa-c43b-489a-8ea4-ee77a5337fe2",
"name": "Generate Audio",
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "send",
"phoneNumberId": "175940715605000",
"recipientPhoneNumber": "={{ $('Check Input Type').item.json.contacts[0].wa_id }}",
"messageType": "audio",
"mediaPath": "useMedian8n",
"additionalFields": {}
},
"type": "n8n-nodes-base.whatsApp",
"typeVersion": 1,
"position": [
520,
-20
],
"id": "a13c1450-5909-422c-90cf-58857dc1e72f",
"name": "Respond with Audio",
"credentials": {
"whatsAppApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "send",
"phoneNumberId": "175940715605000",
"recipientPhoneNumber": "={{ $('WhatsApp Trigger').item.json.messages[0].from }}",
"textBody": "={{ $json.output }}",
"additionalFields": {}
},
"type": "n8n-nodes-base.whatsApp",
"typeVersion": 1,
"position": [
160,
180
],
"id": "c3ece227-dcd9-420b-a3e8-8c59ab16b2b3",
"name": "Respond with Text",
"credentials": {
"whatsAppApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "// Loop over input items and change the MIME type of binary data\nfor (const item of $input.all()) {\n // Check if the item has binary data\n if (item.binary) {\n // Find the binary property name (assuming there's at least one)\n const binaryPropertyNames = Object.keys(item.binary);\n \n for (const propName of binaryPropertyNames) {\n // If the MIME type is 'audio/mp3', change it to 'audio/mpeg'\n if (item.binary[propName].mimeType === 'audio/mp3') {\n item.binary[propName].mimeType = 'audio/mpeg';\n }\n }\n }\n}\n\nreturn $input.all();"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
340,
-20
],
"id": "bbe3ba8d-eaca-4ab5-986d-06ad6f88c270",
"name": "Fix Mime Type"
},
{
"parameters": {
"content": "## Audio",
"height": 240,
"width": 800
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-780,
-620
],
"id": "1b1fec09-7118-46a1-93e8-c8b88713d56c",
"name": "Sticky Note"
},
{
"parameters": {
"content": "## Image & Text",
"height": 280,
"width": 800,
"color": 4
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-780,
-360
],
"id": "179ab7eb-131e-44e0-978b-47d781c1e3ff",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "## Tools",
"height": 400,
"width": 820
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-800,
420
],
"id": "5cf0939c-77fa-48fa-bd12-e3b68cdb06ad",
"name": "Sticky Note2"
},
{
"parameters": {
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.toolSerpApi",
"typeVersion": 1,
"position": [
-760,
520
],
"id": "1d6e2fbe-425d-46db-9664-cb64b16eda10",
"name": "Web Search",
"credentials": {
"serpApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.2,
"position": [
-740,
200
],
"id": "d015e6e7-ed01-45c0-a019-7617db08bbdb",
"name": "OpenAI Chat Model",
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {},
"type": "@n8n/n8n-nodes-langchain.toolCalculator",
"typeVersion": 1,
"position": [
-660,
520
],
"id": "1ede568b-596d-4124-a4c5-685f3e0189e4",
"name": "Calculator"
},
{
"parameters": {
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"typeVersion": 1.2,
"position": [
-540,
660
],
"id": "5897d5d2-d067-40e9-9542-5040477383bd",
"name": "Embeddings OpenAI",
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"mode": "retrieve-as-tool",
"toolName": "contacts",
"toolDescription": "Returns contact information like email addresses.",
"pineconeIndex": {
"__rl": true,
"value": "n8n",
"mode": "list",
"cachedResultName": "n8n"
},
"options": {
"pineconeNamespace": "contacts"
}
},
"type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
"typeVersion": 1.1,
"position": [
-560,
520
],
"id": "cbfb21a7-3bac-45f1-8620-4c22c11a6683",
"name": "Knowledge Base",
"credentials": {
"pineconeApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"sseEndpoint": "https://n8n.leonvanzyl.com/mcp/mytools/sse"
},
"type": "@n8n/n8n-nodes-langchain.mcpClientTool",
"typeVersion": 1,
"position": [
-260,
520
],
"id": "0c88184b-895a-430b-bc7c-8ab1fac8d431",
"name": "MCP Client"
}
],
"connections": {
"WhatsApp Trigger": {
"main": [
[
{
"node": "Check Input Type",
"type": "main",
"index": 0
}
]
]
},
"Simple Memory": {
"ai_memory": [
[
{
"node": "AI Agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"Check Input Type": {
"main": [
[
{
"node": "Get Audio URL",
"type": "main",
"index": 0
}
],
[
{
"node": "Get Image URL",
"type": "main",
"index": 0
}
],
[
{
"node": "Text Only Prompt",
"type": "main",
"index": 0
}
]
]
},
"Get Image URL": {
"main": [
[
{
"node": "Download Image",
"type": "main",
"index": 0
}
]
]
},
"Download Image": {
"main": [
[
{
"node": "Analyze Image",
"type": "main",
"index": 0
}
]
]
},
"Analyze Image": {
"main": [
[
{
"node": "Image + Text Prompt",
"type": "main",
"index": 0
}
]
]
},
"Text Only Prompt": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Image + Text Prompt": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Get Audio URL": {
"main": [
[
{
"node": "Download Audio",
"type": "main",
"index": 0
}
]
]
},
"Download Audio": {
"main": [
[
{
"node": "Transcribe Audio",
"type": "main",
"index": 0
}
]
]
},
"Transcribe Audio": {
"main": [
[
{
"node": "Audio Prompt",
"type": "main",
"index": 0
}
]
]
},
"Audio Prompt": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"If": {
"main": [
[
{
"node": "Generate Audio",
"type": "main",
"index": 0
}
],
[
{
"node": "Respond with Text",
"type": "main",
"index": 0
}
]
]
},
"Generate Audio": {
"main": [
[
{
"node": "Fix Mime Type",
"type": "main",
"index": 0
}
]
]
},
"Fix Mime Type": {
"main": [
[
{
"node": "Respond with Audio",
"type": "main",
"index": 0
}
]
]
},
"Web Search": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Calculator": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Embeddings OpenAI": {
"ai_embedding": [
[
{
"node": "Knowledge Base",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Knowledge Base": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"MCP Client": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "bd8880bb-4da6-4ed5-930e-b6e0e4230b99",
"meta": {
"templateCredsSetupCompleted": true
},
"id": "ufiOA0ay9Ps6sRDb",
"tags": []
}
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.
httpHeaderAuthopenAiApipineconeApiserpApiwhatsAppApiwhatsAppTriggerApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
This workflow enables seamless AI-powered conversations on WhatsApp, allowing you to respond to user messages, including images, with intelligent replies that maintain context over multiple interactions. It's ideal for small business owners, customer support teams, or developers building chatbots who want to automate WhatsApp engagement without complex coding. The key step involves an AI agent, enhanced by OpenAI integration, that processes text and analyses images before crafting personalised responses via WhatsApp, ensuring natural and context-aware exchanges.
Use this workflow when handling routine customer queries on WhatsApp requires quick, smart automation, such as answering FAQs or processing visual inputs like product photos. Avoid it for high-volume enterprise needs where custom scaling is essential, or if you lack OpenAI API access for the AI components. Common variations include adding HTTP requests to fetch external data for richer responses, or integrating additional memory buffers to extend conversation history beyond basic windows.
About this workflow
WhatsApp Agent. Uses whatsAppTrigger, agent, memoryBufferWindow, whatsApp. Event-driven trigger; 27 nodes.
Source: https://github.com/Zie619/n8n-workflows — 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.
📌 Overview
Alfred (funcional). Uses gmailTool, googleCalendarTool, gmail, embeddingsOpenAi. Event-driven trigger; 83 nodes.
Your AI workforce is ready. Are you?
This comprehensive workflow bundle is designed as a powerful starter kit, enabling you to build a multi-functional AI assistant on Telegram. It seamlessly integrates AI-powered voice interactions, an
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