AutomationFlowsWeb Scraping › Cxc - Zendesk Solved a Confirmacion De Pedido (plantilla)

Cxc - Zendesk Solved a Confirmacion De Pedido (plantilla)

CxC - Zendesk solved a confirmacion de pedido (plantilla). Uses crypto, httpRequest. Webhook trigger; 11 nodes.

Webhook trigger★★★☆☆ complexity11 nodesCryptoHTTP Request
Web Scraping Trigger: Webhook Nodes: 11 Complexity: ★★★☆☆ Added:

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
{
  "name": "CxC - Zendesk solved a confirmacion de pedido (plantilla)",
  "nodes": [
    {
      "parameters": {
        "content": "## PLANTILLA DE PARTIDA - NO usar tal cual en produccion\n\nEste JSON es un punto de partida escrito a mano. Tras importar:\n1. Revisa y RECONECTA cada nodo en la UI (los typeVersion son conservadores; n8n puede pedir actualizar nodos).\n2. Crea las credenciales: Bearer Auth (ORDERS_API_TOKEN) para la orders API y Basic Auth (usuario `{email}/token`, password ZENDESK_API_TOKEN) para Zendesk.\n3. En n8n 2.x el secreto HMAC del nodo Crypto se configura como CREDENCIAL del nodo (no como parametro): pega ahi ZENDESK_WEBHOOK_SECRET. Secret de prueba documentado por Zendesk: dGhpc19zZWNyZXRfaXNfZm9yX3Rlc3Rpbmdfb25seQ==\n4. Define ORDERS_API_BASE_URL y ZENDESK_SUBDOMAIN como variables de entorno del contenedor (ver docker-compose.yml).\n5. Lo honesto: reconstruir el flujo en la UI y re-exportar con `n8n export:workflow --backup`.\n\nFirma Zendesk: base64(HMAC-SHA256(timestamp + raw_body)) con headers X-Zendesk-Webhook-Signature y X-Zendesk-Webhook-Signature-Timestamp. Zendesk reintenta y su timeout es 12 s: el Webhook responde Immediately y el flujo debe ser IDEMPOTENTE (n8n no trae deduplicacion; en la Alternativa A la da DynamoDB cxc-mvp-idempotency).\n\nNota tecnica: con Raw Body activado el cuerpo llega como binario; el nodo Extract from File lo pasa a texto ANTES de calcular el HMAC (firmar el JSON re-serializado romperia la firma). El tag confirmacion_enviada se agrega AL FINAL, como guarda anti-bucle, solo si el envio fue OK.",
        "height": 620,
        "width": 540
      },
      "id": "sticky-plantilla",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -980,
        -240
      ]
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "zendesk-solved",
        "responseMode": "onReceived",
        "responseCode": 200,
        "options": {
          "rawBody": true
        }
      },
      "id": "webhook-zendesk",
      "name": "Webhook Zendesk solved",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 1.1,
      "position": [
        -380,
        60
      ]
    },
    {
      "parameters": {
        "operation": "text",
        "binaryPropertyName": "data",
        "destinationKey": "rawBody",
        "options": {}
      },
      "id": "extract-raw-body",
      "name": "Extraer cuerpo crudo",
      "type": "n8n-nodes-base.extractFromFile",
      "typeVersion": 1,
      "position": [
        -140,
        60
      ]
    },
    {
      "parameters": {
        "action": "hmac",
        "type": "SHA256",
        "value": "={{ $('Webhook Zendesk solved').item.json.headers['x-zendesk-webhook-signature-timestamp'] }}{{ $json.rawBody }}",
        "dataPropertyName": "computedSignature",
        "secret": "REEMPLAZAR_CON_ZENDESK_WEBHOOK_SECRET",
        "encoding": "base64"
      },
      "id": "crypto-hmac",
      "name": "Calcular HMAC firma",
      "type": "n8n-nodes-base.crypto",
      "typeVersion": 1,
      "position": [
        100,
        60
      ]
    },
    {
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json.computedSignature }}",
              "value2": "={{ $('Webhook Zendesk solved').item.json.headers['x-zendesk-webhook-signature'] }}"
            }
          ]
        }
      },
      "id": "if-firma-valida",
      "name": "Firma valida?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 1,
      "position": [
        340,
        60
      ]
    },
    {
      "parameters": {},
      "id": "noop-firma-invalida",
      "name": "Firma invalida (descartar)",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        580,
        240
      ]
    },
    {
      "parameters": {
        "method": "GET",
        "url": "={{ $env.ORDERS_API_BASE_URL }}/orders/{{ JSON.parse($('Extraer cuerpo crudo').item.json.rawBody).order_id }}",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth",
        "options": {
          "timeout": 10000
        }
      },
      "id": "http-get-orden",
      "name": "Consultar orden (GET orders API)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [
        580,
        -60
      ]
    },
    {
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json.status }}",
              "value2": "delivered"
            }
          ]
        }
      },
      "id": "if-delivered",
      "name": "Orden delivered?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 1,
      "position": [
        820,
        -60
      ]
    },
    {
      "parameters": {},
      "id": "noop-email-placeholder",
      "name": "Placeholder: enviar email de confirmacion + log",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        1060,
        -160
      ]
    },
    {
      "parameters": {
        "method": "PUT",
        "url": "=https://{{ $env.ZENDESK_SUBDOMAIN }}.zendesk.com/api/v2/tickets/{{ JSON.parse($('Extraer cuerpo crudo').item.json.rawBody).ticket_id }}/tags",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBasicAuth",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "{\n  \"tags\": [\"confirmacion_enviada\"]\n}",
        "options": {
          "timeout": 10000
        }
      },
      "id": "http-put-tags",
      "name": "Anadir tag confirmacion_enviada (PUT /tags)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [
        1300,
        -160
      ]
    },
    {
      "parameters": {},
      "id": "noop-sin-accion",
      "name": "Sin accion (status distinto de delivered)",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        1060,
        60
      ]
    }
  ],
  "connections": {
    "Webhook Zendesk solved": {
      "main": [
        [
          {
            "node": "Extraer cuerpo crudo",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extraer cuerpo crudo": {
      "main": [
        [
          {
            "node": "Calcular HMAC firma",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calcular HMAC firma": {
      "main": [
        [
          {
            "node": "Firma valida?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Firma valida?": {
      "main": [
        [
          {
            "node": "Consultar orden (GET orders API)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Firma invalida (descartar)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Consultar orden (GET orders API)": {
      "main": [
        [
          {
            "node": "Orden delivered?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Orden delivered?": {
      "main": [
        [
          {
            "node": "Placeholder: enviar email de confirmacion + log",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Sin accion (status distinto de delivered)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Placeholder: enviar email de confirmacion + log": {
      "main": [
        [
          {
            "node": "Anadir tag confirmacion_enviada (PUT /tags)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  }
}
Pro

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

About this workflow

CxC - Zendesk solved a confirmacion de pedido (plantilla). Uses crypto, httpRequest. Webhook trigger; 11 nodes.

Source: https://github.com/alinedmooner/cxc-technical-interview/blob/d1bea77adecd4e629557b017aa4fa35fd5b825ed/mvp/n8n/workflows/zendesk-solved-flow.json — original creator credit. Request a take-down →

More Web Scraping workflows → · Browse all categories →

Related workflows

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

Web Scraping

Community Node Disclaimer: This workflow uses KlickTipp community nodes.

Crypto, Custom, N8N Nodes Klicktipp +1
Web Scraping

Community Node Disclaimer: This workflow uses KlickTipp community nodes.

Crypto, Custom, HTTP Request +1
Web Scraping

Struggling with inaccurate Meta Ads tracking due to iOS 14+ and ad blockers? 📉 This workflow is your solution. It provides a robust, server-side endpoint to reliably send conversion events directly to

Crypto, HTTP Request
Web Scraping

VenueDesk - User Manager (Final Database Fix). Uses httpRequest, crypto. Webhook trigger; 13 nodes.

HTTP Request, Crypto
Web Scraping

Automatically sync Fizzy cards to Basecamp todos in real-time. When cards are created, assigned, completed, or reopened in Fizzy, the changes sync instantly to your Basecamp project. Card tags determi

HTTP Request, N8N Nodes Basecamp