Voici le code de mon workflow
{
“name”: “Section 2 - Order Webhook Processor”,
“nodes”: [
{
“parameters”: {
“httpMethod”: “POST”,
“path”: “course/n8n102/new-order”,
“authentication”: “headerAuth”,
“responseMode”: “responseNode”,
“options”: {}
},
“type”: “n8n-nodes-base.webhook”,
“typeVersion”: 2.1,
“position”: [
0,
0
],
“id”: “55791763-ef2d-496c-a621-0967275b5f60”,
“name”: “WebhookNewOrder”,
“webhookId”: “f31cf483-a021-4698-b82b-2373ea5ca347”,
“credentials”: {
“httpHeaderAuth”: {
“id”: “U2s8FGlPY7vgv5fZ”,
“name”: “n8n 101 Academy API Key”
}
}
},
{
“parameters”: {
“respondWith”: “json”,
“responseBody”: “{\n “status”: “accepted”,\n “order_id”: “{{ $(‘WebhookNewOrder’).item.json.body.order_id }}”,\n “message”: “Order received and stored successfully”,\n “stored”: true,\n “stored_order”: {{ $(‘InsertOrder’).item.json.toJsonString() }}\n}”,
“options”: {
“responseCode”: 200
}
},
“type”: “n8n-nodes-base.respondToWebhook”,
“typeVersion”: 1.5,
“position”: [
672,
-96
],
“id”: “c65f5f62-2272-41cb-9f0a-e4611cc6872b”,
“name”: “RespondSuccess”
},
{
“parameters”: {
“respondWith”: “json”,
“responseBody”: “{\n “status”: “error”,\n “message”: “Missing required fields: order_id, customer_id, and total are required”\n}”,
“options”: {
“responseCode”: 400
}
},
“type”: “n8n-nodes-base.respondToWebhook”,
“typeVersion”: 1.5,
“position”: [
448,
96
],
“id”: “8a0eb053-f1f3-4013-be48-80cab5c6eb2b”,
“name”: “RespondValidationError”
},
{
“parameters”: {
“conditions”: {
“options”: {
“caseSensitive”: true,
“leftValue”: “”,
“typeValidation”: “strict”,
“version”: 3
},
“conditions”: [
{
“id”: “ddeb4d95-3bcb-44d9-8f4d-239e92f79498”,
“leftValue”: “={{ $json.body.order_id }}”,
“rightValue”: “”,
“operator”: {
“type”: “string”,
“operation”: “notEmpty”,
“singleValue”: true
}
},
{
“id”: “c70edb33-65b1-4495-8d9f-c8c5e23d01ce”,
“leftValue”: “={{ $json.body.customer_id }}”,
“rightValue”: “”,
“operator”: {
“type”: “string”,
“operation”: “notEmpty”,
“singleValue”: true
}
},
{
“id”: “1950dfd2-d86c-49f4-91f0-69ea1db1d9f0”,
“leftValue”: “={{ $json.body.total }}”,
“rightValue”: “”,
“operator”: {
“type”: “number”,
“operation”: “notEmpty”,
“singleValue”: true
}
}
],
“combinator”: “and”
},
“options”: {}
},
“type”: “n8n-nodes-base.if”,
“typeVersion”: 2.3,
“position”: [
224,
0
],
“id”: “d2e6b385-eee4-438f-9ca6-92b196e90073”,
“name”: “ValidateRequiredFields”
},
{
“parameters”: {
“dataTableId”: {
“__rl”: true,
“value”: “cBZmy5dZ6kMJNMW1”,
“mode”: “list”,
“cachedResultName”: “n8n102_course_orders”,
“cachedResultUrl”: “/projects/fUsVEeDcH5dSC73u/datatables/cBZmy5dZ6kMJNMW1”
},
“columns”: {
“mappingMode”: “defineBelow”,
“value”: {
“order_id”: “={{ $(‘WebhookNewOrder’).item.json.body.order_id }}”,
“customer_id”: “={{ $(‘WebhookNewOrder’).item.json.body.customer_id }}”,
“total”: “={{ $(‘WebhookNewOrder’).item.json.body.total }}”,
“status”: “received”,
“received_at”: “={{ $now }}”
},
“matchingColumns”: ,
“schema”: [
{
“id”: “order_id”,
“displayName”: “order_id”,
“required”: false,
“defaultMatch”: false,
“display”: true,
“type”: “string”,
“readOnly”: false,
“removed”: false
},
{
“id”: “customer_id”,
“displayName”: “customer_id”,
“required”: false,
“defaultMatch”: false,
“display”: true,
“type”: “string”,
“readOnly”: false,
“removed”: false
},
{
“id”: “total”,
“displayName”: “total”,
“required”: false,
“defaultMatch”: false,
“display”: true,
“type”: “number”,
“readOnly”: false,
“removed”: false
},
{
“id”: “status”,
“displayName”: “status”,
“required”: false,
“defaultMatch”: false,
“display”: true,
“type”: “string”,
“readOnly”: false,
“removed”: false
},
{
“id”: “received_at”,
“displayName”: “received_at”,
“required”: false,
“defaultMatch”: false,
“display”: true,
“type”: “dateTime”,
“readOnly”: false,
“removed”: false
},
{
“id”: “processed_at”,
“displayName”: “processed_at”,
“required”: false,
“defaultMatch”: false,
“display”: true,
“type”: “string”,
“readOnly”: false,
“removed”: false
}
],
“attemptToConvertTypes”: false,
“convertFieldsToString”: false
},
“options”: {}
},
“type”: “n8n-nodes-base.dataTable”,
“typeVersion”: 1.1,
“position”: [
448,
-96
],
“id”: “24477ee2-e476-44a7-a054-706d80aebcea”,
“name”: “InsertOrder”
}
],
“pinData”: {
“WebhookNewOrder”: [
{
“json”: {
“headers”: {
“host”: “unsubtle-pecan-various.ngrok-free.dev”,
“user-agent”: “n8n”,
“content-length”: “59”,
“accept”: “application/json,text/html,application/xhtml+xml,application/xml,text/;q=0.9, image/;q=0.8, /;q=0.7”,
“accept-encoding”: “gzip, compress, deflate, br”,
“content-type”: “application/json”,
“x-api-key”: “pFT1jtDoVHAmVan$7eb6”,
“x-forwarded-for”: “4.184.78.241”,
“x-forwarded-host”: “unsubtle-pecan-various.ngrok-free.dev”,
“x-forwarded-proto”: “https”
},
“params”: {},
“query”: {},
“body”: {
“order_id”: “ORD-033”,
“customer_id”: “CUST-003”,
“total”: 299
},
“webhookUrl”: “https://unsubtle-pecan-various.ngrok-free.dev/webhook/course/n8n102/new-order”,
“executionMode”: “production”
},
“pairedItem”: {
“item”: 0
}
}
]
},
“connections”: {
“WebhookNewOrder”: {
“main”: [
[
{
“node”: “ValidateRequiredFields”,
“type”: “main”,
“index”: 0
}
]
]
},
“ValidateRequiredFields”: {
“main”: [
[
{
“node”: “InsertOrder”,
“type”: “main”,
“index”: 0
}
],
[
{
“node”: “RespondValidationError”,
“type”: “main”,
“index”: 0
}
]
]
},
“InsertOrder”: {
“main”: [
[
{
“node”: “RespondSuccess”,
“type”: “main”,
“index”: 0
}
]
]
}
},
“active”: true,
“settings”: {
“executionOrder”: “v1”,
“binaryMode”: “separate”,
“availableInMCP”: false
},
“versionId”: “8d312c5f-d6a4-4a93-be81-907479c15059”,
“meta”: {
“templateCredsSetupCompleted”: true,
“instanceId”: “8da7da1c93e7fd1eb486ae2100258e59509566d109f172dbb74cc869df0e0f37”
},
“nodeGroups”: ,
“id”: “5rZgwVXmEGPypnIW”,
“tags”: [
{
“updatedAt”: “2026-07-10T08:40:53.628Z”,
“createdAt”: “2026-07-10T08:40:53.628Z”,
“id”: “W9foH6nqRJJRuzF1”,
“name”: “n8n102”
}
]
}
J’ai utilisé ngrok pour l’URL du webhook



