370 lines
9.1 KiB
JSON
370 lines
9.1 KiB
JSON
{
|
|
"name": "openclaw-action",
|
|
"nodes": [
|
|
{
|
|
"id": "webhook-openclaw-action",
|
|
"name": "Webhook",
|
|
"type": "n8n-nodes-base.webhook",
|
|
"typeVersion": 2.1,
|
|
"position": [
|
|
-820,
|
|
0
|
|
],
|
|
"parameters": {
|
|
"httpMethod": "POST",
|
|
"path": "openclaw-action",
|
|
"authentication": "none",
|
|
"responseMode": "responseNode",
|
|
"options": {}
|
|
}
|
|
},
|
|
{
|
|
"id": "normalize-request",
|
|
"name": "normalize-request",
|
|
"type": "n8n-nodes-base.set",
|
|
"typeVersion": 3.4,
|
|
"position": [
|
|
-560,
|
|
0
|
|
],
|
|
"parameters": {
|
|
"mode": "manual",
|
|
"includeOtherFields": false,
|
|
"assignments": {
|
|
"assignments": [
|
|
{
|
|
"id": "action",
|
|
"name": "action",
|
|
"type": "string",
|
|
"value": "={{$json.body.action || ''}}"
|
|
},
|
|
{
|
|
"id": "args",
|
|
"name": "args",
|
|
"type": "object",
|
|
"value": "={{$json.body.args || {}}}"
|
|
},
|
|
{
|
|
"id": "request_id",
|
|
"name": "request_id",
|
|
"type": "string",
|
|
"value": "={{$json.body.request_id || ''}}"
|
|
}
|
|
]
|
|
},
|
|
"options": {
|
|
"dotNotation": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "route-action",
|
|
"name": "route-action",
|
|
"type": "n8n-nodes-base.switch",
|
|
"typeVersion": 3.4,
|
|
"position": [
|
|
-300,
|
|
0
|
|
],
|
|
"parameters": {
|
|
"mode": "rules",
|
|
"rules": {
|
|
"values": [
|
|
{
|
|
"conditions": {
|
|
"options": {
|
|
"caseSensitive": true,
|
|
"typeValidation": "strict",
|
|
"version": 2
|
|
},
|
|
"conditions": [
|
|
{
|
|
"leftValue": "={{$json.action}}",
|
|
"rightValue": "append_log",
|
|
"operator": {
|
|
"type": "string",
|
|
"operation": "equals"
|
|
}
|
|
}
|
|
],
|
|
"combinator": "and"
|
|
},
|
|
"renameOutput": true,
|
|
"outputKey": "append_log"
|
|
},
|
|
{
|
|
"conditions": {
|
|
"options": {
|
|
"caseSensitive": true,
|
|
"typeValidation": "strict",
|
|
"version": 2
|
|
},
|
|
"conditions": [
|
|
{
|
|
"leftValue": "={{$json.action}}",
|
|
"rightValue": "notify",
|
|
"operator": {
|
|
"type": "string",
|
|
"operation": "equals"
|
|
}
|
|
}
|
|
],
|
|
"combinator": "and"
|
|
},
|
|
"renameOutput": true,
|
|
"outputKey": "notify"
|
|
}
|
|
]
|
|
},
|
|
"options": {
|
|
"fallbackOutput": "extra",
|
|
"renameFallbackOutput": "unknown"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "append-log-response",
|
|
"name": "append-log-response",
|
|
"type": "n8n-nodes-base.set",
|
|
"typeVersion": 3.4,
|
|
"position": [
|
|
-20,
|
|
-180
|
|
],
|
|
"parameters": {
|
|
"mode": "manual",
|
|
"includeOtherFields": false,
|
|
"assignments": {
|
|
"assignments": [
|
|
{
|
|
"id": "status_code",
|
|
"name": "status_code",
|
|
"type": "number",
|
|
"value": "={{$json.args.text ? 200 : 400}}"
|
|
},
|
|
{
|
|
"id": "response_body",
|
|
"name": "response_body",
|
|
"type": "object",
|
|
"value": "={{ $json.args.text ? { ok: true, request_id: $json.request_id || '', result: { action: 'append_log', status: 'accepted', preview: { text: $json.args.text } } } : { ok: false, request_id: $json.request_id || '', error: { code: 'invalid_request', message: 'required args are missing' } } }}"
|
|
}
|
|
]
|
|
},
|
|
"options": {
|
|
"dotNotation": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "respond-append-log",
|
|
"name": "respond-append-log",
|
|
"type": "n8n-nodes-base.respondToWebhook",
|
|
"typeVersion": 1.5,
|
|
"position": [
|
|
240,
|
|
-180
|
|
],
|
|
"parameters": {
|
|
"respondWith": "json",
|
|
"responseBody": "={{$json.response_body}}",
|
|
"options": {
|
|
"responseCode": "={{$json.status_code}}"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "notify-response",
|
|
"name": "notify-response",
|
|
"type": "n8n-nodes-base.set",
|
|
"typeVersion": 3.4,
|
|
"position": [
|
|
-20,
|
|
0
|
|
],
|
|
"parameters": {
|
|
"mode": "manual",
|
|
"includeOtherFields": false,
|
|
"assignments": {
|
|
"assignments": [
|
|
{
|
|
"id": "status_code",
|
|
"name": "status_code",
|
|
"type": "number",
|
|
"value": "={{$json.args.message ? 200 : 400}}"
|
|
},
|
|
{
|
|
"id": "response_body",
|
|
"name": "response_body",
|
|
"type": "object",
|
|
"value": "={{ $json.args.message ? { ok: true, request_id: $json.request_id || '', result: { action: 'notify', status: 'accepted', preview: { title: $json.args.title || '', message: $json.args.message } } } : { ok: false, request_id: $json.request_id || '', error: { code: 'invalid_request', message: 'required args are missing' } } }}"
|
|
}
|
|
]
|
|
},
|
|
"options": {
|
|
"dotNotation": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "respond-notify",
|
|
"name": "respond-notify",
|
|
"type": "n8n-nodes-base.respondToWebhook",
|
|
"typeVersion": 1.5,
|
|
"position": [
|
|
240,
|
|
0
|
|
],
|
|
"parameters": {
|
|
"respondWith": "json",
|
|
"responseBody": "={{$json.response_body}}",
|
|
"options": {
|
|
"responseCode": "={{$json.status_code}}"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "unknown-action-response",
|
|
"name": "unknown-action-response",
|
|
"type": "n8n-nodes-base.set",
|
|
"typeVersion": 3.4,
|
|
"position": [
|
|
-20,
|
|
180
|
|
],
|
|
"parameters": {
|
|
"mode": "manual",
|
|
"includeOtherFields": false,
|
|
"assignments": {
|
|
"assignments": [
|
|
{
|
|
"id": "status_code",
|
|
"name": "status_code",
|
|
"type": "number",
|
|
"value": 400
|
|
},
|
|
{
|
|
"id": "response_body",
|
|
"name": "response_body",
|
|
"type": "object",
|
|
"value": "={{ { ok: false, request_id: $json.request_id || '', error: { code: 'unknown_action', message: 'action is not supported' } } }}"
|
|
}
|
|
]
|
|
},
|
|
"options": {
|
|
"dotNotation": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "respond-unknown-action",
|
|
"name": "respond-unknown-action",
|
|
"type": "n8n-nodes-base.respondToWebhook",
|
|
"typeVersion": 1.5,
|
|
"position": [
|
|
240,
|
|
180
|
|
],
|
|
"parameters": {
|
|
"respondWith": "json",
|
|
"responseBody": "={{$json.response_body}}",
|
|
"options": {
|
|
"responseCode": "={{$json.status_code}}"
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"connections": {
|
|
"Webhook": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "normalize-request",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"normalize-request": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "route-action",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"route-action": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "append-log-response",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "notify-response",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "unknown-action-response",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"append-log-response": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "respond-append-log",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"notify-response": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "respond-notify",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"unknown-action-response": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "respond-unknown-action",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
}
|
|
},
|
|
"pinData": {},
|
|
"settings": {
|
|
"executionOrder": "v1"
|
|
},
|
|
"staticData": null,
|
|
"meta": {
|
|
"templateCredsSetupCompleted": false,
|
|
"note": "After import, set Webhook authentication to Header Auth and bind a local credential using x-openclaw-secret. Secrets are intentionally not embedded in the workflow export."
|
|
},
|
|
"active": false,
|
|
"versionId": "openclaw-action-v1"
|
|
}
|