Workflow: Stickynote Workflow
Integrations: aggregate, code, dhl, executeWorkflowTrigger, httpRequest, if, merge, noOp, respondToWebhook, set, splitOut, stickyNote, webhook, wooCommerce

{"meta": {"instanceId": "workflow-a9e6fab2", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:52.591996", "updatedAt": "2025-09-29T07:07:52.592018", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "nodes": [{"id": "be49d136-6392-481d-8544-d4f4d4fd0357", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [90, 260], "parameters": {"color": 7, "width": 1000.427054367056, "height": 572.2734520891689, "content": "## Find WooCommerce User-ID\nUser-ID is required to query past orders"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "5932f77b-63e2-4991-aa16-2b8587b2b560", "name": "No email provided", "type": "n8n-nodes-base.set", "position": [400, 640], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "9a06428b-4115-4eee-97f4-8e828c5a7e5a", "name": "response", "type": "string", "value": "No email address got provided."}]}}, "typeVersion": 3.3, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "909a9a47-8683-4a1f-a359-8f6a878f8cd7", "name": "If email provided", "type": "n8n-nodes-base.if", "position": [140, 460], "parameters": {"options": {}, "conditions": {"options": {"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, "notes": "This if node performs automated tasks as part of the workflow."}, {"id": "f5bd2098-090b-4537-8e61-90afb4c85ad8", "name": "If user found", "type": "n8n-nodes-base.if", "position": [620, 440], "parameters": {"options": {}, "conditions": {"options": {"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, "notes": "This if node performs automated tasks as part of the workflow."}, {"id": "cd2e8f95-363d-47fc-a18b-42eb93f89d0d", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [-480, -346], "parameters": {"color": 6, "width": 1060.5591882039919, "height": 506.94921487705585, "content": "# Agent"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "411d5656-ace2-43a1-8672-0ffc9929f99b", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [2040, 265], "parameters": {"width": 2404.755367647059, "height": 559.608748371423, "content": "## Add DHL tracking information\nQueries the status of shipped orders from DHL.\n\nCan be skipped if order tracking should not be available or replaced with other services like UPS."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "2787a47f-d685-49b2-b4f9-15ed59525d63", "name": "No customer found", "type": "n8n-nodes-base.set", "position": [880, 640], "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, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "9ff271fb-5013-41a3-bc3c-84af3f36d079", "name": "If contains DHL data", "type": "n8n-nodes-base.if", "position": [2400, 400], "parameters": {"options": {}, "conditions": {"options": {"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, "notes": "This if node performs automated tasks as part of the workflow."}, {"id": "736adbe9-1141-47b1-9d17-b2a86e0285a3", "name": "Extract Tracking Data", "type": "n8n-nodes-base.set", "position": [2140, 400], "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, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "603584d5-85c7-4995-a7a4-1ecb07c9ce2b", "name": "Merge Orders", "type": "n8n-nodes-base.merge", "position": [3980, 500], "parameters": {}, "typeVersion": 2.1, "notes": "This merge node performs automated tasks as part of the workflow."}, {"id": "a5f61962-99bd-4e6d-9c4f-4e0fa3685780", "name": "Merge Order and Tracking Data", "type": "n8n-nodes-base.merge", "position": [4300, 640], "parameters": {"mode": "combine", "options": {}, "combinationMode": "mergeByPosition"}, "typeVersion": 2.1, "notes": "This merge node performs automated tasks as part of the workflow."}, {"id": "9aff6c2b-90f5-4cf6-8637-634c1d7f439d", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [-480, -1280], "parameters": {"color": 3, "width": 478.2162464985994, "height": 558.6043670960834, "content": "# Setup\n## Generally\n- The environment variable `NODE_FUNCTION_ALLOW_BUILTIN` has to equal or include the value `crypto` (FYI: is default on n8n cloud) as it is required to run this workflow\n\n\n## To test the workflow\n1. Set a valid email address of a user that exists in WooCommerce in the Mock Node \"Mock Data\"\n2. Enable the node \"Mock Data\"\n3. Disable the node \"Decrypt email address\"\n4. Use the built-in chat by pressing the \"Chat\" button\n\n\n## For production use:\n1. Update the \"System Message\" in the node \"AI Agent\" for specific use case. At least the name of the shop should be changed\n2. Integrate the chat into the website. An example can be found in the box \"Example Website Implementation\"\n3. Disable or delete the node \"Mock Data\"\n4. Enable the node \"Decrypt email address\"\n5. Enable Workflow"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "901be36e-f68a-4052-ad40-2a3a6a596b56", "name": "Sticky Note4", "type": "n8n-nodes-base.stickyNote", "position": [1140, 260], "parameters": {"width": 277.6742597550393, "height": 568.9672169306307, "content": "## Get Orders"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "7501d8f8-d91e-4cb3-835d-bf3cd0cac69c", "name": "Sticky Note5", "type": "n8n-nodes-base.stickyNote", "position": [-492, 260], "parameters": {"color": 2, "width": 527.8197815634092, "height": 572.2734520891689, "content": "# WooCommerce Order Tool"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "0f2dc782-63c1-43bc-9347-33ebfe00af69", "name": "Split Out", "type": "n8n-nodes-base.splitOut", "position": [2680, 380], "parameters": {"options": {}, "fieldToSplitOut": "tracking"}, "typeVersion": 1, "notes": "This splitOut node performs automated tasks as part of the workflow."}, {"id": "d9b180bc-b4d2-4b94-ac65-b73344a47ad8", "name": "Aggregate", "type": "n8n-nodes-base.aggregate", "position": [3600, 380], "parameters": {"options": {}, "aggregate": "aggregateAllItemData", "destinationFieldName": "tracking"}, "typeVersion": 1, "notes": "This aggregate node performs automated tasks as part of the workflow."}, {"id": "6d2a044e-4164-4f0f-a6ef-a1a7a347a0c3", "name": "Merge Tracking Data", "type": "n8n-nodes-base.merge", "position": [3360, 380], "parameters": {}, "typeVersion": 2.1, "notes": "This merge node performs automated tasks as part of the workflow."}, {"id": "bca16467-9c24-4f36-b41f-d471d27ae465", "name": "Window Buffer Memory", "type": "n8n-nodes-base.noOp", "position": [260, 0], "parameters": {"sessionKey": "YOUR_CREDENTIAL_HERE", "sessionIdType": "customKey", "contextWindowLength": 10}, "typeVersion": 1.2, "notes": "This memoryBufferWindow node performs automated tasks as part of the workflow."}, {"id": "ff432439-2421-4769-bfc8-b58e56742275", "name": "Execute Workflow Trigger", "type": "n8n-nodes-base.executeWorkflowTrigger", "position": [-340, 460], "parameters": {}, "typeVersion": 1, "notes": "This executeWorkflowTrigger node performs automated tasks as part of the workflow."}, {"id": "b8a156a0-bec2-43a5-b2c1-3474701c353b", "name": "Sticky Note6", "type": "n8n-nodes-base.stickyNote", "position": [1480, 260], "parameters": {"color": 7, "width": 492.0420811160542, "height": 564.8840203332783, "content": "## Check orders found"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "22f86e67-710f-49ae-a967-6e5f9345eab6", "name": "WooCommerce - Get User", "type": "n8n-nodes-base.wooCommerce", "position": [400, 440], "parameters": {"limit": 1, "filters": {"email": "={{ $json.email }}"}, "resource": "customer", "operation": "getAll"}, "credentials": {"wooCommerceApi": {"id": "Rm7eydPl5IQwnlhw", "name": "WooCommerce account"}}, "typeVersion": 1, "alwaysOutputData": true, "notes": "This wooCommerce node performs automated tasks as part of the workflow."}, {"id": "0c23aaa1-b1a4-4890-8df8-4440d32c2308", "name": "If order found", "type": "n8n-nodes-base.if", "position": [1520, 420], "parameters": {"options": {}, "conditions": {"options": {"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, "notes": "This if node performs automated tasks as part of the workflow."}, {"id": "63b155ef-6336-4938-890a-28050ffe5deb", "name": "WooCommerce Get Orders", "type": "n8n-nodes-base.httpRequest", "position": [1220, 420], "parameters": {"url": "{{ $env.WEBHOOK_URL }}", "options": {}, "sendBody": true, "authentication": "{{ $credentials.predefinedCredentialType }}", "bodyParameters": {"parameters": [{"name": "customer", "value": "={{ $json.id }}"}, {"name": "include", "value": "={{ $('If email provided').item.json.query.split(',').filter(data => !data.includes('@')).join(',') }}"}]}, "nodeCredentialType": "YOUR_CREDENTIAL_HERE"}, "credentials": {"wooCommerceApi": {"id": "Rm7eydPl5IQwnlhw", "name": "WooCommerce account"}}, "typeVersion": 4.1, "alwaysOutputData": true, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "6cd01eed-7b28-4fe1-b3a2-33293a978843", "name": "No order found", "type": "n8n-nodes-base.set", "position": [1800, 620], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "9a06428b-4115-4eee-97f4-8e828c5a7e5a", "name": "response", "type": "string", "value": "No order could be found."}]}}, "typeVersion": 3.3, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "bd45f21a-f30e-4dc2-be8b-527323016fae", "name": "Add Error Information", "type": "n8n-nodes-base.set", "position": [3120, 480], "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, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "73596711-8b8b-47d9-88b6-84fe1c35fd42", "name": "DHL", "type": "n8n-nodes-base.dhl", "onError": "continueErrorOutput", "position": [2880, 380], "parameters": {"options": {}, "trackingNumber": "={{ $json.tracking_number }}"}, "credentials": {"dhlApi": {"id": "AYAwLZA02lSGlGTd", "name": "DHL account Jan"}}, "typeVersion": 1, "notes": "This dhl node performs automated tasks as part of the workflow."}, {"id": "ea1a7ab3-d7b7-4651-9232-4724a1adc14f", "name": "Send Response", "type": "n8n-nodes-base.set", "position": [4600, 640], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "a2bb4a8a-40b0-4233-99a8-3b494fb84230", "name": "response", "type": "array", "value": "={{ $input.all().map(item => item.json) }}"}]}}, "typeVersion": 3.3, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "606f4731-00cc-4af0-a708-1d0d3d348dfa", "name": "Sticky Note8", "type": "n8n-nodes-base.stickyNote", "position": [640, -1280], "parameters": {"color": 4, "width": 676.2425958534976, "height": 886.4179654829891, "content": "## How to supply user email\nAs we want to ensure that customers can only query information about their own orders, the email address gets encrypted in the backend, and then decrypt again in this workflow. If the email was allowed to be set unencrypted, anyone could query information from other customers.\n\n### The email address get supplied in the chat script at the following location:\n```\ncreateChat({\n\twebhookUrl: '...',\n\tmetadata: {\n          email: 'ENCRYPTED_EMAIL_ADDRESS'\n    },\n});\n```\n\n\n## Example Scripts:\n\n### Encrypt email on the backend\nRun the following code in the backend of your website, send the data to the frontend, and then set it dynamically at the above defined location as email.\n\n\n\n\n\n\n\n\n\n\n\n\n\n### Decrypt email in workflow\nThis script is already used in this workflow and is only provided here again as an example.\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "adbd1b20-0b4e-44ee-9ecc-3fc746691a03", "name": "OpenAI Chat Model", "type": "n8n-nodes-base.noOp", "position": [60, 0], "parameters": {"model": "gpt-4", "options": {}}, "credentials": {"openAiApi": {"id": "h7YcjvQLK5VrUYLz", "name": "OpenAi Jan"}}, "typeVersion": 1, "notes": "This lmChatOpenAi node performs automated tasks as part of the workflow."}, {"id": "b9076a7c-39b6-4205-9b05-90ed1f07115e", "name": "WooCommerce_Tool", "type": "n8n-nodes-base.noOp", "position": [440, 0], "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, "notes": "This toolWorkflow node performs automated tasks as part of the workflow."}, {"id": "c1f06bc7-04d3-4ad5-b46a-6baa509ee23d", "name": "Chat Trigger", "type": "n8n-nodes-base.noOp", "position": [-440, -220], "webhookId": "3b63a62a-bfb7-4fb4-a6ec-4c40dcb4d9f6", "parameters": {"public": true, "options": {}}, "typeVersion": 1, "notes": "This chatTrigger node performs automated tasks as part of the workflow."}, {"id": "1dcb818f-48d1-4314-8737-509c2484c8af", "name": "Sticky Note7", "type": "n8n-nodes-base.stickyNote", "position": [60, -1280], "parameters": {"color": 4, "width": 517.004057164405, "height": 555.1564335638465, "content": "## Example Website Implementation\nExample Code for a website can be found in node \"Respond to Webhook\".\n\nMore information about the embeddable chat can be found [here]({{ $env.WEBHOOK_URL }}\n\nRequired changes:\n- Change \"webhookUrl\" to the displayed in \"Chat Trigger\" node\n- Set the encrypted email address dynamically. The value has to be calculated in the backend to make it truly secure\n- Use a unique password for email en-/decryption and use it in the backend and this workflow (can be set in node \"Decrypt email address\")\n\n\nThe example page can be opened by calling the production Webhook-URL of the node \"Webhook Example Page\". It only works if the \"For production use\" steps on the left have been followed."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "e3a405a1-077d-4b72-bafa-26fd470f0f1c", "name": "Respond to Webhook", "type": "n8n-nodes-base.respondToWebhook", "position": [360, -920], "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=\"{{ $env.WEBHOOK_URL }}\"\n\t\t\t\trel=\"stylesheet\"\n\t\t\t/>\n\t\t\t<link href=\"{{ $env.WEBHOOK_URL }}\" rel=\"stylesheet\" />\n\t\t</head>\n\t\t<body>\n\t\t\t<script type=\"module\">\n\t\t\t\timport { createChat } from '{{ $env.WEBHOOK_URL }}';\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: '{{ $env.WEBHOOK_URL }}',\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', // james@brown.com encrypted\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, "notes": "This respondToWebhook node performs automated tasks as part of the workflow."}, {"id": "3ee13508-9400-415f-b435-514131ab8c53", "name": "Webhook Example Page", "type": "n8n-nodes-base.webhook", "position": [140, -920], "webhookId": "18474f2d-9472-4a8d-8e63-8128fd2cbefc", "parameters": {"path": "website-chat-example", "options": {}, "responseMode": "responseNode"}, "typeVersion": 1.1, "notes": "This webhook node performs automated tasks as part of the workflow."}, {"id": "76bfe2b1-2c4a-45b9-a066-1287e735fafd", "name": "Decrypt email", "type": "n8n-nodes-base.code", "position": [860, -580], "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, "notes": "This code node performs automated tasks as part of the workflow."}, {"id": "561cb422-955b-445b-9690-aa439dcd2455", "name": "Encrypt email", "type": "n8n-nodes-base.code", "position": [680, -840], "parameters": {"jsCode": "const crypto = require('crypto');\n\nconst password = 'a random password';\nconst email = 'james@brown.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, "notes": "This code node performs automated tasks as part of the workflow."}, {"id": "eba004cb-4a40-432b-8fe2-d8526913c585", "name": "Example encrypted email", "type": "n8n-nodes-base.set", "position": [680, -580], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "fa8d71d3-8e60-44b0-8ef0-e0bfc6feaf0e", "name": "email", "type": "string", "value": "352b16c74f73265441c55c37c9c22b04:4a8e614143c9cd31cc7e2389380943f3"}]}}, "typeVersion": 3.3, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "d2fe7948-2ce5-4faa-91da-ea76f02aaf84", "name": "Decrypt email address", "type": "n8n-nodes-base.code", "disabled": true, "position": [-240, -220], "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, "notes": "This code node performs automated tasks as part of the workflow."}, {"id": "26cb468c-5edf-4674-bec2-39270262fc00", "name": "AI Agent", "type": "n8n-nodes-base.noOp", "position": [140, -220], "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, "notes": "This agent node performs automated tasks as part of the workflow."}, {"id": "1088d613-4321-40ec-baba-deb0f3aa1078", "name": "Mock Data", "type": "n8n-nodes-base.set", "position": [-40, -220], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "c591fa49-31b3-46e7-8108-2d3ad1fc895b", "name": "metadata.email", "type": "string", "value": "james@brown.com"}]}, "includeOtherFields": true}, "typeVersion": 3.3, "notes": "This set node performs automated tasks as part of the workflow."}], "pinData": {}, "connections": {"63b155ef-6336-4938-890a-28050ffe5deb": {"main": [[{"node": "error-handler-63b155ef-6336-4938-890a-28050ffe5deb", "type": "main", "index": 0}], [{"node": "error-handler-63b155ef-6336-4938-890a-28050ffe5deb-8e67c856", "type": "main", "index": 0}], [{"node": "error-handler-63b155ef-6336-4938-890a-28050ffe5deb-73ce94eb", "type": "main", "index": 0}], [{"node": "error-handler-63b155ef-6336-4938-890a-28050ffe5deb-5203ffd6", "type": "main", "index": 0}], [{"node": "error-handler-63b155ef-6336-4938-890a-28050ffe5deb-ea39ede8", "type": "main", "index": 0}], [{"node": "error-handler-63b155ef-6336-4938-890a-28050ffe5deb-49526c4a", "type": "main", "index": 0}], [{"node": "error-handler-63b155ef-6336-4938-890a-28050ffe5deb-b5104007", "type": "main", "index": 0}], [{"node": "error-handler-63b155ef-6336-4938-890a-28050ffe5deb-afeea5ca", "type": "main", "index": 0}], [{"node": "error-handler-63b155ef-6336-4938-890a-28050ffe5deb-9cf72ee7", "type": "main", "index": 0}]]}, "e3a405a1-077d-4b72-bafa-26fd470f0f1c": {"main": [[{"node": "error-handler-e3a405a1-077d-4b72-bafa-26fd470f0f1c", "type": "main", "index": 0}], [{"node": "error-handler-e3a405a1-077d-4b72-bafa-26fd470f0f1c-d2c91b8c", "type": "main", "index": 0}], [{"node": "error-handler-e3a405a1-077d-4b72-bafa-26fd470f0f1c-d56269e1", "type": "main", "index": 0}], [{"node": "error-handler-e3a405a1-077d-4b72-bafa-26fd470f0f1c-8ef258b2", "type": "main", "index": 0}], [{"node": "error-handler-e3a405a1-077d-4b72-bafa-26fd470f0f1c-65c54670", "type": "main", "index": 0}], [{"node": "error-handler-e3a405a1-077d-4b72-bafa-26fd470f0f1c-254bdd59", "type": "main", "index": 0}], [{"node": "error-handler-e3a405a1-077d-4b72-bafa-26fd470f0f1c-402122f4", "type": "main", "index": 0}], [{"node": "error-handler-e3a405a1-077d-4b72-bafa-26fd470f0f1c-3117140c", "type": "main", "index": 0}], [{"node": "error-handler-e3a405a1-077d-4b72-bafa-26fd470f0f1c-2b3dda4d", "type": "main", "index": 0}]]}, "3ee13508-9400-415f-b435-514131ab8c53": {"main": [[{"node": "error-handler-3ee13508-9400-415f-b435-514131ab8c53", "type": "main", "index": 0}], [{"node": "error-handler-3ee13508-9400-415f-b435-514131ab8c53-85004e86", "type": "main", "index": 0}], [{"node": "error-handler-3ee13508-9400-415f-b435-514131ab8c53-589ed7bd", "type": "main", "index": 0}], [{"node": "error-handler-3ee13508-9400-415f-b435-514131ab8c53-5f0c0e7a", "type": "main", "index": 0}], [{"node": "error-handler-3ee13508-9400-415f-b435-514131ab8c53-5ab5855e", "type": "main", "index": 0}], [{"node": "error-handler-3ee13508-9400-415f-b435-514131ab8c53-89e93c62", "type": "main", "index": 0}], [{"node": "error-handler-3ee13508-9400-415f-b435-514131ab8c53-d010e86b", "type": "main", "index": 0}], [{"node": "error-handler-3ee13508-9400-415f-b435-514131ab8c53-55a50c13", "type": "main", "index": 0}], [{"node": "error-handler-3ee13508-9400-415f-b435-514131ab8c53-b9c886d9", "type": "main", "index": 0}]]}, "adbd1b20-0b4e-44ee-9ecc-3fc746691a03": {"main": [[{"node": "error-handler-adbd1b20-0b4e-44ee-9ecc-3fc746691a03-babf51c0", "type": "main", "index": 0}]]}}, "name": "Stickynote Workflow", "settings": {"executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "description": "Automated workflow: Stickynote Workflow. This workflow integrates 19 different services: stickyNote, merge, lmChatOpenAi, if, chatTrigger. It contains 47 nodes and follows best practices for error handling and security.", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "notes": "Excellent quality workflow: Stickynote Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}