This workflow corresponds to n8n.io template #17082 — we link there as the canonical source.
This workflow follows the Agent → Chat Trigger 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 →
{
"id": "FpauF9jfmoRaFe8q",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Zoom AI Meeting Assistant",
"tags": [],
"nodes": [
{
"id": "b025fd9b-3b60-4455-b82e-d66a7bb80ff9",
"name": "Main Overview",
"type": "n8n-nodes-base.stickyNote",
"position": [
32,
208
],
"parameters": {
"color": 7,
"width": 580,
"height": 2040,
"content": "## \ud83d\udecd\ufe0f WooCommerce Support Agent\n\nA chat-based AI agent that answers customer questions about their WooCommerce orders, looking up order details and DHL shipment tracking on demand by calling this same workflow as a tool.\n\n**Perfect for:** E-commerce support teams who want a self-service chat widget that can answer order-status and tracking questions without a human agent.\n\n---\n\n## How it works\n\n1. **Webhook Example Page** \u2014 *(demo)* Serves a standalone HTML page embedding the chat widget.\n2. **Respond to Webhook** \u2014 *(demo)* Returns that HTML page with the chat widget script to the browser.\n3. **Encrypt email** \u2014 *(reference)* Shows how to AES-encrypt a customer email for the chat widget's metadata.\n4. **Example encrypted email** \u2014 *(reference)* Sets a pre-encrypted sample email for testing.\n5. **Decrypt email** \u2014 *(reference)* Decrypts the sample encrypted email to verify the round-trip.\n6. **Chat Trigger** \u2014 n8n chat trigger that starts each customer conversation.\n7. **Decrypt email address** \u2014 *(disabled)* Would decrypt the customer's email from the chat widget metadata.\n8. **Mock Data** \u2014 Hardcodes a sample customer email in place of the disabled decrypt step.\n9. **AI Agent** \u2014 LangChain agent that handles the conversation about the customer's orders.\n10. **OpenAI Chat Model** \u2014 GPT-4 model powering the AI Agent.\n11. **Window Buffer Memory** \u2014 Remembers the last 10 turns of the conversation, keyed by chat session ID.\n12. **WooCommerce_Tool** \u2014 Tool-workflow node the agent calls, re-invoking this same workflow to fetch order and tracking data.\n13. **Execute Workflow Trigger** \u2014 Entry point used when this workflow is invoked as a tool.\n14. **If email provided** \u2014 Checks whether an email address was supplied.\n15. **No email provided** \u2014 *(no-email path)* Returns a \"no email provided\" response.\n16. **WooCommerce - Get User** \u2014 Looks up the WooCommerce customer by email.\n17. **If user found** \u2014 Branches on whether a matching customer exists.\n18. **No customer found** \u2014 *(no-user path)* Returns a \"no customer found\" response.\n19. **WooCommerce Get Orders** \u2014 Fetches the customer's orders, optionally filtered by order ID.\n20. **If order found** \u2014 Branches on whether any orders were returned.\n21. **No order found** \u2014 *(no-order path)* Returns a \"no order found\" response.\n22. **Extract Tracking Data** \u2014 Pulls the WooCommerce Shipment Tracking metadata from each order.\n23. **If contains DHL data** \u2014 Checks whether tracking numbers are present.\n24. **Split Out** \u2014 Splits multiple tracking entries into individual items.\n25. **DHL** \u2014 Looks up live shipment status from the DHL API for each tracking number.\n26. **Add Error Information** \u2014 *(DHL error path)* Records that no parcel data could be found for a tracking ID.\n27. **Merge Tracking Data** \u2014 Combines successful DHL lookups with error placeholders.\n28. **Aggregate** \u2014 Collects all tracking results back into a single array.\n29. **Merge Orders** \u2014 Combines the order data with the aggregated tracking array.\n30. **Merge Order and Tracking Data** \u2014 Merges the order and tracking branches by position into one response.\n31. **Send Response** \u2014 Formats the final array of orders and tracking info as the tool's response.\n\n---\n\n## Setup (~20 minutes)\n\n1. **WooCommerce** \u2014 Connect your credential in *WooCommerce - Get User* and *WooCommerce Get Orders*, and set your store URL in *WooCommerce Get Orders*.\n2. **OpenAI** \u2014 Add your API key in *OpenAI Chat Model*.\n3. **DHL** \u2014 Connect your DHL API credential in the *DHL* node.\n4. **Chat widget** \u2014 Update the `webhookUrl` and sample `metadata.email` value in *Respond to Webhook*'s embedded script before publishing.\n> The customer's email is encrypted into the chat widget's metadata, but the password in *Encrypt email* and *Decrypt email address* is hardcoded as plain text \u2014 replace it with a securely stored credential before production use."
},
"typeVersion": 1
},
{
"id": "28e694f3-c50f-4bbe-a486-1c2aac0702c8",
"name": "Section - Trigger & Chat Intake",
"type": "n8n-nodes-base.stickyNote",
"position": [
688,
512
],
"parameters": {
"color": 5,
"width": 760,
"height": 360,
"content": "## 1\ufe0f\u20e3 Trigger & Chat Intake\n\n**Chat Trigger** starts each customer conversation. **Decrypt email address** would normally decrypt the customer's email from the chat widget metadata, but it's disabled here in favor of **Mock Data**, which hardcodes a sample email for testing."
},
"typeVersion": 1
},
{
"id": "1da46ced-652e-425e-8174-eeaf0981dcca",
"name": "Section - AI Agent Core",
"type": "n8n-nodes-base.stickyNote",
"position": [
1472,
496
],
"parameters": {
"color": 3,
"width": 740,
"height": 580,
"content": "## 2\ufe0f\u20e3 AI Agent Core\n\nThe **AI Agent** handles the conversation, powered by the **OpenAI Chat Model** and remembering context through **Window Buffer Memory**. It calls **WooCommerce_Tool**, which re-invokes this same workflow, to fetch the customer's order and tracking details."
},
"typeVersion": 1
},
{
"id": "41a22e46-d862-49ff-a87f-450bbaaf3d99",
"name": "Section - Order & Tracking Lookup",
"type": "n8n-nodes-base.stickyNote",
"position": [
1072,
1104
],
"parameters": {
"color": 6,
"width": 5300,
"height": 620,
"content": "## 3\ufe0f\u20e3 Order & Tracking Lookup\n\nTriggered by **Execute Workflow Trigger**, this branch validates the email with **If email provided** and **WooCommerce - Get User** / **If user found**, retrieves orders with **WooCommerce Get Orders** / **If order found**, then pulls shipment data through **Extract Tracking Data**, **If contains DHL data**, **Split Out**, and the **DHL** lookup (with **Add Error Information** on failure). **Merge Tracking Data**, **Aggregate**, **Merge Orders**, and **Merge Order and Tracking Data** assemble everything before **Send Response** returns it to the agent."
},
"typeVersion": 1
},
{
"id": "96823eef-8ed8-4269-8bb6-60ca1c23d97d",
"name": "Section - Demo Webhook Page",
"type": "n8n-nodes-base.stickyNote",
"position": [
2240,
384
],
"parameters": {
"color": 4,
"width": 1080,
"height": 700,
"content": "## 4\ufe0f\u20e3 Demo Webhook Page\n\n**Webhook Example Page** and **Respond to Webhook** serve a standalone HTML page embedding the chat widget for testing. **Encrypt email**, **Example encrypted email**, and **Decrypt email** are reference nodes showing how the widget's encrypted email metadata is generated and decoded."
},
"typeVersion": 1
},
{
"id": "31a003d4-57cc-4830-ae73-a3f626cfd785",
"name": "No email provided",
"type": "n8n-nodes-base.set",
"position": [
1920,
1520
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "9a06428b-4115-4eee-97f4-8e828c5a7e5a",
"name": "response",
"type": "string",
"value": "No email address got provided."
}
]
}
},
"typeVersion": 3.3
},
{
"id": "ca5c05f4-beeb-4128-9703-2e5cb28cd4ff",
"name": "If email provided",
"type": "n8n-nodes-base.if",
"position": [
1664,
1344
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "13f7bd32-5760-4ac3-8292-c8beb131a4a5",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json.email }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2
},
{
"id": "9b9347c3-3ba4-490c-8674-33a94a7666da",
"name": "If user found",
"type": "n8n-nodes-base.if",
"position": [
2144,
1312
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "0e434771-6a63-420b-89fe-cf4d5b1d8127",
"operator": {
"type": "number",
"operation": "gt"
},
"leftValue": "={{ Object.keys($json).length }}",
"rightValue": 0
}
]
}
},
"typeVersion": 2
},
{
"id": "7db290e5-075b-4dc0-9846-cd6cb4800896",
"name": "No customer found",
"type": "n8n-nodes-base.set",
"position": [
2400,
1520
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "9a06428b-4115-4eee-97f4-8e828c5a7e5a",
"name": "response",
"type": "string",
"value": "No customer with that email address could be found."
}
]
}
},
"typeVersion": 3.3
},
{
"id": "23a9bfa4-ac9e-4d61-a298-5509d37d6012",
"name": "If contains DHL data",
"type": "n8n-nodes-base.if",
"position": [
3920,
1280
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "674eff87-834b-4436-8666-66ccd11016d6",
"operator": {
"type": "array",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json.tracking }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2
},
{
"id": "09681977-75ec-4bda-ad4e-b82f67e0da4a",
"name": "Extract Tracking Data",
"type": "n8n-nodes-base.set",
"position": [
3664,
1280
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "c378e8d4-3fdf-49f5-a766-6cfc1d7e898f",
"name": "tracking",
"type": "array",
"value": "={{ $json.meta_data.filter(data => data.key === '_wc_shipment_tracking_items').flatMap(data => data.value) }}"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "a076af81-978e-455f-b350-bb8934d937ef",
"name": "Merge Orders",
"type": "n8n-nodes-base.merge",
"position": [
5504,
1376
],
"parameters": {},
"typeVersion": 2.1
},
{
"id": "e7daa75b-ab43-4074-993a-aad455914737",
"name": "Merge Order and Tracking Data",
"type": "n8n-nodes-base.merge",
"position": [
5824,
1520
],
"parameters": {
"mode": "combine",
"options": {},
"combinationMode": "mergeByPosition"
},
"typeVersion": 2.1
},
{
"id": "21ae95a5-eb6c-498b-be16-6e7361ed800e",
"name": "Split Out",
"type": "n8n-nodes-base.splitOut",
"position": [
4192,
1264
],
"parameters": {
"options": {},
"fieldToSplitOut": "tracking"
},
"typeVersion": 1
},
{
"id": "366ac147-567d-4e3e-8689-12ba1d067a9f",
"name": "Aggregate",
"type": "n8n-nodes-base.aggregate",
"position": [
5120,
1264
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData",
"destinationFieldName": "tracking"
},
"typeVersion": 1
},
{
"id": "d3b7d09e-b69f-4123-9451-8fb874f0e214",
"name": "Merge Tracking Data",
"type": "n8n-nodes-base.merge",
"position": [
4880,
1264
],
"parameters": {},
"typeVersion": 2.1
},
{
"id": "8c7d179b-08f1-48a9-ae2a-3b5abd16c52b",
"name": "Window Buffer Memory",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
1776,
880
],
"parameters": {
"sessionKey": "={{ $('Mock Data').item.json.sessionId }}",
"sessionIdType": "customKey",
"contextWindowLength": 10
},
"typeVersion": 1.2
},
{
"id": "ebf99e57-7403-48a6-a226-96a1d24812d3",
"name": "Execute Workflow Trigger",
"type": "n8n-nodes-base.executeWorkflowTrigger",
"position": [
1184,
1344
],
"parameters": {},
"typeVersion": 1
},
{
"id": "a4b9cbeb-e91a-4be4-aa10-0c0595810613",
"name": "WooCommerce - Get User",
"type": "n8n-nodes-base.wooCommerce",
"position": [
1920,
1312
],
"parameters": {
"limit": 1,
"filters": {
"email": "={{ $json.email }}"
},
"resource": "customer",
"operation": "getAll"
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "ca16c077-36af-4385-b4ce-be9a06c6be92",
"name": "If order found",
"type": "n8n-nodes-base.if",
"position": [
3040,
1296
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "0e434771-6a63-420b-89fe-cf4d5b1d8127",
"operator": {
"type": "number",
"operation": "gt"
},
"leftValue": "={{ Object.keys($json).length }}",
"rightValue": 0
}
]
}
},
"typeVersion": 2
},
{
"id": "12a2513c-27ee-437a-a9ae-0d59495a31ab",
"name": "WooCommerce Get Orders",
"type": "n8n-nodes-base.httpRequest",
"position": [
2736,
1296
],
"parameters": {
"url": "https://woo-pleasantly-swag-werewolf3.wpcomstaging.com/wp-json/wc/v3/orders",
"options": {},
"sendBody": true,
"authentication": "predefinedCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "customer",
"value": "={{ $json.id }}"
},
{
"name": "include",
"value": "={{ $('If email provided').item.json.query.split(',').filter(data => !data.includes('@')).join(',') }}"
}
]
},
"nodeCredentialType": "wooCommerceApi"
},
"typeVersion": 4.1,
"alwaysOutputData": true
},
{
"id": "be8e9827-2d12-433d-abca-ccaaa58ac6c8",
"name": "No order found",
"type": "n8n-nodes-base.set",
"position": [
3312,
1504
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "9a06428b-4115-4eee-97f4-8e828c5a7e5a",
"name": "response",
"type": "string",
"value": "No order could be found."
}
]
}
},
"typeVersion": 3.3
},
{
"id": "5bb32de7-124b-4ab1-bb6c-4600f9ae34e2",
"name": "Add Error Information",
"type": "n8n-nodes-base.set",
"position": [
4640,
1360
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "5fdb3524-6263-4e0b-a052-742cec8ceac1",
"name": "Error",
"type": "string",
"value": "=No data about the parcel with the tracking ID \"{{ $('Split Out').item.json.tracking_id }}\" could be found."
}
]
}
},
"typeVersion": 3.3
},
{
"id": "a2bdefe9-96e7-4259-adea-bcedeef09e5a",
"name": "DHL",
"type": "n8n-nodes-base.dhl",
"onError": "continueErrorOutput",
"position": [
4400,
1264
],
"parameters": {
"options": {},
"trackingNumber": "={{ $json.tracking_number }}"
},
"typeVersion": 1
},
{
"id": "50a856d8-7b41-4d52-ac46-d9fa15d709fa",
"name": "Send Response",
"type": "n8n-nodes-base.set",
"position": [
6112,
1520
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a2bb4a8a-40b0-4233-99a8-3b494fb84230",
"name": "response",
"type": "array",
"value": "={{ $input.all().map(item => item.json) }}"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "bba74747-4725-4441-92be-c7c0c6ab2efb",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1584,
880
],
"parameters": {
"model": "gpt-4",
"options": {}
},
"typeVersion": 1
},
{
"id": "5292d25f-e556-4ff7-afca-be1917e05660",
"name": "WooCommerce_Tool",
"type": "@n8n/n8n-nodes-langchain.toolWorkflow",
"position": [
1952,
880
],
"parameters": {
"name": "WooCommerce_Tool",
"fields": {
"values": [
{
"name": "email",
"stringValue": "={{ $json.metadata.email }}"
}
]
},
"workflowId": "={{ $workflow.id }}",
"description": "Call this tool to retrieve the orders in JSON format (compatible with the WooCommerce API). The input should be a list of comma-separated order IDs or nothing at all for all orders. Supply nothing else than the order IDs!"
},
"typeVersion": 1
},
{
"id": "176f9892-1c51-48b4-b3b8-5ed65c048596",
"name": "Chat Trigger",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
784,
672
],
"parameters": {
"public": true,
"options": {}
},
"typeVersion": 1
},
{
"id": "d497fd01-0459-4e76-88fb-421187dd739c",
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
2560,
544
],
"parameters": {
"options": {
"responseHeaders": {
"entries": [
{
"name": "content-type",
"value": "text/html; charset=utf-8"
}
]
}
},
"respondWith": "text",
"responseBody": "<doctype html>\n\t<html lang=\"en\">\n\t\t<head>\n\t\t\t<meta charset=\"utf-8\" />\n\t\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\t\t\t<title>Chat</title>\n\t\t\t<link\n\t\t\t\thref=\"https://cdn.jsdelivr.net/npm/normalize.css@8.0.1/normalize.min.css\"\n\t\t\t\trel=\"stylesheet\"\n\t\t\t/>\n\t\t\t<link href=\"https://cdn.jsdelivr.net/npm/@n8n/chat/style.css\" rel=\"stylesheet\" />\n\t\t</head>\n\t\t<body>\n\t\t\t<script type=\"module\">\n\t\t\t\timport { createChat } from 'https://cdn.jsdelivr.net/npm/@n8n/chat@latest/chat.bundle.es.js';\n\n\t\t\t\t(async function () {\n\t\t\t\t\tcreateChat({\n\t\t\t\t\t\tmode: 'window',\n\t\t\t\t\t\twebhookUrl: 'https://xxx.n8n.cloud/webhook/ea429912-869c-490b-9e04-4401ac9943b6/chat',\n\t\t\t\t\t\tloadPreviousSession: false,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\temail: '352b16c74f73265441c55c37c9c22b04:4a8e614143c9cd31cc7e2389380943f3',\n\t\t\t\t\t\t},\n\t\t\t\t\t\twebhookConfig: {\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t})();\n\t\t\t</script>\n\n\t\t\t<h1>WooCommerce Agent Example page</h1>\n\t\t\tClick on the bubble in the lower right corner to open the chat.\n\n\t\t</body>\n\t</html>\n</doctype>"
},
"typeVersion": 1
},
{
"id": "97b6dbd5-409a-4eff-bff4-4b04bd046208",
"name": "Webhook Example Page",
"type": "n8n-nodes-base.webhook",
"position": [
2352,
544
],
"parameters": {
"path": "website-chat-example",
"options": {},
"responseMode": "responseNode"
},
"typeVersion": 1.1
},
{
"id": "8db21fcb-0003-4221-8718-f0fe8d88d966",
"name": "Decrypt email",
"type": "n8n-nodes-base.code",
"position": [
3136,
544
],
"parameters": {
"jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\n\nconst crypto = require('crypto');\n\nconst password = 'a random password';\n\nconst encryptedData = $input.first().json.email;\n\n\nfunction decrypt(encrypted, password) {\n // Extract the IV and the encrypted text\n const parts = encrypted.split(':');\n const iv = Buffer.from(parts.shift(), 'hex');\n\n // Create a key from the password\n const key = crypto.scryptSync(password, 'salt', 32);\n\n // Create a decipher\n const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv);\n\n // Decrypt the text\n let decrypted = decipher.update(parts.join(':'), 'hex', 'utf8');\n decrypted += decipher.final('utf8');\n\n // Return the decrypted text\n return decrypted;\n}\n\nreturn [\n {\n json: {\n email: decrypt(encryptedData, password),\n }\n }\n];"
},
"typeVersion": 2
},
{
"id": "64c8d6a3-cb47-4670-93ad-e115aaa807f4",
"name": "Encrypt email",
"type": "n8n-nodes-base.code",
"position": [
2752,
544
],
"parameters": {
"jsCode": "const crypto = require('crypto');\n\nconst password = 'a random password';\nconst email = 'user@example.com';\n\n\nfunction encrypt(text, password) {\n // Generate a secure random initialization vector\n const iv = crypto.randomBytes(16);\n\n // Create a key from the password\n const key = crypto.scryptSync(password, 'salt', 32);\n\n // Create a cipher\n const cipher = crypto.createCipheriv('aes-256-cbc', key, iv);\n\n // Encrypt the text\n let encrypted = cipher.update(text, 'utf8', 'hex');\n encrypted += cipher.final('hex');\n\n // Return the IV and the encrypted text\n return `${iv.toString('hex')}:${encrypted}`;\n}\n\nreturn [\n {\n json: {\n email: encrypt(email, password),\n }\n }\n];"
},
"typeVersion": 2
},
{
"id": "eca1fdbf-2173-4810-b5fe-586d089e7caa",
"name": "Example encrypted email",
"type": "n8n-nodes-base.set",
"position": [
2944,
544
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "fa8d71d3-8e60-44b0-8ef0-e0bfc6feaf0e",
"name": "email",
"type": "string",
"value": "352b16c74f73265441c55c37c9c22b04:4a8e614143c9cd31cc7e2389380943f3"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "9829fdb0-79de-43b0-afab-4d684c4588b0",
"name": "Decrypt email address",
"type": "n8n-nodes-base.code",
"disabled": true,
"position": [
992,
672
],
"parameters": {
"jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\n\nconst crypto = require('crypto');\n\nconst password = 'a random password';\nconst incomingData = $input.first().json;\n\n\nfunction decrypt(encrypted, password) {\n // Extract the IV and the encrypted text\n const parts = encrypted.split(':');\n const iv = Buffer.from(parts.shift(), 'hex');\n\n // Create a key from the password\n const key = crypto.scryptSync(password, 'salt', 32);\n\n // Create a decipher\n const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv);\n\n // Decrypt the text\n let decrypted = decipher.update(parts.join(':'), 'hex', 'utf8');\n decrypted += decipher.final('utf8');\n\n // Return the decrypted text\n return decrypted;\n}\n\nreturn [\n {\n json: {\n ...incomingData,\n metadata: {\n email: decrypt(incomingData.metadata.email, password), \n },\n }\n }\n];"
},
"typeVersion": 2
},
{
"id": "7308b3fc-ac64-4a3d-91e6-96382b33e218",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1664,
656
],
"parameters": {
"options": {
"systemMessage": "=The Assistant is tailored to support customers of Best Shirts Ltd. with inquiries related to their orders. It adheres to the following principles for optimal customer service:\n\n1. **Customer-Focused Communication**: The Assistant maintains a friendly and helpful tone throughout the interaction. It remains focused on the topic at hand, ensuring all responses are relevant to the customer's inquiries about their orders.\n\n2. **Objective and Factual**: In cases where specific information is unavailable, the Assistant clearly communicates the lack of information and refrains from speculating or providing unverified details.\n\n3. **Efficient Interaction**: Recognizing the importance of the customer's time, the Assistant is designed to remember previous interactions within the same session. This minimizes the need for customers to repeat information, streamlining the support process.\n\n4. **Strict Privacy Adherence**: The Assistant automatically has access to the customer's email address as \"{{ $json.email }}\", using it to assist with order-related inquiries. Customers are informed that it is not possible to use or inquire about a different email address. If a customer attempts to provide an alternate email, they are gently reminded of this limitation.\n\n5. **Transparency in Order Status**: The Assistant provides accurate information about order processing and delivery timelines. Orders are typically dispatched 1-2 days post-purchase, with an expected delivery period of 1-2 days following dispatch. If an order hasn't been sent out within 2 days, the Assistant acknowledges an unplanned delay and offers assistance accordingly.\n\n6. **Non-assumptive Approach to Delivery Confirmation**: The Assistant never presumes an order has been delivered based solely on its dispatch. It relies on explicit delivery confirmations or tracking information to inform customers about their order status.\n\n7. **Responsive to Specific Inquiries**: If a customer requests the email address used for their inquiry, the Assistant provides it directly, ensuring privacy and accuracy in communications.\n\nThis approach ensures that customers receive comprehensive, respectful, and efficient support for their order-related queries."
}
},
"typeVersion": 1.4
},
{
"id": "b3966082-010d-49ab-a389-ec45eac4a171",
"name": "Mock Data",
"type": "n8n-nodes-base.set",
"position": [
1184,
672
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "c591fa49-31b3-46e7-8108-2d3ad1fc895b",
"name": "metadata.email",
"type": "string",
"value": "user@example.com"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.3
}
],
"active": false,
"settings": {
"binaryMode": "separate",
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "0fdbec81-9a76-43fd-a4c6-c2ed463e26f1",
"nodeGroups": [],
"connections": {
"DHL": {
"main": [
[
{
"node": "Merge Tracking Data",
"type": "main",
"index": 0
}
],
[
{
"node": "Add Error Information",
"type": "main",
"index": 0
}
]
]
},
"Aggregate": {
"main": [
[
{
"node": "Merge Orders",
"type": "main",
"index": 0
}
]
]
},
"Mock Data": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Split Out": {
"main": [
[
{
"node": "DHL",
"type": "main",
"index": 0
}
]
]
},
"Chat Trigger": {
"main": [
[
{
"node": "Decrypt email address",
"type": "main",
"index": 0
}
]
]
},
"Merge Orders": {
"main": [
[
{
"node": "Merge Order and Tracking Data",
"type": "main",
"index": 0
}
]
]
},
"Encrypt email": {
"main": [
[
{
"node": "Example encrypted email",
"type": "main",
"index": 0
}
]
]
},
"If user found": {
"main": [
[
{
"node": "WooCommerce Get Orders",
"type": "main",
"index": 0
}
],
[
{
"node": "No customer found",
"type": "main",
"index": 0
}
]
]
},
"If order found": {
"main": [
[
{
"node": "Extract Tracking Data",
"type": "main",
"index": 0
},
{
"node": "Merge Order and Tracking Data",
"type": "main",
"index": 1
}
],
[
{
"node": "No order found",
"type": "main",
"index": 0
}
]
]
},
"WooCommerce_Tool": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"If email provided": {
"main": [
[
{
"node": "WooCommerce - Get User",
"type": "main",
"index": 0
}
],
[
{
"node": "No email provided",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Respond to Webhook": {
"main": [
[
{
"node": "Encrypt email",
"type": "main",
"index": 0
}
]
]
},
"Merge Tracking Data": {
"main": [
[
{
"node": "Aggregate",
"type": "main",
"index": 0
}
]
]
},
"If contains DHL data": {
"main": [
[
{
"node": "Split Out",
"type": "main",
"index": 0
}
],
[
{
"node": "Merge Orders",
"type": "main",
"index": 1
}
]
]
},
"Webhook Example Page": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
},
"Window Buffer Memory": {
"ai_memory": [
[
{
"node": "AI Agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"Add Error Information": {
"main": [
[
{
"node": "Merge Tracking Data",
"type": "main",
"index": 1
}
]
]
},
"Decrypt email address": {
"main": [
[
{
"node": "Mock Data",
"type": "main",
"index": 0
}
]
]
},
"Extract Tracking Data": {
"main": [
[
{
"node": "If contains DHL data",
"type": "main",
"index": 0
}
]
]
},
"WooCommerce - Get User": {
"main": [
[
{
"node": "If user found",
"type": "main",
"index": 0
}
]
]
},
"WooCommerce Get Orders": {
"main": [
[
{
"node": "If order found",
"type": "main",
"index": 0
}
]
]
},
"Example encrypted email": {
"main": [
[
{
"node": "Decrypt email",
"type": "main",
"index": 0
}
]
]
},
"Execute Workflow Trigger": {
"main": [
[
{
"node": "If email provided",
"type": "main",
"index": 0
}
]
]
},
"Merge Order and Tracking Data": {
"main": [
[
{
"node": "Send Response",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow pulls the transcript and participant list from a recent Zoom meeting, uses OpenAI to generate formal meeting minutes, emails the summary via SMTP, and runs an AI agent that creates ClickUp tasks and (when details exist) schedules a follow-up meeting in Microsoft…
Source: https://n8n.io/workflows/17082/ — 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.
Template Nodes Example. Uses CUSTOM, formTrigger, executeWorkflowTrigger, chatTrigger. Event-driven trigger; 70 nodes.
Template Carnaval - time instagram. Uses toolWorkflow, lmChatOpenAi, memoryBufferWindow, agent. Event-driven trigger; 56 nodes.
Lection 9 main. Uses formTrigger, chatTrigger, agent, lmChatOpenAi. Event-driven trigger; 55 nodes.
Splitout Redis. Uses executeWorkflowTrigger, n8n, redis, splitOut. Event-driven trigger; 46 nodes.
3770. Uses executeWorkflowTrigger, n8n, redis, agent. Event-driven trigger; 46 nodes.