The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"name": "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"
}
}
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 →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Community Node Disclaimer: This workflow uses KlickTipp community nodes.
Community Node Disclaimer: This workflow uses KlickTipp community nodes.
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
VenueDesk - User Manager (Final Database Fix). Uses httpRequest, crypto. Webhook trigger; 13 nodes.
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