AutomationFlowsEmail & Gmail › Handle Zendesk Woocommerce Refund Tickets with Slack and Gmail

Handle Zendesk Woocommerce Refund Tickets with Slack and Gmail

ByWeblineIndia @weblineindia on n8n.io

This workflow automatically handles refund-related Zendesk tickets for WooCommerce orders. When a new refund ticket is created, it verifies whether the ticket is related to WooCommerce, fetches the order details, checks refund eligibility and then routes the case based on the…

Event trigger★★★★☆ complexity23 nodesZendesk TriggerWooCommerceSlackGmail
Email & Gmail Trigger: Event Nodes: 23 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #14861 — we link there as the canonical source.

This workflow follows the Gmail → Slack 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 →

Download .json
{
  "id": "0QxfyXQgeXNrn0CG",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Zendesk \u2192 WooCommerce Refund Request Handling with Slack & Gmail",
  "tags": [],
  "nodes": [
    {
      "id": "e01c7888-3841-4c2e-b27a-f1d8c62fc604",
      "name": "Zendesk \u2013 New Refund Ticket Trigger",
      "type": "n8n-nodes-base.zendeskTrigger",
      "position": [
        -704,
        -64
      ],
      "parameters": {
        "options": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "zendeskOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "98d7150c-3102-47a7-a2ec-5149f039abcf",
      "name": "Normalize Zendesk Ticket Data",
      "type": "n8n-nodes-base.code",
      "position": [
        -176,
        -80
      ],
      "parameters": {
        "jsCode": "const input = items[0].json;\nconst description = input.ticket.description || \"\";\n\n// Improved Order ID extraction\nconst orderIdMatch = description.match(/#?\\s*([A-Z]{2,}-\\d+|\\d{2,})/);\nconst orderId = orderIdMatch ? orderIdMatch[1] : null;\n\n// Normalize refund reason\nlet refundReason = \"general_refund_request\";\n\nif (/damaged/i.test(description)) {\n  refundReason = \"damaged_item\";\n} else if (/wrong/i.test(description)) {\n  refundReason = \"wrong_item\";\n} else if (/partial/i.test(description)) {\n  refundReason = \"partial_refund\";\n} else if (/full/i.test(description)) {\n  refundReason = \"full_refund\";\n}\n\nreturn [\n  {\n    json: {\n      ticket_id: input.ticket.id,\n      ticket_subject: input.ticket.subject,\n      ticket_status: input.ticket.status,\n      ticket_priority: input.ticket.priority,\n      ticket_created_at: input.ticket.created_at,\n      request_channel: input.ticket.via?.channel || \"unknown\",\n      ticket_tags: input.ticket.tags || [],\n\n      customer_id: input.requester.id,\n      customer_name: input.requester.name,\n      customer_email: input.requester.email,\n\n      order_id: orderId,\n      refund_reason_raw: description,\n      refund_type: refundReason,\n      source: \"zendesk\"\n    }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "25e63470-1167-4659-8c40-a50ea2966c23",
      "name": "WooCommerce \u2013 Fetch Order by ID",
      "type": "n8n-nodes-base.wooCommerce",
      "position": [
        448,
        -544
      ],
      "parameters": {
        "orderId": "={{ $json.order_id }}",
        "resource": "order",
        "operation": "get"
      },
      "credentials": {
        "wooCommerceApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "ed74bfb7-4840-4b70-9456-ab2ff5de6f9c",
      "name": "Normalize WooCommerce Order Data",
      "type": "n8n-nodes-base.code",
      "position": [
        672,
        -544
      ],
      "parameters": {
        "jsCode": "// Input: WooCommerce Order API response\nconst order = items[0].json;\n\n// Normalize line items\nconst normalizedItems = (order.line_items || []).map(item => ({\n  product_name: item.name,\n  sku: item.sku,\n  quantity: item.quantity,\n  price: item.price,\n  total: parseFloat(item.total)\n}));\n\nreturn [\n  {\n    json: {\n      order_id: order.id,\n      order_number: order.number,\n      order_status: order.status,\n\n      order_total: parseFloat(order.total),\n      currency: order.currency,\n      currency_symbol: order.currency_symbol,\n\n      payment_method: order.payment_method || \"unknown\",\n      payment_method_title: order.payment_method_title || \"unknown\",\n\n      order_created_at: order.date_created,\n      order_paid_at: order.date_paid,\n      order_completed_at: order.date_completed,\n\n      items: normalizedItems,\n\n      refund_count: order.refunds ? order.refunds.length : 0,\n      is_refunded: Array.isArray(order.refunds) && order.refunds.length > 0,\n\n      source: \"woocommerce\"\n    }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "5de1c923-8bac-48e7-a7b4-8f7c41603092",
      "name": "Check Order Status (Completed or Processing)",
      "type": "n8n-nodes-base.if",
      "position": [
        896,
        -544
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "9adfb2e4-16de-4748-8759-8d0b4b08ee9d",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.order_status }}",
              "rightValue": "completed"
            },
            {
              "id": "a0df5223-9e8a-4087-8725-506802f4cd1c",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.order_status }}",
              "rightValue": "processing"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "db5a646c-ee5e-4347-a576-380c9186b440",
      "name": "Check If Order Already Refunded",
      "type": "n8n-nodes-base.if",
      "position": [
        1152,
        -528
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "a567e26e-ea54-493a-a11b-d056cdf3b16b",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.is_refunded }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "83887fdc-a485-45cb-86b3-9f6087d8521f",
      "name": "Merge Ticket and Order Data",
      "type": "n8n-nodes-base.merge",
      "position": [
        1392,
        -64
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineByPosition"
      },
      "typeVersion": 3.2
    },
    {
      "id": "4b96504a-c5a5-4e9f-a681-4fef60a6d302",
      "name": "Is Refund Reason = Damaged Item?",
      "type": "n8n-nodes-base.if",
      "position": [
        1616,
        -64
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "8dbf3ecb-549e-430a-ac95-f0ddb19653af",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.refund_type }}",
              "rightValue": "damaged_item"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "6ee06ea1-1cdf-405d-b6c9-82f1ee0fa0b3",
      "name": "Slack \u2013 Notify Damaged Item Refund",
      "type": "n8n-nodes-base.slack",
      "position": [
        2096,
        -560
      ],
      "parameters": {
        "text": "=\ud83d\udee0\ufe0f Damaged Item Refund Request\nOrder : {{ $json.order_id }}\nProduct : {{ $json.items[0].product_name }}\nAmount : {{ $json.items[0].total }}\nCustomer Name : {{ $json.customer_name }}\nCustomer Email : {{ $json.customer_email }}\nTicket Id : {{ $json.ticket_id }}\nOrder Status : {{ $json.order_status }}\nRefunded : {{ $json.is_refunded }}\n",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": ""
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "f10394f9-e4e6-423c-8dd7-6bf76ad2e0fe",
      "name": "Route Refund Type (Wrong / Partial / Full)",
      "type": "n8n-nodes-base.switch",
      "position": [
        2080,
        160
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "5ffd3363-f4c2-4d0e-af9d-09de0b0217a6",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.refund_type }}",
                    "rightValue": "wrong_item"
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "c9fee087-b218-446f-9c46-e066b4f0dddc",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.refund_type }}",
                    "rightValue": "partial_refund"
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "05fec945-cc20-44d7-8c7d-1ab3b875ca42",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.refund_type }}",
                    "rightValue": "full_refund"
                  }
                ]
              }
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.3
    },
    {
      "id": "4e26f0f3-44ca-4817-9fda-11517a0452bd",
      "name": "Prepare Email \u2013 Wrong Item Proof Request",
      "type": "n8n-nodes-base.set",
      "position": [
        2480,
        -64
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "1d2c2081-e1d2-4b72-b54e-367f43aaad93",
              "name": "email_subject",
              "type": "string",
              "value": "=Action Required: Proof Needed for Order #{{$json.order_number}}"
            },
            {
              "id": "b59e7061-bdf3-4e74-baee-f4d020298e15",
              "name": "email_type",
              "type": "string",
              "value": "wrong_item_proof"
            },
            {
              "id": "d3c4e14b-db67-4ee6-adb4-44bfa5e11d3b",
              "name": "email_message",
              "type": "string",
              "value": "=Hi {{$json.customer_name}},\\n\\nWe received your request regarding order #{{$json.order_number}}.\\n\\nTo proceed, please share clear photos of:\\n\u2022 The received product\\n\u2022 The product label or SKU\\n\\nOnce received, we\u2019ll take immediate action.\\n\\nThanks,\\nSupport Team"
            },
            {
              "id": "5d580fb0-78a4-4b93-8108-70ac6781412a",
              "name": "email",
              "type": "string",
              "value": "={{ $json.customer_email }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "87412f22-f6c9-4624-92d2-aed31e8a27fa",
      "name": "Email Customer \u2013 Request Proof (Wrong Item)",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2832,
        -64
      ],
      "parameters": {
        "sendTo": "={{ $json.email }}",
        "message": "={{ $json.email_message }}",
        "options": {},
        "subject": "={{ $json.email_subject }}",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "966c826b-d86d-4c53-8fc6-10dabff21fc5",
      "name": "Prepare Email \u2013 Partial Refund Review",
      "type": "n8n-nodes-base.set",
      "position": [
        2528,
        192
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a1ff2e0e-a789-4bdc-ba20-5d5e1023086a",
              "name": "email_subject",
              "type": "string",
              "value": "=Your Partial Refund Request \u2013 Order #{{$json.order_number}}"
            },
            {
              "id": "79dbd77d-162d-418b-b21b-ec9b90386556",
              "name": "email_type",
              "type": "string",
              "value": "partial_refund_review"
            },
            {
              "id": "9d9b5171-adee-4e75-a421-cd9c15772ee0",
              "name": "email_message",
              "type": "string",
              "value": "=Hi {{$json.customer_name}},\\n\\nWe\u2019ve received your partial refund request for order #{{$json.order_number}}.\\nOur team is reviewing it and will update you shortly.\\n\\nThanks for your patience."
            },
            {
              "id": "17fcd6ad-c117-4624-82af-c49d1fbb400b",
              "name": "email",
              "type": "string",
              "value": "={{ $json.customer_email }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "a5e72285-7733-4e6d-8d40-690dc19d52d4",
      "name": "Email Customer \u2013 Partial Refund Under Review",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2848,
        192
      ],
      "parameters": {
        "sendTo": "={{ $json.email }}",
        "message": "={{ $json.email_message }}",
        "options": {},
        "subject": "={{ $json.email_subject }}",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "4007f9bd-b46a-43b6-88d5-98506a9518fe",
      "name": "Prepare Email \u2013 Full Refund Return Required",
      "type": "n8n-nodes-base.set",
      "position": [
        2528,
        432
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a1ff2e0e-a789-4bdc-ba20-5d5e1023086a",
              "name": "email_subject",
              "type": "string",
              "value": "=Next Steps for Your Refund Request \u2013 Order #{{$json.order_number}}"
            },
            {
              "id": "79dbd77d-162d-418b-b21b-ec9b90386556",
              "name": "email_type",
              "type": "string",
              "value": "full_refund_return_required"
            },
            {
              "id": "9d9b5171-adee-4e75-a421-cd9c15772ee0",
              "name": "email_message",
              "type": "string",
              "value": "=Hi {{$json.customer_name}},\\n\\nThanks for contacting us regarding your order #{{$json.order_number}}.\\n\\nAs the item is not reported as damaged, we\u2019ll need the product to be returned before we can process a refund.\\n\\nOur team will share the return instructions shortly. Once the return is received and inspected, your refund will be initiated.\\n\\nIf you have any questions, feel free to reply to this email.\\n\\nRegards,\\nSupport Team"
            },
            {
              "id": "17fcd6ad-c117-4624-82af-c49d1fbb400b",
              "name": "email",
              "type": "string",
              "value": "={{ $json.customer_email }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "2c17a22d-cb08-499c-a68e-2c83ca0f69f1",
      "name": "Email Customer \u2013 Return Required for Refund",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2864,
        432
      ],
      "parameters": {
        "sendTo": "={{ $json.email }}",
        "message": "={{ $json.email_message }}",
        "options": {},
        "subject": "={{ $json.email_subject }}",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "943b9be1-f948-443f-8a66-36abe708efb9",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        -464,
        -64
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "e2dc88df-cda2-4c33-a635-bf3aa5d581ee",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.ticket.tags.includes('woocommerce') }}",
              "rightValue": "woocommerce"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "cf48b57b-1131-41ae-a485-43e840a5ce98",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -768,
        -272
      ],
      "parameters": {
        "color": 7,
        "width": 880,
        "height": 464,
        "content": "## Zendesk Ticket Validation\n### This section triggers when a new refund ticket is created in Zendesk. It checks whether the ticket is related to WooCommerce and extracts important details like customer information, order ID and refund reason. The ticket data is then normalized for further processing."
      },
      "typeVersion": 1
    },
    {
      "id": "d33baa46-3cf1-445f-af40-b788f735f8b9",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        224,
        -784
      ],
      "parameters": {
        "color": 7,
        "width": 1232,
        "height": 464,
        "content": "##  WooCommerce Order Check\n### This section fetches the WooCommerce order using the order ID from the ticket. It validates the order status, confirms whether the order is eligible for refund and checks if the order has already been refunded to avoid duplicate actions."
      },
      "typeVersion": 1
    },
    {
      "id": "4e5d406e-8303-4ff0-bad1-75b48558a4b8",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1056,
        -272
      ],
      "parameters": {
        "color": 7,
        "width": 800,
        "height": 464,
        "content": "## Refund Reason Evaluation\n### In this section, ticket data and order data are merged together. The workflow then checks whether the refund request is due to a damaged item, which helps decide whether to notify the support team or continue with standard refund handling."
      },
      "typeVersion": 1
    },
    {
      "id": "df13ec76-cf82-4989-a74c-73b2b938ed7d",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1808,
        -704
      ],
      "parameters": {
        "color": 7,
        "width": 800,
        "height": 368,
        "content": "## Damaged Item Alert\n### This section sends a Slack notification when a damaged item refund request is detected. It provides order, customer and refund details so the support team can take immediate action on high-priority cases."
      },
      "typeVersion": 1
    },
    {
      "id": "3e78d616-32ca-4c67-b39a-4d996927993b",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2032,
        -304
      ],
      "parameters": {
        "color": 7,
        "width": 1232,
        "height": 944,
        "content": "## Refund Processing & Email Handling\n### This section routes the workflow based on the refund type such as wrong item, partial refund or full refund. It prepares the appropriate email content and sends clear instructions or updates to the customer based on their specific refund case."
      },
      "typeVersion": 1
    },
    {
      "id": "fe7be7f6-fb3f-4902-bad6-7a0148b760a9",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1888,
        -1632
      ],
      "parameters": {
        "width": 944,
        "height": 1264,
        "content": "# How the Workflow Works\n\n### The workflow starts automatically whenever a new refund-related ticket is created in Zendesk.\n\n### It first checks whether the ticket is related to WooCommerce using ticket tags. Non-WooCommerce tickets are ignored.\n\n### Important ticket details such as customer information, order ID and refund reason are extracted and standardized.\n\n### Using the order ID, the workflow fetches the corresponding order from WooCommerce.\n\n### The order status is validated to ensure it is eligible for refund (Completed or Processing).\n\n### The workflow also checks whether the order has already been refunded to prevent duplicate refunds.\n\n### Ticket and order data are merged into a single clean structure.\n\n### Based on the refund reason (damaged item, wrong item, partial refund or full refund), the workflow takes different actions.\n\n### Damaged item cases trigger an internal Slack notification for quick attention.\n\n### Other refund types automatically send clear and relevant emails to the customer with next steps.\n\n# Workflow Setup Steps\n\n### Import the provided workflow JSON file into your n8n instance.\n\n### Connect your Zendesk account and ensure the trigger has permission to read tickets.\n\n### Make sure Zendesk tickets include the woocommerce tag for WooCommerce-related cases.\n\n### Connect your WooCommerce account with API credentials that have order read access.\n\n### Connect your Slack account and select the channel for damaged item alerts.\n\n### Connect your Gmail account to enable automated customer emails.\n\n### Review email templates and update wording if needed.\n\n### Activate the workflow and test it by creating a sample refund ticket in Zendesk."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "6bd4affe-f74c-41c8-a9cb-db88b819547b",
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Normalize Zendesk Ticket Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Ticket and Order Data": {
      "main": [
        [
          {
            "node": "Is Refund Reason = Damaged Item?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize Zendesk Ticket Data": {
      "main": [
        [
          {
            "node": "WooCommerce \u2013 Fetch Order by ID",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge Ticket and Order Data",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Check If Order Already Refunded": {
      "main": [
        [],
        [
          {
            "node": "Merge Ticket and Order Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Refund Reason = Damaged Item?": {
      "main": [
        [
          {
            "node": "Slack \u2013 Notify Damaged Item Refund",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Route Refund Type (Wrong / Partial / Full)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize WooCommerce Order Data": {
      "main": [
        [
          {
            "node": "Check Order Status (Completed or Processing)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "WooCommerce \u2013 Fetch Order by ID": {
      "main": [
        [
          {
            "node": "Normalize WooCommerce Order Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Zendesk \u2013 New Refund Ticket Trigger": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Email \u2013 Partial Refund Review": {
      "main": [
        [
          {
            "node": "Email Customer \u2013 Partial Refund Under Review",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Email \u2013 Wrong Item Proof Request": {
      "main": [
        [
          {
            "node": "Email Customer \u2013 Request Proof (Wrong Item)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Route Refund Type (Wrong / Partial / Full)": {
      "main": [
        [
          {
            "node": "Prepare Email \u2013 Wrong Item Proof Request",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Prepare Email \u2013 Partial Refund Review",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Prepare Email \u2013 Full Refund Return Required",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Order Status (Completed or Processing)": {
      "main": [
        [
          {
            "node": "Check If Order Already Refunded",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Email \u2013 Full Refund Return Required": {
      "main": [
        [
          {
            "node": "Email Customer \u2013 Return Required for Refund",
            "type": "main",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow automatically handles refund-related Zendesk tickets for WooCommerce orders. When a new refund ticket is created, it verifies whether the ticket is related to WooCommerce, fetches the order details, checks refund eligibility and then routes the case based on the…

Source: https://n8n.io/workflows/14861/ — original creator credit. Request a take-down →

More Email & Gmail workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Email & Gmail

Categories: Payments, Project Operations, Client Onboarding

Stripe Trigger, Google Drive, ClickUp +4
Email & Gmail

This workflow is an automated invoice payment tracking and vindication system that monitors unpaid and overdue invoices stored in NocoDB, then sends escalating reminders to clients based on configurab

HTTP Request, Noco Db, Gmail +1
Email & Gmail

Sync your Google Calendar events with Google Sheets and get daily Slack summaries with meeting statistics. FEATURES:

Google Calendar Trigger, Google Sheets, Slack +3
Email & Gmail

This workflow is an end-to-end AI video generation, review, and delivery pipeline. It takes a plain-text creative prompt via webhook, generates a video using an AI model, continuously checks job statu

Slack, Error Trigger, HTTP Request +2
Email & Gmail

Stop chasing blurry receipts and manually typing expense data. This workflow creates an intelligent, "snap-and-submit" reimbursement pipeline that hosts photos via UploadToURL, extracts deep data via

Form Trigger, N8N Nodes Uploadtourl, HTTP Request +3