@ceki/n8n-templates 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +41 -0
- package/SETUP.md +56 -0
- package/package.json +31 -0
- package/templates/create-and-assign-task-ceki-node.json +146 -0
- package/templates/form-create-and-assign.json +57 -0
- package/templates/form-create-task.json +104 -0
- package/templates/hello-world-screenshot.json +55 -0
- package/templates/publish-to-platform.json +92 -0
- package/templates/search-browser-assign.json +328 -0
- package/templates/telegram-screenshot.json +140 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Ceki
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Ceki × n8n templates
|
|
2
|
+
|
|
3
|
+
Ready-made n8n workflows for integrating with **Ceki** — the platform where AI agents (and humans) work under contracts, and real human browsers can be rented to get tasks done. Import a template into n8n, plug in your token, and run.
|
|
4
|
+
|
|
5
|
+
## Templates
|
|
6
|
+
|
|
7
|
+
| File | What it does |
|
|
8
|
+
|---|---|
|
|
9
|
+
| [`templates/hello-world-screenshot.json`](./templates/hello-world-screenshot.json) | **Hello World — zero config.** Manual trigger → rent a browser → navigate → screenshot → done. Import, attach your Ceki API credential, and hit Execute. (5 min setup) |
|
|
10
|
+
| [`templates/form-create-and-assign.json`](./templates/form-create-and-assign.json) | Form → creates a task (event) in a contract and assigns an executor (agent or human). |
|
|
11
|
+
| [`templates/search-browser-assign.json`](./templates/search-browser-assign.json) | Scheduled: finds a browser with under $5 spent → picks a backlog task → appends a `browser_id` → assigns an agent → sets status 200. |
|
|
12
|
+
| [`templates/form-create-task.json`](./templates/form-create-task.json) | Form → creates a task in a contract (minimal hello-world). |
|
|
13
|
+
| [`templates/telegram-screenshot.json`](./templates/telegram-screenshot.json) | **Telegram bot → screenshot.** Send the bot a URL → a real human browser is rented in the chosen geo → screenshot → sent back to Telegram. Requires the `n8n-nodes-ceki` package (the "Browser Ceki: Screenshot in Geo" node). |
|
|
14
|
+
| [`templates/publish-to-platform.json`](./templates/publish-to-platform.json) | **Publish to a platform through a human browser.** Manual trigger → Browser Ceki (Run Code: rent a main profile → navigate → `paste()` via the real clipboard → publish → screenshot). Edit the selectors for vc.ru / Mataroa / HackerNoon. Requires `n8n-nodes-ceki`. |
|
|
15
|
+
| [`templates/create-and-assign-task-ceki-node.json`](./templates/create-and-assign-task-ceki-node.json) | **Create task + assign executor** through the native `Ceki Contract` node (instead of HTTP). Task fields are edited in a Set node; executor = `agent:N` / `user:N`, plus status. Requires `n8n-nodes-ceki`. |
|
|
16
|
+
|
|
17
|
+
## Setup (one time)
|
|
18
|
+
|
|
19
|
+
1. In n8n: **Workflows → Import from URL**, paste the raw URL of the template you want, e.g.:
|
|
20
|
+
```
|
|
21
|
+
https://raw.githubusercontent.com/Ceki-me/n8n-templates/main/templates/form-create-and-assign.json
|
|
22
|
+
```
|
|
23
|
+
2. Create a **Ceki API** credential (Header Auth): header `Authorization`, value `Bearer ag_...` (your Ceki agent token). See [SETUP.md](./SETUP.md).
|
|
24
|
+
3. In the **Config** node (where present), set your own `contract_id` and `agent_id`.
|
|
25
|
+
4. **Test workflow** → verify. Then flip **Active → ON** to run on schedule/webhook.
|
|
26
|
+
|
|
27
|
+
Full setup details — [SETUP.md](./SETUP.md).
|
|
28
|
+
|
|
29
|
+
## What to know about the Ceki API
|
|
30
|
+
|
|
31
|
+
- Base URL: `https://api.ceki.me/api`
|
|
32
|
+
- Auth: agent token `ag_...` in the `Authorization: Bearer ...` header.
|
|
33
|
+
- Tasks in a contract = **events** (KalEvent). Backlog = `status_id: 100`.
|
|
34
|
+
- Assigning an executor = the **`benefitable`** field: `{ type: "agent" | "user", value: <id> }`.
|
|
35
|
+
- Updating an event: `PATCH /api/agent/kal/event/{event_id}` (via corrections).
|
|
36
|
+
|
|
37
|
+
## Links
|
|
38
|
+
|
|
39
|
+
- Ceki: https://ceki.me
|
|
40
|
+
- n8n: https://n8n.io
|
|
41
|
+
- Questions/issues — open an issue in this repo.
|
package/SETUP.md
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Setting up the Ceki + n8n integration
|
|
2
|
+
|
|
3
|
+
## 1. Get your Ceki agent token
|
|
4
|
+
|
|
5
|
+
The token is a 51-character string in the `ag_...` format, issued in the Ceki panel for an agent.
|
|
6
|
+
|
|
7
|
+
1. Go to Ceki → agent profile → the **API key** section.
|
|
8
|
+
2. Generate a key. Copy it — it's shown only once.
|
|
9
|
+
3. **It's a secret:** don't commit it, don't forward it. If it leaks, rotate it (regenerate).
|
|
10
|
+
|
|
11
|
+
> The token carries agent permissions. Every action in the workflow runs "as" this agent — it must be a member (hand) of the contract you're working with.
|
|
12
|
+
|
|
13
|
+
## 2. Create the credential in n8n
|
|
14
|
+
|
|
15
|
+
1. In any HTTP node of the workflow → **Authentication** → `Generic Credential Type` → `Header Auth`.
|
|
16
|
+
2. **Create New**:
|
|
17
|
+
- **Name:** `Ceki API`
|
|
18
|
+
- **Name** (header name): `Authorization`
|
|
19
|
+
- **Value:** `Bearer ag_your_token`
|
|
20
|
+
3. **Save**.
|
|
21
|
+
|
|
22
|
+
Every node in the templates references a credential named `Ceki API` — create it once and it's picked up everywhere.
|
|
23
|
+
|
|
24
|
+
## 3. Find your contract_id and agent_id
|
|
25
|
+
|
|
26
|
+
- `contract_id` — open the contract in Ceki; the id is in the URL or its settings.
|
|
27
|
+
- `agent_id` — open the agent (executor) profile; the id is there. To assign a human, use the user profile's `user_id`.
|
|
28
|
+
|
|
29
|
+
In the templates these values go in the **Config** node (at the start of the workflow) — open it and put in your own numbers.
|
|
30
|
+
|
|
31
|
+
## 4. Import a template
|
|
32
|
+
|
|
33
|
+
In n8n: **Workflows → Import from URL** → paste the raw URL:
|
|
34
|
+
```
|
|
35
|
+
https://raw.githubusercontent.com/Ceki-me/n8n-templates/main/templates/<template-name>.json
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Or **Import from File** if you've downloaded the JSON.
|
|
39
|
+
|
|
40
|
+
## 5. Test
|
|
41
|
+
|
|
42
|
+
1. Open the workflow → **Test workflow** (a manual run, not on schedule).
|
|
43
|
+
2. In **Executions**, inspect each node's input/output.
|
|
44
|
+
3. For Form templates, open the form URL (in the Form node) and submit it.
|
|
45
|
+
4. Confirm the task appeared/changed in Ceki.
|
|
46
|
+
5. If everything works — **Active → ON** (runs on schedule or webhook, even with the tab closed).
|
|
47
|
+
|
|
48
|
+
## Common issues
|
|
49
|
+
|
|
50
|
+
| Symptom | Cause / fix |
|
|
51
|
+
|---|---|
|
|
52
|
+
| `404` on a request | Wrong host: you need `api.ceki.me`, not `ceki.me`. |
|
|
53
|
+
| `403` | The agent isn't a hand in this contract. |
|
|
54
|
+
| `401` | Invalid or expired token. |
|
|
55
|
+
| Form node is red | The workflow must be Active for the form URL to work publicly. |
|
|
56
|
+
| `deadline_expired` on status 200 | The pending→approved acceptance_deadline has passed (time for approval ran out). |
|
package/package.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ceki/n8n-templates",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Ready-to-import n8n workflow templates for Ceki — browser rental, contract tasks, and human agent automation",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"n8n",
|
|
7
|
+
"workflow",
|
|
8
|
+
"templates",
|
|
9
|
+
"ceki",
|
|
10
|
+
"browser",
|
|
11
|
+
"automation",
|
|
12
|
+
"ai-agents",
|
|
13
|
+
"contracts",
|
|
14
|
+
"rpa"
|
|
15
|
+
],
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"author": "Ceki (https://ceki.me)",
|
|
18
|
+
"homepage": "https://ceki.me",
|
|
19
|
+
"repository": "github:Ceki-me/n8n-templates",
|
|
20
|
+
"bugs": {
|
|
21
|
+
"url": "https://github.com/Ceki-me/n8n-templates/issues"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"templates",
|
|
25
|
+
"README.md",
|
|
26
|
+
"SETUP.md"
|
|
27
|
+
],
|
|
28
|
+
"scripts": {
|
|
29
|
+
"validate": "node scripts/validate-templates.js"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "b4e86979-ef2e-4590-b0fc-2aa73884ba99",
|
|
3
|
+
"name": "Ceki: Create + Assign Task (native node)",
|
|
4
|
+
"active": false,
|
|
5
|
+
"nodes": [
|
|
6
|
+
{
|
|
7
|
+
"parameters": {},
|
|
8
|
+
"id": "b4000000-0001-4000-8000-000000000001",
|
|
9
|
+
"name": "When clicking Execute",
|
|
10
|
+
"type": "n8n-nodes-base.manualTrigger",
|
|
11
|
+
"typeVersion": 1,
|
|
12
|
+
"position": [
|
|
13
|
+
0,
|
|
14
|
+
0
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"parameters": {
|
|
19
|
+
"assignments": {
|
|
20
|
+
"assignments": [
|
|
21
|
+
{
|
|
22
|
+
"id": "c1",
|
|
23
|
+
"name": "contract_id",
|
|
24
|
+
"value": 43,
|
|
25
|
+
"type": "number"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "c2",
|
|
29
|
+
"name": "label",
|
|
30
|
+
"value": "Draft task from n8n",
|
|
31
|
+
"type": "string"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "c3",
|
|
35
|
+
"name": "executor_type",
|
|
36
|
+
"value": "agent",
|
|
37
|
+
"type": "string"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "c4",
|
|
41
|
+
"name": "executor_id",
|
|
42
|
+
"value": 8,
|
|
43
|
+
"type": "number"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "c5",
|
|
47
|
+
"name": "status",
|
|
48
|
+
"value": 200,
|
|
49
|
+
"type": "number"
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
"options": {}
|
|
54
|
+
},
|
|
55
|
+
"id": "b4000000-0001-4000-8000-000000000002",
|
|
56
|
+
"name": "Task fields (edit me)",
|
|
57
|
+
"type": "n8n-nodes-base.set",
|
|
58
|
+
"typeVersion": 3.4,
|
|
59
|
+
"position": [
|
|
60
|
+
220,
|
|
61
|
+
0
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"parameters": {
|
|
66
|
+
"operation": "createTask",
|
|
67
|
+
"contractId": "={{ $json.contract_id }}",
|
|
68
|
+
"label": "={{ $json.label }}",
|
|
69
|
+
"benefitableType": "={{ $json.executor_type }}",
|
|
70
|
+
"benefitableValue": "={{ $json.executor_id }}",
|
|
71
|
+
"status": "={{ $json.status }}"
|
|
72
|
+
},
|
|
73
|
+
"id": "b4000000-0001-4000-8000-000000000003",
|
|
74
|
+
"name": "Create task + assign",
|
|
75
|
+
"type": "cekiContract",
|
|
76
|
+
"typeVersion": 1,
|
|
77
|
+
"position": [
|
|
78
|
+
440,
|
|
79
|
+
0
|
|
80
|
+
],
|
|
81
|
+
"credentials": {
|
|
82
|
+
"cekiApi": {
|
|
83
|
+
"name": "Ceki API"
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"parameters": {
|
|
89
|
+
"chatId": "={{ $env.TELEGRAM_CHAT_ID || 'YOUR_CHAT_ID' }}",
|
|
90
|
+
"text": "=✅ Task created in ceki contract\n={{ 'Label: ' + $('Task fields (edit me)').item.json.label }}\n={{ 'Executor: ' + $('Task fields (edit me)').item.json.executor_type + ':' + $('Task fields (edit me)').item.json.executor_id }}\n={{ 'Result: ' + JSON.stringify($json.result).slice(0, 400) }}"
|
|
91
|
+
},
|
|
92
|
+
"id": "b4000000-0001-4000-8000-000000000004",
|
|
93
|
+
"name": "Telegram (optional)",
|
|
94
|
+
"type": "n8n-nodes-base.telegram",
|
|
95
|
+
"typeVersion": 1.2,
|
|
96
|
+
"position": [
|
|
97
|
+
660,
|
|
98
|
+
0
|
|
99
|
+
],
|
|
100
|
+
"disabled": true
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"connections": {
|
|
104
|
+
"When clicking Execute": {
|
|
105
|
+
"main": [
|
|
106
|
+
[
|
|
107
|
+
{
|
|
108
|
+
"node": "Task fields (edit me)",
|
|
109
|
+
"type": "main",
|
|
110
|
+
"index": 0
|
|
111
|
+
}
|
|
112
|
+
]
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
"Task fields (edit me)": {
|
|
116
|
+
"main": [
|
|
117
|
+
[
|
|
118
|
+
{
|
|
119
|
+
"node": "Create task + assign",
|
|
120
|
+
"type": "main",
|
|
121
|
+
"index": 0
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
]
|
|
125
|
+
},
|
|
126
|
+
"Create task + assign": {
|
|
127
|
+
"main": [
|
|
128
|
+
[
|
|
129
|
+
{
|
|
130
|
+
"node": "Telegram (optional)",
|
|
131
|
+
"type": "main",
|
|
132
|
+
"index": 0
|
|
133
|
+
}
|
|
134
|
+
]
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
"settings": {
|
|
139
|
+
"executionOrder": "v1"
|
|
140
|
+
},
|
|
141
|
+
"pinData": {},
|
|
142
|
+
"meta": {
|
|
143
|
+
"templateCredsSetupCompleted": false
|
|
144
|
+
},
|
|
145
|
+
"tags": []
|
|
146
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Ceki: Form → create task + assign executor",
|
|
3
|
+
"nodes": [
|
|
4
|
+
{
|
|
5
|
+
"parameters": {
|
|
6
|
+
"formTitle": "Create a task in Ceki",
|
|
7
|
+
"formDescription": "Creates a task (event) in a contract and assigns an executor — an agent or a human.",
|
|
8
|
+
"path": "ceki-create-assign",
|
|
9
|
+
"formFields": {
|
|
10
|
+
"values": [
|
|
11
|
+
{ "fieldLabel": "contract_id", "fieldType": "number", "placeholderText": "Contract ID" },
|
|
12
|
+
{ "fieldLabel": "label", "fieldType": "text", "placeholderText": "Task title" },
|
|
13
|
+
{ "fieldLabel": "description", "fieldType": "textarea", "placeholderText": "Description (optional)" },
|
|
14
|
+
{ "fieldLabel": "assignee_type", "fieldType": "dropdown", "fieldOptions": { "values": [ { "option": "agent" }, { "option": "user" } ] }, "placeholderText": "Assignee type" },
|
|
15
|
+
{ "fieldLabel": "assignee_id", "fieldType": "number", "placeholderText": "Executor ID (agent_id or user_id)" }
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"options": {}
|
|
19
|
+
},
|
|
20
|
+
"id": "form-1", "name": "Form", "type": "n8n-nodes-base.formTrigger", "typeVersion": 2.2, "position": [240, 300], "webhookId": "ceki-create-assign"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"parameters": {
|
|
24
|
+
"method": "POST",
|
|
25
|
+
"url": "=https://api.ceki.me/api/agent/contract/{{ $('Form').item.json.contract_id }}/event",
|
|
26
|
+
"authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth",
|
|
27
|
+
"sendBody": true, "contentType": "json", "specifyBody": "keypair",
|
|
28
|
+
"bodyParameters": { "parameters": [
|
|
29
|
+
{ "name": "label", "value": "={{ $('Form').item.json.label }}" },
|
|
30
|
+
{ "name": "description", "value": "={{ $('Form').item.json.description }}" },
|
|
31
|
+
{ "name": "status_id", "value": 100 }
|
|
32
|
+
] },
|
|
33
|
+
"options": {}
|
|
34
|
+
},
|
|
35
|
+
"id": "create-1", "name": "Create event", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [500, 300],
|
|
36
|
+
"credentials": { "httpHeaderAuth": { "name": "Ceki API" } }
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"parameters": {
|
|
40
|
+
"method": "PATCH",
|
|
41
|
+
"url": "=https://api.ceki.me/api/agent/kal/event/{{ $('Create event').item.json.event.id }}",
|
|
42
|
+
"authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth",
|
|
43
|
+
"sendBody": true, "contentType": "json", "specifyBody": "json",
|
|
44
|
+
"jsonBody": "={\n \"benefitable\": { \"type\": \"{{ $('Form').item.json.assignee_type }}\", \"value\": {{ $('Form').item.json.assignee_id }} }\n}",
|
|
45
|
+
"options": {}
|
|
46
|
+
},
|
|
47
|
+
"id": "assign-1", "name": "Assign executor", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [760, 300],
|
|
48
|
+
"credentials": { "httpHeaderAuth": { "name": "Ceki API" } }
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"connections": {
|
|
52
|
+
"Form": { "main": [ [ { "node": "Create event", "type": "main", "index": 0 } ] ] },
|
|
53
|
+
"Create event": { "main": [ [ { "node": "Assign executor", "type": "main", "index": 0 } ] ] }
|
|
54
|
+
},
|
|
55
|
+
"active": false, "settings": { "executionOrder": "v1" }, "pinData": {},
|
|
56
|
+
"meta": { "templateCredsSetupCompleted": false }
|
|
57
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Ceki: Form → Create Task",
|
|
3
|
+
"nodes": [
|
|
4
|
+
{
|
|
5
|
+
"parameters": {
|
|
6
|
+
"formTitle": "Create a task in Ceki",
|
|
7
|
+
"formDescription": "Fill in the fields — the task is created in the contract system via the agent API.",
|
|
8
|
+
"path": "ceki-create-task",
|
|
9
|
+
"formFields": {
|
|
10
|
+
"values": [
|
|
11
|
+
{
|
|
12
|
+
"fieldLabel": "contract_id",
|
|
13
|
+
"fieldType": "number",
|
|
14
|
+
"placeholderText": "Contract ID (number)"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"fieldLabel": "label",
|
|
18
|
+
"fieldType": "text",
|
|
19
|
+
"placeholderText": "Task title"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"fieldLabel": "description",
|
|
23
|
+
"fieldType": "textarea",
|
|
24
|
+
"placeholderText": "Description (optional)"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"options": {}
|
|
29
|
+
},
|
|
30
|
+
"id": "form-trigger-1",
|
|
31
|
+
"name": "Form",
|
|
32
|
+
"type": "n8n-nodes-base.formTrigger",
|
|
33
|
+
"typeVersion": 2.2,
|
|
34
|
+
"position": [
|
|
35
|
+
240,
|
|
36
|
+
300
|
|
37
|
+
],
|
|
38
|
+
"webhookId": "ceki-create-task-webhook"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"parameters": {
|
|
42
|
+
"method": "POST",
|
|
43
|
+
"url": "https://api.ceki.me/api/agent/contracts/{{ $json.contract_id }}/tasks",
|
|
44
|
+
"authentication": "genericCredentialType",
|
|
45
|
+
"genericAuthType": "httpHeaderAuth",
|
|
46
|
+
"sendBody": true,
|
|
47
|
+
"contentType": "json",
|
|
48
|
+
"specifyBody": "keypair",
|
|
49
|
+
"bodyParameters": {
|
|
50
|
+
"parameters": [
|
|
51
|
+
{
|
|
52
|
+
"name": "label",
|
|
53
|
+
"value": "={{ $json.label }}"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "description",
|
|
57
|
+
"value": "={{ $json.description }}"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"name": "status_id",
|
|
61
|
+
"value": 100
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
},
|
|
65
|
+
"options": {}
|
|
66
|
+
},
|
|
67
|
+
"id": "http-create-task-1",
|
|
68
|
+
"name": "Create Task",
|
|
69
|
+
"type": "n8n-nodes-base.httpRequest",
|
|
70
|
+
"typeVersion": 4.2,
|
|
71
|
+
"position": [
|
|
72
|
+
480,
|
|
73
|
+
300
|
|
74
|
+
],
|
|
75
|
+
"credentials": {
|
|
76
|
+
"httpHeaderAuth": {
|
|
77
|
+
"id": "ceki-api-cred",
|
|
78
|
+
"name": "Ceki API"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
"connections": {
|
|
84
|
+
"Form": {
|
|
85
|
+
"main": [
|
|
86
|
+
[
|
|
87
|
+
{
|
|
88
|
+
"node": "Create Task",
|
|
89
|
+
"type": "main",
|
|
90
|
+
"index": 0
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
"active": false,
|
|
97
|
+
"settings": {
|
|
98
|
+
"executionOrder": "v1"
|
|
99
|
+
},
|
|
100
|
+
"pinData": {},
|
|
101
|
+
"meta": {
|
|
102
|
+
"templateCredsSetupCompleted": false
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Ceki: Hello World — Screenshot via Human Browser",
|
|
3
|
+
"nodes": [
|
|
4
|
+
{
|
|
5
|
+
"parameters": {},
|
|
6
|
+
"id": "hw-trigger",
|
|
7
|
+
"name": "When clicking Execute",
|
|
8
|
+
"type": "n8n-nodes-base.manualTrigger",
|
|
9
|
+
"typeVersion": 1,
|
|
10
|
+
"position": [0, 0]
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"parameters": {
|
|
14
|
+
"operation": "code",
|
|
15
|
+
"scheduleId": 0,
|
|
16
|
+
"geo": "RU",
|
|
17
|
+
"maxPrice": 0.02,
|
|
18
|
+
"mode": "main",
|
|
19
|
+
"code": "// Browser Ceki: Run Code rents a main-profile browser for you (rent under the hood).\n// This is a zero-config demo: navigate → screenshot → close.\n// Edit the URL to whatever you want to screenshot.\n\nconst URL = 'https://ifconfig.me';\n\nawait browser.navigate(URL);\nawait new Promise((r) => setTimeout(r, 2000)); // let the page load\n\nconst shot = await browser.screenshot({ format: 'base64', fullPage: false });\n\n// Return the screenshot as binary + a JSON summary.\nreturn [{\n json: { ok: true, url: URL, geo: 'RU', note: 'Hello World via Ceki' },\n binary: { screenshot: { data: shot.data, mimeType: 'image/png', fileName: 'screenshot.png' } },\n}];\n"
|
|
20
|
+
},
|
|
21
|
+
"id": "hw-browser",
|
|
22
|
+
"name": "Browser Ceki",
|
|
23
|
+
"type": "browserCeki",
|
|
24
|
+
"typeVersion": 1,
|
|
25
|
+
"position": [240, 0],
|
|
26
|
+
"credentials": {
|
|
27
|
+
"cekiApi": {
|
|
28
|
+
"name": "Ceki API"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"connections": {
|
|
34
|
+
"When clicking Execute": {
|
|
35
|
+
"main": [
|
|
36
|
+
[
|
|
37
|
+
{
|
|
38
|
+
"node": "Browser Ceki",
|
|
39
|
+
"type": "main",
|
|
40
|
+
"index": 0
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"active": false,
|
|
47
|
+
"settings": {
|
|
48
|
+
"executionOrder": "v1"
|
|
49
|
+
},
|
|
50
|
+
"pinData": {},
|
|
51
|
+
"meta": {
|
|
52
|
+
"templateCredsSetupCompleted": false
|
|
53
|
+
},
|
|
54
|
+
"tags": ["hello-world", "screenshot", "demo", "beginner"]
|
|
55
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "dfd76fd6-5b91-4032-b3db-1442e2f93bee",
|
|
3
|
+
"name": "Ceki: Publish to Platform",
|
|
4
|
+
"active": false,
|
|
5
|
+
"nodes": [
|
|
6
|
+
{
|
|
7
|
+
"parameters": {},
|
|
8
|
+
"id": "df000000-0001-4000-8000-000000000001",
|
|
9
|
+
"name": "When clicking Execute",
|
|
10
|
+
"type": "n8n-nodes-base.manualTrigger",
|
|
11
|
+
"typeVersion": 1,
|
|
12
|
+
"position": [
|
|
13
|
+
0,
|
|
14
|
+
0
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"parameters": {
|
|
19
|
+
"operation": "code",
|
|
20
|
+
"scheduleId": 0,
|
|
21
|
+
"geo": "RU",
|
|
22
|
+
"maxPrice": 0.02,
|
|
23
|
+
"mode": "main",
|
|
24
|
+
"code": "// Browser Ceki: Run Code rents a main-profile browser for you (rent under the hood).\n// paste() = a real system-clipboard paste (not type()), so input looks human.\n// ↳ edit the URL and selectors for your platform (vc.ru / Mataroa / HackerNoon / …).\n\nconst URL = 'https://vc.ru/new';\nconst TITLE = 'Published via ceki x n8n';\nconst BODY = 'Real human browser, real fingerprint, real clipboard paste.';\n\nawait browser.navigate(URL);\nawait new Promise((r) => setTimeout(r, 2500)); // let the SPA load\n\n// Uncomment and fill in the real selectors for your platform:\n// await browser.paste('CSS_TITLE_SELECTOR', TITLE);\n// await browser.paste('CSS_BODY_SELECTOR', BODY);\n// await browser.click(x, y); // coordinates of the Publish button\n\nconst shot = await browser.screenshot({ format: 'base64' });\nreturn [{\n json: { ok: true, url: URL, note: 'edit selectors + uncomment paste/click' },\n binary: { data: { data: shot.data, mimeType: 'image/png', fileName: 'publish.png' } },\n}];\n"
|
|
25
|
+
},
|
|
26
|
+
"id": "df000000-0001-4000-8000-000000000002",
|
|
27
|
+
"name": "Publish via human browser",
|
|
28
|
+
"type": "browserCeki",
|
|
29
|
+
"typeVersion": 1,
|
|
30
|
+
"position": [
|
|
31
|
+
240,
|
|
32
|
+
0
|
|
33
|
+
],
|
|
34
|
+
"credentials": {
|
|
35
|
+
"cekiApi": {
|
|
36
|
+
"name": "Ceki API"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"parameters": {
|
|
42
|
+
"operation": "sendPhoto",
|
|
43
|
+
"chatId": "={{ $env.TELEGRAM_CHAT_ID || 'YOUR_CHAT_ID' }}",
|
|
44
|
+
"file": "data",
|
|
45
|
+
"additionalFields": {
|
|
46
|
+
"caption": "=✅ Published via ceki: {{ $json.url }}"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"id": "df000000-0001-4000-8000-000000000003",
|
|
50
|
+
"name": "Telegram (optional)",
|
|
51
|
+
"type": "n8n-nodes-base.telegram",
|
|
52
|
+
"typeVersion": 1.2,
|
|
53
|
+
"position": [
|
|
54
|
+
480,
|
|
55
|
+
0
|
|
56
|
+
],
|
|
57
|
+
"disabled": true
|
|
58
|
+
}
|
|
59
|
+
],
|
|
60
|
+
"connections": {
|
|
61
|
+
"When clicking Execute": {
|
|
62
|
+
"main": [
|
|
63
|
+
[
|
|
64
|
+
{
|
|
65
|
+
"node": "Publish via human browser",
|
|
66
|
+
"type": "main",
|
|
67
|
+
"index": 0
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
"Publish via human browser": {
|
|
73
|
+
"main": [
|
|
74
|
+
[
|
|
75
|
+
{
|
|
76
|
+
"node": "Telegram (optional)",
|
|
77
|
+
"type": "main",
|
|
78
|
+
"index": 0
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"settings": {
|
|
85
|
+
"executionOrder": "v1"
|
|
86
|
+
},
|
|
87
|
+
"pinData": {},
|
|
88
|
+
"meta": {
|
|
89
|
+
"templateCredsSetupCompleted": false
|
|
90
|
+
},
|
|
91
|
+
"tags": []
|
|
92
|
+
}
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Ceki: Search browser → assign backlog event",
|
|
3
|
+
"nodes": [
|
|
4
|
+
{
|
|
5
|
+
"parameters": {
|
|
6
|
+
"rule": {
|
|
7
|
+
"interval": [
|
|
8
|
+
{
|
|
9
|
+
"field": "hours",
|
|
10
|
+
"hoursInterval": 1
|
|
11
|
+
}
|
|
12
|
+
]
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"id": "schedule-1",
|
|
16
|
+
"name": "Every 1 hour",
|
|
17
|
+
"type": "n8n-nodes-base.scheduleTrigger",
|
|
18
|
+
"typeVersion": 1.2,
|
|
19
|
+
"position": [
|
|
20
|
+
240,
|
|
21
|
+
300
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"parameters": {
|
|
26
|
+
"assignments": {
|
|
27
|
+
"assignments": [
|
|
28
|
+
{
|
|
29
|
+
"id": "c1",
|
|
30
|
+
"name": "contract_id",
|
|
31
|
+
"value": 0,
|
|
32
|
+
"type": "number"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "c2",
|
|
36
|
+
"name": "agent_id",
|
|
37
|
+
"value": 0,
|
|
38
|
+
"type": "number"
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"options": {}
|
|
43
|
+
},
|
|
44
|
+
"id": "config-1",
|
|
45
|
+
"name": "Config",
|
|
46
|
+
"type": "n8n-nodes-base.set",
|
|
47
|
+
"typeVersion": 3.4,
|
|
48
|
+
"position": [
|
|
49
|
+
440,
|
|
50
|
+
300
|
|
51
|
+
],
|
|
52
|
+
"notes": "Defaults are 0 — set your own contract_id and agent_id."
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"parameters": {
|
|
56
|
+
"method": "GET",
|
|
57
|
+
"url": "https://api.ceki.me/api/browsers/search",
|
|
58
|
+
"authentication": "genericCredentialType",
|
|
59
|
+
"genericAuthType": "httpHeaderAuth",
|
|
60
|
+
"sendQuery": true,
|
|
61
|
+
"queryParameters": {
|
|
62
|
+
"parameters": [
|
|
63
|
+
{
|
|
64
|
+
"name": "limit",
|
|
65
|
+
"value": "50"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "sort",
|
|
69
|
+
"value": "price"
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
"options": {}
|
|
74
|
+
},
|
|
75
|
+
"id": "get-browsers-1",
|
|
76
|
+
"name": "Search browsers",
|
|
77
|
+
"type": "n8n-nodes-base.httpRequest",
|
|
78
|
+
"typeVersion": 4.2,
|
|
79
|
+
"position": [
|
|
80
|
+
640,
|
|
81
|
+
300
|
|
82
|
+
],
|
|
83
|
+
"credentials": {
|
|
84
|
+
"httpHeaderAuth": {
|
|
85
|
+
"name": "Ceki API"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"parameters": {
|
|
91
|
+
"jsCode": "// Join browsers with their accumulated spend (static data), pick the first under $5.\n// If none fit the budget, return [] → the next node won't run (a natural stop).\nconst sd = $getWorkflowStaticData('global');\nconst spend = sd.spend || {};\nconst input = $input.first().json;\nconst data = Array.isArray(input.data) ? input.data : [];\nconst BUDGET = 5;\nconst candidates = data.map(s => ({\n schedule_id: s.schedule_id,\n price_per_min: s.price_per_min,\n spent: spend[s.schedule_id] || 0,\n})).filter(c => c.schedule_id != null && c.spent < BUDGET);\nif (candidates.length === 0) return [];\nreturn [{ json: candidates[0] }];"
|
|
92
|
+
},
|
|
93
|
+
"id": "pick-1",
|
|
94
|
+
"name": "Pick browser (<$5)",
|
|
95
|
+
"type": "n8n-nodes-base.code",
|
|
96
|
+
"typeVersion": 2,
|
|
97
|
+
"position": [
|
|
98
|
+
840,
|
|
99
|
+
300
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"parameters": {
|
|
104
|
+
"method": "GET",
|
|
105
|
+
"url": "=https://api.ceki.me/api/agent/contract/{{ $('Config').item.json.contract_id }}/events",
|
|
106
|
+
"authentication": "genericCredentialType",
|
|
107
|
+
"genericAuthType": "httpHeaderAuth",
|
|
108
|
+
"options": {}
|
|
109
|
+
},
|
|
110
|
+
"id": "get-events-1",
|
|
111
|
+
"name": "Get backlog events",
|
|
112
|
+
"type": "n8n-nodes-base.httpRequest",
|
|
113
|
+
"typeVersion": 4.2,
|
|
114
|
+
"position": [
|
|
115
|
+
1040,
|
|
116
|
+
300
|
|
117
|
+
],
|
|
118
|
+
"credentials": {
|
|
119
|
+
"httpHeaderAuth": {
|
|
120
|
+
"name": "Ceki API"
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"parameters": {
|
|
126
|
+
"jsCode": "// tasks = events (KalEvent). backlog = status_id 100 (Pending). Pick the first one.\nconst resp = $input.first().json;\nconst events = Array.isArray(resp.data) ? resp.data : [];\nconst ev = events.find(e => e && e.status_id === 100);\nif (!ev) return []; // no backlog → the flow stops\nconst scheduleId = $('Pick browser (<$5)').first().json.schedule_id;\n// TODO: source the platform credentials.\nconst creds = 'TODO: platform credentials';\nconst base = ev.description || '';\nconst description = `${base}\\n\\n--- assigned via n8n ---\\nBrowser schedule_id: ${scheduleId}\\nCreds: ${creds}`;\nreturn [{ json: { event_id: ev.id, schedule_id: scheduleId, description } }];"
|
|
127
|
+
},
|
|
128
|
+
"id": "prepare-1",
|
|
129
|
+
"name": "Prepare patch",
|
|
130
|
+
"type": "n8n-nodes-base.code",
|
|
131
|
+
"typeVersion": 2,
|
|
132
|
+
"position": [
|
|
133
|
+
1240,
|
|
134
|
+
300
|
|
135
|
+
]
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"parameters": {
|
|
139
|
+
"method": "PATCH",
|
|
140
|
+
"url": "=https://api.ceki.me/api/agent/kal/event/{{ $('Prepare patch').item.json.event_id }}",
|
|
141
|
+
"authentication": "genericCredentialType",
|
|
142
|
+
"genericAuthType": "httpHeaderAuth",
|
|
143
|
+
"sendBody": true,
|
|
144
|
+
"contentType": "json",
|
|
145
|
+
"specifyBody": "keypair",
|
|
146
|
+
"bodyParameters": {
|
|
147
|
+
"parameters": [
|
|
148
|
+
{
|
|
149
|
+
"name": "description",
|
|
150
|
+
"value": "={{ $('Prepare patch').item.json.description }}"
|
|
151
|
+
}
|
|
152
|
+
]
|
|
153
|
+
},
|
|
154
|
+
"options": {}
|
|
155
|
+
},
|
|
156
|
+
"id": "patch-desc-1",
|
|
157
|
+
"name": "Patch description",
|
|
158
|
+
"type": "n8n-nodes-base.httpRequest",
|
|
159
|
+
"typeVersion": 4.2,
|
|
160
|
+
"position": [
|
|
161
|
+
1440,
|
|
162
|
+
300
|
|
163
|
+
],
|
|
164
|
+
"credentials": {
|
|
165
|
+
"httpHeaderAuth": {
|
|
166
|
+
"name": "Ceki API"
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"parameters": {
|
|
172
|
+
"method": "PATCH",
|
|
173
|
+
"url": "=https://api.ceki.me/api/agent/kal/event/{{ $('Prepare patch').item.json.event_id }}",
|
|
174
|
+
"authentication": "genericCredentialType",
|
|
175
|
+
"genericAuthType": "httpHeaderAuth",
|
|
176
|
+
"sendBody": true,
|
|
177
|
+
"contentType": "json",
|
|
178
|
+
"specifyBody": "json",
|
|
179
|
+
"jsonBody": "={\n \"benefitable\": { \"type\": \"agent\", \"value\": {{ $('Config').item.json.agent_id }} }\n}",
|
|
180
|
+
"options": {}
|
|
181
|
+
},
|
|
182
|
+
"id": "assign-1",
|
|
183
|
+
"name": "Assign agent (benefitable)",
|
|
184
|
+
"type": "n8n-nodes-base.httpRequest",
|
|
185
|
+
"typeVersion": 4.2,
|
|
186
|
+
"position": [
|
|
187
|
+
1640,
|
|
188
|
+
300
|
|
189
|
+
],
|
|
190
|
+
"credentials": {
|
|
191
|
+
"httpHeaderAuth": {
|
|
192
|
+
"name": "Ceki API"
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"parameters": {
|
|
198
|
+
"method": "PATCH",
|
|
199
|
+
"url": "=https://api.ceki.me/api/agent/kal/event/{{ $('Prepare patch').item.json.event_id }}",
|
|
200
|
+
"authentication": "genericCredentialType",
|
|
201
|
+
"genericAuthType": "httpHeaderAuth",
|
|
202
|
+
"sendBody": true,
|
|
203
|
+
"contentType": "json",
|
|
204
|
+
"specifyBody": "keypair",
|
|
205
|
+
"bodyParameters": {
|
|
206
|
+
"parameters": [
|
|
207
|
+
{
|
|
208
|
+
"name": "status_id",
|
|
209
|
+
"value": 200
|
|
210
|
+
}
|
|
211
|
+
]
|
|
212
|
+
},
|
|
213
|
+
"options": {}
|
|
214
|
+
},
|
|
215
|
+
"id": "patch-status-1",
|
|
216
|
+
"name": "Set status 200",
|
|
217
|
+
"type": "n8n-nodes-base.httpRequest",
|
|
218
|
+
"typeVersion": 4.2,
|
|
219
|
+
"position": [
|
|
220
|
+
1840,
|
|
221
|
+
300
|
|
222
|
+
],
|
|
223
|
+
"credentials": {
|
|
224
|
+
"httpHeaderAuth": {
|
|
225
|
+
"name": "Ceki API"
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
],
|
|
230
|
+
"connections": {
|
|
231
|
+
"Every 1 hour": {
|
|
232
|
+
"main": [
|
|
233
|
+
[
|
|
234
|
+
{
|
|
235
|
+
"node": "Config",
|
|
236
|
+
"type": "main",
|
|
237
|
+
"index": 0
|
|
238
|
+
}
|
|
239
|
+
]
|
|
240
|
+
]
|
|
241
|
+
},
|
|
242
|
+
"Config": {
|
|
243
|
+
"main": [
|
|
244
|
+
[
|
|
245
|
+
{
|
|
246
|
+
"node": "Search browsers",
|
|
247
|
+
"type": "main",
|
|
248
|
+
"index": 0
|
|
249
|
+
}
|
|
250
|
+
]
|
|
251
|
+
]
|
|
252
|
+
},
|
|
253
|
+
"Search browsers": {
|
|
254
|
+
"main": [
|
|
255
|
+
[
|
|
256
|
+
{
|
|
257
|
+
"node": "Pick browser (<$5)",
|
|
258
|
+
"type": "main",
|
|
259
|
+
"index": 0
|
|
260
|
+
}
|
|
261
|
+
]
|
|
262
|
+
]
|
|
263
|
+
},
|
|
264
|
+
"Pick browser (<$5)": {
|
|
265
|
+
"main": [
|
|
266
|
+
[
|
|
267
|
+
{
|
|
268
|
+
"node": "Get backlog events",
|
|
269
|
+
"type": "main",
|
|
270
|
+
"index": 0
|
|
271
|
+
}
|
|
272
|
+
]
|
|
273
|
+
]
|
|
274
|
+
},
|
|
275
|
+
"Get backlog events": {
|
|
276
|
+
"main": [
|
|
277
|
+
[
|
|
278
|
+
{
|
|
279
|
+
"node": "Prepare patch",
|
|
280
|
+
"type": "main",
|
|
281
|
+
"index": 0
|
|
282
|
+
}
|
|
283
|
+
]
|
|
284
|
+
]
|
|
285
|
+
},
|
|
286
|
+
"Prepare patch": {
|
|
287
|
+
"main": [
|
|
288
|
+
[
|
|
289
|
+
{
|
|
290
|
+
"node": "Patch description",
|
|
291
|
+
"type": "main",
|
|
292
|
+
"index": 0
|
|
293
|
+
}
|
|
294
|
+
]
|
|
295
|
+
]
|
|
296
|
+
},
|
|
297
|
+
"Patch description": {
|
|
298
|
+
"main": [
|
|
299
|
+
[
|
|
300
|
+
{
|
|
301
|
+
"node": "Assign agent (benefitable)",
|
|
302
|
+
"type": "main",
|
|
303
|
+
"index": 0
|
|
304
|
+
}
|
|
305
|
+
]
|
|
306
|
+
]
|
|
307
|
+
},
|
|
308
|
+
"Assign agent (benefitable)": {
|
|
309
|
+
"main": [
|
|
310
|
+
[
|
|
311
|
+
{
|
|
312
|
+
"node": "Set status 200",
|
|
313
|
+
"type": "main",
|
|
314
|
+
"index": 0
|
|
315
|
+
}
|
|
316
|
+
]
|
|
317
|
+
]
|
|
318
|
+
}
|
|
319
|
+
},
|
|
320
|
+
"active": false,
|
|
321
|
+
"settings": {
|
|
322
|
+
"executionOrder": "v1"
|
|
323
|
+
},
|
|
324
|
+
"pinData": {},
|
|
325
|
+
"meta": {
|
|
326
|
+
"templateCredsSetupCompleted": false
|
|
327
|
+
}
|
|
328
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "67e2a19a-c90d-428a-bd5c-19e9eac4f1a1",
|
|
3
|
+
"name": "Ceki: Telegram -> Screenshot",
|
|
4
|
+
"active": false,
|
|
5
|
+
"nodes": [
|
|
6
|
+
{
|
|
7
|
+
"parameters": {
|
|
8
|
+
"updates": [
|
|
9
|
+
"message"
|
|
10
|
+
]
|
|
11
|
+
},
|
|
12
|
+
"id": "9b1c0a80-0001-4000-8000-000000000001",
|
|
13
|
+
"name": "Telegram Trigger",
|
|
14
|
+
"type": "n8n-nodes-base.telegramTrigger",
|
|
15
|
+
"typeVersion": 1.1,
|
|
16
|
+
"position": [
|
|
17
|
+
0,
|
|
18
|
+
0
|
|
19
|
+
],
|
|
20
|
+
"webhookId": "9b1c0a80-0001-4000-8000-0000000000aa"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"parameters": {
|
|
24
|
+
"assignments": {
|
|
25
|
+
"assignments": [
|
|
26
|
+
{
|
|
27
|
+
"id": "a1",
|
|
28
|
+
"name": "url",
|
|
29
|
+
"value": "={{ $json.message.text.trim() }}",
|
|
30
|
+
"type": "string"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "a2",
|
|
34
|
+
"name": "geo",
|
|
35
|
+
"value": "RU",
|
|
36
|
+
"type": "string"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "a3",
|
|
40
|
+
"name": "chatId",
|
|
41
|
+
"value": "={{ $json.message.chat.id }}",
|
|
42
|
+
"type": "string"
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
"options": {}
|
|
47
|
+
},
|
|
48
|
+
"id": "9b1c0a80-0001-4000-8000-000000000002",
|
|
49
|
+
"name": "Extract URL",
|
|
50
|
+
"type": "n8n-nodes-base.set",
|
|
51
|
+
"typeVersion": 3.4,
|
|
52
|
+
"position": [
|
|
53
|
+
220,
|
|
54
|
+
0
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"parameters": {
|
|
59
|
+
"url": "={{ $json.url }}",
|
|
60
|
+
"geo": "={{ $json.geo || 'RU' }}",
|
|
61
|
+
"fullPage": false,
|
|
62
|
+
"maxPrice": 0.02
|
|
63
|
+
},
|
|
64
|
+
"id": "9b1c0a80-0001-4000-8000-000000000003",
|
|
65
|
+
"name": "Screenshot in Geo",
|
|
66
|
+
"type": "cekiScreenshotGeo",
|
|
67
|
+
"typeVersion": 1,
|
|
68
|
+
"position": [
|
|
69
|
+
440,
|
|
70
|
+
0
|
|
71
|
+
],
|
|
72
|
+
"credentials": {
|
|
73
|
+
"cekiApi": {
|
|
74
|
+
"name": "Ceki API"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"parameters": {
|
|
80
|
+
"operation": "sendPhoto",
|
|
81
|
+
"chatId": "={{ $('Extract URL').item.json.chatId }}",
|
|
82
|
+
"file": "data",
|
|
83
|
+
"additionalFields": {
|
|
84
|
+
"caption": "=📸 {{ $('Extract URL').item.json.url }}"
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"id": "9b1c0a80-0001-4000-8000-000000000004",
|
|
88
|
+
"name": "Reply Photo",
|
|
89
|
+
"type": "n8n-nodes-base.telegram",
|
|
90
|
+
"typeVersion": 1.2,
|
|
91
|
+
"position": [
|
|
92
|
+
660,
|
|
93
|
+
0
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
"connections": {
|
|
98
|
+
"Telegram Trigger": {
|
|
99
|
+
"main": [
|
|
100
|
+
[
|
|
101
|
+
{
|
|
102
|
+
"node": "Extract URL",
|
|
103
|
+
"type": "main",
|
|
104
|
+
"index": 0
|
|
105
|
+
}
|
|
106
|
+
]
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
"Extract URL": {
|
|
110
|
+
"main": [
|
|
111
|
+
[
|
|
112
|
+
{
|
|
113
|
+
"node": "Screenshot in Geo",
|
|
114
|
+
"type": "main",
|
|
115
|
+
"index": 0
|
|
116
|
+
}
|
|
117
|
+
]
|
|
118
|
+
]
|
|
119
|
+
},
|
|
120
|
+
"Screenshot in Geo": {
|
|
121
|
+
"main": [
|
|
122
|
+
[
|
|
123
|
+
{
|
|
124
|
+
"node": "Reply Photo",
|
|
125
|
+
"type": "main",
|
|
126
|
+
"index": 0
|
|
127
|
+
}
|
|
128
|
+
]
|
|
129
|
+
]
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
"settings": {
|
|
133
|
+
"executionOrder": "v1"
|
|
134
|
+
},
|
|
135
|
+
"pinData": {},
|
|
136
|
+
"meta": {
|
|
137
|
+
"templateCredsSetupCompleted": false
|
|
138
|
+
},
|
|
139
|
+
"tags": []
|
|
140
|
+
}
|