@funnelchat-hq/n8n-nodes-funnelchat 0.1.1 → 0.2.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/README.md +209 -104
- package/dist/nodes/Funnelchat/Funnelchat.node.js +1 -1
- package/dist/nodes/Funnelchat/Funnelchat.node.js.map +1 -1
- package/dist/nodes/Funnelchat/generated/operations.js +907 -248
- package/dist/nodes/Funnelchat/generated/operations.js.map +1 -1
- package/dist/nodes/Funnelchat/operationTypes.d.ts +1 -0
- package/dist/nodes/FunnelchatTrigger/FunnelchatTrigger.node.d.ts +1 -0
- package/dist/nodes/FunnelchatTrigger/FunnelchatTrigger.node.js +17 -2
- package/dist/nodes/FunnelchatTrigger/FunnelchatTrigger.node.js.map +1 -1
- package/dist/nodes/FunnelchatTrigger/generated/events.js +38 -3
- package/dist/nodes/FunnelchatTrigger/generated/events.js.map +1 -1
- package/dist/package.json +2 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,31 +1,120 @@
|
|
|
1
1
|
# @funnelchat-hq/n8n-nodes-funnelchat
|
|
2
2
|
|
|
3
|
-
[n8n](https://n8n.io) community node for the Funnelchat public API
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
3
|
+
[n8n](https://n8n.io) community node for the Funnelchat public API: connect your WhatsApp numbers, send messages and
|
|
4
|
+
know when they are read, receive messages and work with your groups, from your workflows and without code.
|
|
5
|
+
|
|
6
|
+
## First use
|
|
7
|
+
|
|
8
|
+
1. **Install the node.** In n8n, **Settings → Community nodes → Install** and type
|
|
9
|
+
`@funnelchat-hq/n8n-nodes-funnelchat` (other ways in [Installation](#installation)).
|
|
10
|
+
2. **Create your key.** In the Funnelchat panel, **Developers → Create key**. It is shown **only once**: copy it then.
|
|
11
|
+
If you also use it from code, keep it in the `FUNNELCHAT_API_KEY` environment variable, never in the code.
|
|
12
|
+
3. **Add the credential.** In n8n, create a **Funnelchat API** credential: paste the key in **API Key** and leave
|
|
13
|
+
**Environment** on **Production**. n8n keeps it encrypted.
|
|
14
|
+
4. **Connect a number.** Skip it if you already have one: **Funnelchat → Numbers → List numbers** gives its `id`.
|
|
15
|
+
Otherwise, a **Funnelchat** node with **Numbers → Create a connect link**, **Type** `qr`. Run it and open the `url`
|
|
16
|
+
of the result: the page shows a QR code. Scan it with WhatsApp on your phone (**Linked devices**). The number's `id`
|
|
17
|
+
is then in **List numbers**, and in **Get a connect link** (`device_id`).
|
|
18
|
+
5. **Send a message and know when it was read**: a workflow with two nodes.
|
|
19
|
+
- **Funnelchat**: **Conversations and Messages → Send a message**. **Number ID**: your number's `id`. **Contact
|
|
20
|
+
ID**: the contact (no contact yet? **Contacts → Create a contact** with their phone, and use its `id`).
|
|
21
|
+
**Additional Fields**: **Text** `Hello!` and **Client Reference** `order-981`.
|
|
22
|
+
- **Funnelchat Trigger**: **Event Names or IDs**: Message status changed (`message.status_changed`).
|
|
23
|
+
|
|
24
|
+
Activate the workflow (that subscribes the trigger) and click **Execute step** on the **Funnelchat** node. The send
|
|
25
|
+
answers at once with the message in `status: "queued"`. Then the trigger starts once per status, `sent`,
|
|
26
|
+
`delivered` and `read` (or `failed`, with its `error`), with your `client_reference` and your workspace:
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"id": "evt_000000000000000000000002",
|
|
31
|
+
"type": "message.status_changed",
|
|
32
|
+
"version": 1,
|
|
33
|
+
"occurred_at": "2026-11-04T12:00:05Z",
|
|
34
|
+
"data": {
|
|
35
|
+
"message_id": 1001,
|
|
36
|
+
"contact_id": 2001,
|
|
37
|
+
"device_id": 4,
|
|
38
|
+
"status": "read",
|
|
39
|
+
"previous_status": "delivered",
|
|
40
|
+
"error": null,
|
|
41
|
+
"occurred_at": "2026-11-04T12:00:05Z",
|
|
42
|
+
"client_reference": "order-981",
|
|
43
|
+
"workspace_id": 37
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
```
|
|
22
47
|
|
|
23
|
-
|
|
48
|
+
The trigger needs n8n reachable from the internet over `https` (in self-hosted n8n, `WEBHOOK_URL`): see
|
|
49
|
+
[What you need](#what-you-need).
|
|
50
|
+
|
|
51
|
+
<details><summary>The same two nodes, to paste on the canvas (then choose your credential in both)</summary>
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"nodes": [
|
|
56
|
+
{
|
|
57
|
+
"name": "Send a message",
|
|
58
|
+
"type": "@funnelchat-hq/n8n-nodes-funnelchat.funnelchat",
|
|
59
|
+
"typeVersion": 1,
|
|
60
|
+
"position": [0, 0],
|
|
61
|
+
"parameters": {
|
|
62
|
+
"resource": "conversation",
|
|
63
|
+
"operation": "message.sendMessage",
|
|
64
|
+
"device_id": "4",
|
|
65
|
+
"contact_id": "2001",
|
|
66
|
+
"additionalFields": { "text": "Hello!", "client_reference": "order-981" }
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"name": "When its status changes",
|
|
71
|
+
"type": "@funnelchat-hq/n8n-nodes-funnelchat.funnelchatTrigger",
|
|
72
|
+
"typeVersion": 1,
|
|
73
|
+
"position": [0, 240],
|
|
74
|
+
"parameters": { "events": ["message.status_changed"] }
|
|
75
|
+
}
|
|
76
|
+
],
|
|
77
|
+
"connections": {}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
</details>
|
|
82
|
+
|
|
83
|
+
**What the key needs** for all of this: `accounts:read` (list numbers, and the credential test), `accounts:operate`
|
|
84
|
+
(connect a number), `conversations:write` (create a contact), `conversations:send` (send),
|
|
85
|
+
`conversations:read`, `webhooks:read` and `webhooks:write` (the trigger on message events). A key with full access
|
|
86
|
+
has them all.
|
|
87
|
+
|
|
88
|
+
### Receive messages
|
|
89
|
+
|
|
90
|
+
**Funnelchat Trigger** with **Message received** (`message.received`). Each message brings `data.message` (`id`,
|
|
91
|
+
`type`, `text`, `media`), `data.contact` (`id`, `name`, `phone`), `data.device_id` and `data.workspace_id`. To answer
|
|
92
|
+
it, see [Receive a message and reply](#receive-a-message-and-reply). Your numbers tell you when they connect or
|
|
93
|
+
disconnect with **Number connected** (`device.connected`) and **Number disconnected** (`device.disconnected`, with its
|
|
94
|
+
`reason`).
|
|
95
|
+
|
|
96
|
+
### Groups
|
|
24
97
|
|
|
25
|
-
|
|
98
|
+
- **Groups → List groups**: your groups, with the `uid` the other operations use.
|
|
99
|
+
- **Groups → Send a message to a group**: **Group UID**, **Number ID** (connected, and an admin of the group if it is a
|
|
100
|
+
QR number), **Type** `text` and **Additional Fields → Text**. It answers at once with an `action_id`; **Groups → Get
|
|
101
|
+
a group action** says how it went, and so do the `group_action.completed` and `group_action.failed` events. The key
|
|
102
|
+
needs `communities:send` (and `communities:read` to list).
|
|
103
|
+
- **Funnelchat Trigger** with **Participant joined** (`group_participant.joined`) and **Participant left**
|
|
104
|
+
(`group_participant.left`), with `communities:read`.
|
|
105
|
+
|
|
106
|
+
### Workspaces
|
|
107
|
+
|
|
108
|
+
Each API key sees and operates only the workspace where it was created: numbers, contacts, groups and webhook
|
|
109
|
+
subscriptions of other workspaces do not show up, as if they did not exist. The trigger's subscription belongs to the
|
|
110
|
+
key's workspace and receives only its events, and every event says which one in `data.workspace_id`. One integration
|
|
111
|
+
per workspace: one key, and one credential, for each.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Reference
|
|
26
116
|
|
|
27
117
|
- [Installation](#installation)
|
|
28
|
-
- [Minimal example](#minimal-example)
|
|
29
118
|
- [Credential](#credential)
|
|
30
119
|
- [The Funnelchat node](#the-funnelchat-node)
|
|
31
120
|
- [The Funnelchat Trigger](#the-funnelchat-trigger)
|
|
@@ -35,6 +124,13 @@ API documentation: [Funnelchat developer portal](https://developers-portal.funne
|
|
|
35
124
|
- [Development](#development)
|
|
36
125
|
- [Sources and what is left to verify](#sources-and-what-is-left-to-verify)
|
|
37
126
|
|
|
127
|
+
API documentation: [Funnelchat developer portal](https://developers-portal.funnelchat.app/docs/).
|
|
128
|
+
|
|
129
|
+
The package has three parts: the **Funnelchat API** credential (your key and the environment: production, staging or
|
|
130
|
+
a URL of your own, such as the sandbox); the **Funnelchat** node, with the API operations grouped as in the portal,
|
|
131
|
+
generated from its unified specification and from what the domains opened later; and the **Funnelchat Trigger**, which
|
|
132
|
+
starts a workflow with each event Funnelchat sends by webhook, with its signature verified.
|
|
133
|
+
|
|
38
134
|
## Installation
|
|
39
135
|
|
|
40
136
|
### From n8n (community nodes)
|
|
@@ -63,39 +159,10 @@ git clone https://github.com/Funnelchat20/n8n-nodes-funnelchat.git
|
|
|
63
159
|
cd n8n-nodes-funnelchat
|
|
64
160
|
npm ci
|
|
65
161
|
npm run build
|
|
66
|
-
npm pack # creates funnelchat-hq-n8n-nodes-funnelchat-0.
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
Then, in n8n's nodes folder, `npm install /path/to/funnelchat-hq-n8n-nodes-funnelchat-0.1.1.tgz`.
|
|
70
|
-
|
|
71
|
-
## Minimal example
|
|
72
|
-
|
|
73
|
-
A workflow that sends a message to a contact and keeps the message ID:
|
|
74
|
-
|
|
75
|
-
1. Create the **Funnelchat API** credential with your key (see [Credential](#credential)).
|
|
76
|
-
2. Add the **Funnelchat** node — resource "Conversations and Messages", operation "Send a message to a contact":
|
|
77
|
-
- Contact ID (in the route and in the body): `2001`
|
|
78
|
-
- Number ID: the ID of the number that sends, from "Numbers → List numbers".
|
|
79
|
-
- Additional Fields → Phone: the contact's, `5491100000000`; Text: `Hello`; Client Reference: `order-981`.
|
|
80
|
-
3. Run it. You get one item with the queued message:
|
|
81
|
-
|
|
82
|
-
```json
|
|
83
|
-
{
|
|
84
|
-
"id": 1001,
|
|
85
|
-
"contact_id": 2001,
|
|
86
|
-
"device_id": 7,
|
|
87
|
-
"direction": "outbound",
|
|
88
|
-
"type": "text",
|
|
89
|
-
"status": "queued",
|
|
90
|
-
"error": null,
|
|
91
|
-
"client_reference": "order-981",
|
|
92
|
-
"created_at": "2026-10-22T13:05:00Z",
|
|
93
|
-
"updated_at": "2026-10-22T13:05:00Z"
|
|
94
|
-
}
|
|
162
|
+
npm pack # creates funnelchat-hq-n8n-nodes-funnelchat-0.2.0.tgz
|
|
95
163
|
```
|
|
96
164
|
|
|
97
|
-
|
|
98
|
-
`message.status_changed` event, which carries your `client_reference`, or by reading the message with "Get a message".
|
|
165
|
+
Then, in n8n's nodes folder, `npm install /path/to/funnelchat-hq-n8n-nodes-funnelchat-0.2.0.tgz`.
|
|
99
166
|
|
|
100
167
|
## Credential
|
|
101
168
|
|
|
@@ -157,7 +224,7 @@ The node can also be used as a tool of an n8n AI agent.
|
|
|
157
224
|
|
|
158
225
|
<!-- operations:start (generated by npm run generate) -->
|
|
159
226
|
|
|
160
|
-
|
|
227
|
+
139 operations generated from the specification (sha256 `0f451feaba59`) and its supplements. The ones marked ⚠ show a notice in the node (what the code requires and the specification does not say, a route closed to keys, or an irreversible operation).
|
|
161
228
|
|
|
162
229
|
<details><summary><strong>Contacts</strong> (15)</summary>
|
|
163
230
|
|
|
@@ -181,7 +248,7 @@ The node can also be used as a tool of an n8n AI agent.
|
|
|
181
248
|
|
|
182
249
|
</details>
|
|
183
250
|
|
|
184
|
-
<details><summary><strong>Conversations and Messages</strong> (
|
|
251
|
+
<details><summary><strong>Conversations and Messages</strong> (20)</summary>
|
|
185
252
|
|
|
186
253
|
| Operation | Route | Permission |
|
|
187
254
|
|---|---|---|
|
|
@@ -196,17 +263,19 @@ The node can also be used as a tool of an n8n AI agent.
|
|
|
196
263
|
| Send a message to a contact ⚠ | `POST /api/v1/contacts/{contact}/message` | `conversations:send` |
|
|
197
264
|
| List a contact's messages "return all" | `GET /api/v1/contacts/{contactId}/messages` | `conversations:read` |
|
|
198
265
|
| Send a message ⚠ | `POST /api/v1/message/send-message` | `conversations:send` |
|
|
199
|
-
| Get a message | `GET /api/v1/contacts/{contact}/messages/{message}` | `conversations:read` |
|
|
200
266
|
| React to a message ⚠ | `PUT /api/v1/contacts/{contact}/messages/{message}/reaction` | `conversations:send` |
|
|
201
267
|
| Remove a reaction ⚠ | `DELETE /api/v1/contacts/{contact}/messages/{message}/reaction` | `conversations:send` |
|
|
202
268
|
| Forward a message ⚠ | `POST /api/v1/contacts/{contact}/messages/{message}/forward` | `conversations:send` |
|
|
203
269
|
| Send a poll ⚠ | `POST /api/v1/contacts/{contact}/message/poll` | `conversations:send` |
|
|
204
270
|
| Send an event invitation ⚠ | `POST /api/v1/contacts/{contact}/message/event` | `conversations:send` |
|
|
205
271
|
| Send a contact card ⚠ | `POST /api/v1/contacts/{contact}/message/contact-card` | `conversations:send` |
|
|
272
|
+
| Get a message | `GET /api/v1/contacts/{contact}/messages/{message}` | `conversations:read` |
|
|
273
|
+
| Mark a message as read | `POST /api/v1/contacts/{contact}/messages/{message}/read` | `conversations:send` |
|
|
274
|
+
| Show "typing…" to a contact | `POST /api/v1/contacts/{contact}/typing` | `conversations:send` |
|
|
206
275
|
|
|
207
276
|
</details>
|
|
208
277
|
|
|
209
|
-
<details><summary><strong>Templates</strong> (
|
|
278
|
+
<details><summary><strong>Templates</strong> (8)</summary>
|
|
210
279
|
|
|
211
280
|
| Operation | Route | Permission |
|
|
212
281
|
|---|---|---|
|
|
@@ -217,6 +286,7 @@ The node can also be used as a tool of an n8n AI agent.
|
|
|
217
286
|
| Get a template's quick reply buttons | `GET /api/v1/templates/{template}/quick-reply-buttons` | `conversations:read` |
|
|
218
287
|
| Send a template ⚠ | `POST /api/v1/devices/{device}/templates/{template}/send-template` | `conversations:send` |
|
|
219
288
|
| Delete a template from a number | `DELETE /api/v1/devices/{device}/templates/{template}` | `conversations:write` |
|
|
289
|
+
| Get a template's metrics | `GET /api/v1/templates/{template}/metrics` | `conversations:read` |
|
|
220
290
|
|
|
221
291
|
</details>
|
|
222
292
|
|
|
@@ -271,7 +341,7 @@ The node can also be used as a tool of an n8n AI agent.
|
|
|
271
341
|
|
|
272
342
|
</details>
|
|
273
343
|
|
|
274
|
-
<details><summary><strong>Groups</strong> (
|
|
344
|
+
<details><summary><strong>Groups</strong> (16)</summary>
|
|
275
345
|
|
|
276
346
|
| Operation | Route | Permission |
|
|
277
347
|
|---|---|---|
|
|
@@ -284,6 +354,8 @@ The node can also be used as a tool of an n8n AI agent.
|
|
|
284
354
|
| List the session actions on a group "return all" | `GET /api/v1/groups/{group}/actions` | `communities:read` |
|
|
285
355
|
| List the messages sent to a group "return all" | `GET /api/v1/groups/{group}/messages` | `communities:read` |
|
|
286
356
|
| List the scheduled sends that include a group "return all" | `GET /api/v1/groups/{group}/scheduled-messages` | `communities:read` |
|
|
357
|
+
| Send a message to a group ⚠ | `POST /api/v1/groups/{group}/messages` | `communities:send` |
|
|
358
|
+
| Get a group action ⚠ | `GET /api/v1/groups/actions/{action}` | `communities:read` |
|
|
287
359
|
| List a campaign's participants "return all" | `GET /api/v1/campaigns/{campaign}/participants` | `communities:read` |
|
|
288
360
|
| List participants with their current group "return all" | `GET /api/v1/campaigns/{campaign}/campaign-participants` | `communities:read` |
|
|
289
361
|
| List a campaign's joins and leaves "return all" | `GET /api/v1/campaigns/{campaign}/participant-events` | `communities:read` |
|
|
@@ -292,7 +364,7 @@ The node can also be used as a tool of an n8n AI agent.
|
|
|
292
364
|
|
|
293
365
|
</details>
|
|
294
366
|
|
|
295
|
-
<details><summary><strong>Numbers</strong> (
|
|
367
|
+
<details><summary><strong>Numbers</strong> (35)</summary>
|
|
296
368
|
|
|
297
369
|
| Operation | Route | Permission |
|
|
298
370
|
|---|---|---|
|
|
@@ -314,6 +386,12 @@ The node can also be used as a tool of an n8n AI agent.
|
|
|
314
386
|
| Empty the message queue ⚠ | `DELETE /api/v1/devices/{device}/message-queue/all` | `accounts:operate` |
|
|
315
387
|
| Get the connection status | `GET /api/v1/devices/{device}/status` | `accounts:read` |
|
|
316
388
|
| Get a token for the WhatsApp Web extension | `POST /api/v1/devices/{device}/extension-token` | `accounts:write` |
|
|
389
|
+
| Create a number to connect by QR ⚠ | `POST /api/v1/devices` | `accounts:operate` |
|
|
390
|
+
| Get a number's QR code ⚠ | `GET /api/v1/devices/{device}/qr` | `accounts:operate` |
|
|
391
|
+
| List connect links "return all" | `GET /api/v1/connect-links` | `accounts:read` |
|
|
392
|
+
| Create a connect link ⚠ | `POST /api/v1/connect-links` | `accounts:operate` |
|
|
393
|
+
| Get a connect link ⚠ | `GET /api/v1/connect-links/{link}` | `accounts:read` |
|
|
394
|
+
| Revoke a connect link ⚠ | `DELETE /api/v1/connect-links/{link}` | `accounts:operate` |
|
|
317
395
|
| Get a number's health | `GET /api/v1/devices/{device}/health` | `accounts:read` |
|
|
318
396
|
| Refresh a number's health | `POST /api/v1/devices/{device}/health/refresh` | `accounts:write` |
|
|
319
397
|
| Get the connection history "return all" | `GET /api/v1/devices/{device}/connection-history` | `accounts:read` |
|
|
@@ -332,13 +410,11 @@ The node can also be used as a tool of an n8n AI agent.
|
|
|
332
410
|
|
|
333
411
|
| Operation | Route | Permission |
|
|
334
412
|
|---|---|---|
|
|
335
|
-
| List webhook subscriptions ⚠ | `GET /api/v1/webhooks` | `webhooks:read` |
|
|
413
|
+
| List webhook subscriptions ⚠ "return all" | `GET /api/v1/webhooks` | `webhooks:read` |
|
|
336
414
|
| Create a webhook subscription ⚠ | `POST /api/v1/webhooks` | `webhooks:write` |
|
|
337
415
|
| Get a webhook subscription ⚠ | `GET /api/v1/webhooks/{id}` | `webhooks:read` |
|
|
338
416
|
| Update a webhook subscription ⚠ | `PUT /api/v1/webhooks/{id}` | `webhooks:write` |
|
|
339
417
|
| Delete a webhook subscription ⚠ | `DELETE /api/v1/webhooks/{id}` | `webhooks:write` |
|
|
340
|
-
| List a subscription's deliveries ⚠ "return all" | `GET /api/v1/webhooks/{id}/deliveries` | `webhooks:read` |
|
|
341
|
-
| Send a test event ⚠ | `POST /api/v1/webhooks/{id}/test` | `webhooks:write` |
|
|
342
418
|
| List event types | `GET /api/v1/webhooks/events` | `accounts:read` |
|
|
343
419
|
| List webhooks "return all" | `GET /api/v1/webhooks/endpoints` | `accounts:read` |
|
|
344
420
|
| Create a webhook | `POST /api/v1/webhooks/endpoints` | `accounts:write` |
|
|
@@ -347,6 +423,8 @@ The node can also be used as a tool of an n8n AI agent.
|
|
|
347
423
|
| Delete a webhook | `DELETE /api/v1/webhooks/endpoints/{id}` | `accounts:write` |
|
|
348
424
|
| Choose a webhook's events | `PUT /api/v1/webhooks/endpoints/{id}/events` | `accounts:write` |
|
|
349
425
|
| List a webhook's deliveries "return all" | `GET /api/v1/webhooks/endpoints/{id}/deliveries` | `accounts:read` |
|
|
426
|
+
| List a subscription's deliveries ⚠ "return all" | `GET /api/v1/webhooks/{id}/deliveries` | `webhooks:read` |
|
|
427
|
+
| Send a test event ⚠ | `POST /api/v1/webhooks/{id}/test` | `webhooks:write` |
|
|
350
428
|
|
|
351
429
|
</details>
|
|
352
430
|
|
|
@@ -359,9 +437,15 @@ The node can also be used as a tool of an n8n AI agent.
|
|
|
359
437
|
1. You choose the **Events** from the list. The list comes from Funnelchat's catalog (`GET /api/v1/webhooks/events`):
|
|
360
438
|
it shows the types that can be subscribed to, the read permission each one needs, and marks the ones that are not
|
|
361
439
|
emitted yet (`planned`). If the key cannot read the catalog (it needs `accounts:read`), it shows the list built into
|
|
362
|
-
the node, copied from the catalog of accounts `v1.
|
|
363
|
-
`message.status_changed`, `
|
|
364
|
-
`group.
|
|
440
|
+
the node, copied from the catalog of accounts `v1.5.97`: 58 types, among them the six of the first use
|
|
441
|
+
(`message.status_changed`, `message.received`, `device.connected`, `device.disconnected`,
|
|
442
|
+
`group_participant.joined` and `group_participant.left`), `whatsapp_form.completed`, `group.message_received` and
|
|
443
|
+
`group_action.completed`.
|
|
444
|
+
|
|
445
|
+
Events go **by name**, always: Funnelchat does not take `*`, and `message.status_changed` (the busiest one) is
|
|
446
|
+
never included by a wildcard. A list with `*`, or an empty one, stops the activation with an error before calling
|
|
447
|
+
the API. From an expression, the events may come as a list or as text separated by commas.
|
|
448
|
+
|
|
365
449
|
2. When the workflow is **activated**, the node creates a subscription in Funnelchat (`POST /api/v1/webhooks`) with
|
|
366
450
|
n8n's URL, those events and the description `n8n · <workflow name>`, and keeps the `id` and the secret Funnelchat
|
|
367
451
|
returns only once.
|
|
@@ -387,7 +471,8 @@ events of those campaigns (`filters.campaign_ids`; with a filter, an event witho
|
|
|
387
471
|
- **A key of the account owner**, with `webhooks:read` and `webhooks:write` and the read permission of the area of each
|
|
388
472
|
event you choose (for example, `conversations:read` for `message.received`, `communities:read` for the group events).
|
|
389
473
|
Without the one of an area, creating the subscription answers `422` on `events`.
|
|
390
|
-
- **Room in the
|
|
474
|
+
- **Room in the workspace:** there is a cap of 50 subscriptions per workspace. The subscription belongs to the
|
|
475
|
+
workspace of the key and receives only that workspace's events.
|
|
391
476
|
|
|
392
477
|
### What reaches the workflow
|
|
393
478
|
|
|
@@ -408,12 +493,14 @@ One item per delivery, with the event envelope as Funnelchat sends it:
|
|
|
408
493
|
},
|
|
409
494
|
"contact": { "id": 2001, "name": "Sample contact", "phone": "+5491100000000" },
|
|
410
495
|
"receiver": { "phone": "+5491100000001" },
|
|
411
|
-
"device_id": 4521
|
|
496
|
+
"device_id": 4521,
|
|
497
|
+
"workspace_id": 37
|
|
412
498
|
}
|
|
413
499
|
}
|
|
414
500
|
```
|
|
415
501
|
|
|
416
|
-
|
|
502
|
+
Every event carries `data.workspace_id`: the workspace it belongs to, which is the one of your key (accounts
|
|
503
|
+
`v1.5.97`). Delivery is "at least once": the same event may arrive twice with the same `id`. If your workflow does not tolerate
|
|
417
504
|
duplicates, keep the processed `id`s and drop the ones you have already seen. The format of each type is in the
|
|
418
505
|
portal's event catalog.
|
|
419
506
|
|
|
@@ -484,10 +571,12 @@ its README. By default it listens on `http://localhost:4010`.
|
|
|
484
571
|
|
|
485
572
|
The credential test calls the sandbox's `GET /api/v1/me`.
|
|
486
573
|
|
|
487
|
-
3. **Actions.**
|
|
488
|
-
|
|
489
|
-
built from the specification. Sending with an API key is open in the sandbox, with the API's
|
|
490
|
-
anti-spam guards, and every response carries `X-Request-Id`.
|
|
574
|
+
3. **Actions.** Contacts, conversations and messages, tags, custom fields, templates, WhatsApp forms, numbers
|
|
575
|
+
(connecting them by QR and with connect links too) and webhook subscriptions keep what you do; most of the rest
|
|
576
|
+
answers an example built from the specification. Sending with an API key is open in the sandbox, with the API's
|
|
577
|
+
24-hour window and anti-spam guards, and every response carries `X-Request-Id`. The sandbox `0.2.0` does not have
|
|
578
|
+
**Send a message to a group** and **Get a group action** yet (`405` and `404`), nor `data.workspace_id` in its
|
|
579
|
+
events.
|
|
491
580
|
4. **Trigger.** The sandbox accepts `http` and local URLs, so an n8n on `http://localhost:5678` receives the events.
|
|
492
581
|
Activate the workflow with the **Funnelchat Trigger** and simulate an incoming message:
|
|
493
582
|
|
|
@@ -502,22 +591,29 @@ its README. By default it listens on `http://localhost:4010`.
|
|
|
502
591
|
`http://localhost:5678/` publishing that port, or `http://host.docker.internal:5678/` if the sandbox runs in Docker
|
|
503
592
|
too).
|
|
504
593
|
|
|
594
|
+
Nothing scans a QR in the sandbox: after **Create a number to connect by QR**, `POST /_sandbox/devices/{id}/connect`
|
|
595
|
+
connects it and sends `device.connected`. `POST /_sandbox/groups/participant-joined` (and `…/participant-left`), with
|
|
596
|
+
`{"group": {"uid": "…@g.us", "name": "…"}, "participant": {"phone": "…"}}`, sends the group events.
|
|
597
|
+
|
|
505
598
|
5. **What the sandbox does not show you:** with the real API, n8n's URL has to be `https` and public (try it with
|
|
506
599
|
`npx @funnelchat-hq/sandbox --require-https`).
|
|
507
600
|
|
|
508
|
-
The end-to-end tests (`npm run test:e2e`, see [Development](#development)) passed on 2026-
|
|
509
|
-
`
|
|
510
|
-
`
|
|
511
|
-
|
|
512
|
-
|
|
601
|
+
The end-to-end tests (`npm run test:e2e`, see [Development](#development)) passed on 2026-11-04 against the sandbox
|
|
602
|
+
`0.2.0` (`main` @ `b3b4513`): the first use of this README (**Send a message** and the trigger up to `read`, with the
|
|
603
|
+
`client_reference`), a number created by QR, its QR and `device.connected` through the trigger, a connect link
|
|
604
|
+
created, read, listed by reference and revoked, the group participant events, sending and reading a message, file by
|
|
605
|
+
URL, `X-Request-Id` in errors, and a WhatsApp form created, published, sent and completed through the trigger. By
|
|
606
|
+
hand, on 2026-10-16 with n8n 2.25.7 and the sandbox @ `7a1b3d8`: the credential test, a workflow with "Create or update
|
|
607
|
+
a contact" and "List tags", and the full trigger cycle.
|
|
513
608
|
|
|
514
609
|
## Regenerating
|
|
515
610
|
|
|
516
611
|
The node's operations are not written by hand: they come from `spec/funnelchat.json` with `npm run generate`. When
|
|
517
612
|
the portal publishes a new specification:
|
|
518
613
|
|
|
519
|
-
1. Copy the portal's unified specification (`
|
|
520
|
-
`spec/funnelchat.json`.
|
|
614
|
+
1. Copy the portal's **full** unified specification (`generated/specs/funnelchat-completa.json`, built by its
|
|
615
|
+
`npm run build`) to `spec/funnelchat.json`. Not the published `/specs/funnelchat.json`: that one only carries the
|
|
616
|
+
operations the portal shows, and generating from it would drop the rest from the node.
|
|
521
617
|
2. Write down in `spec/PROVENANCE.md` where it came from: branch, commit, date and SHA-256
|
|
522
618
|
(`shasum -a 256 spec/funnelchat.json`). The generator refuses to run if the SHA-256 is not there.
|
|
523
619
|
3. Run `npm run generate`. It updates `nodes/Funnelchat/generated/operations.ts` and this README's operations table,
|
|
@@ -529,22 +625,30 @@ What changes on its own, without touching code: new operations, permissions, fie
|
|
|
529
625
|
|
|
530
626
|
- **English texts.** The portal's specification is in Spanish. The name and purpose of each of its operations are in
|
|
531
627
|
`scripts/operations.en.json`: a new operation without an entry makes the generator stop and ask for one.
|
|
532
|
-
- **`scripts/generator.config.json`.** Which tags of the specification go into each resource
|
|
533
|
-
the fields (the ones not listed show their API name)
|
|
534
|
-
|
|
535
|
-
a domain's code requires and its specification does not say
|
|
536
|
-
still needed
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
specification
|
|
628
|
+
- **`scripts/generator.config.json`.** Which tags of the specification go into each resource; the English labels of
|
|
629
|
+
the fields (the ones not listed show their API name) and their English descriptions (`fieldDescriptionsByName`; a
|
|
630
|
+
description of the specification in Spanish is not shown, and the generator warns); in `operationNotes`, notices
|
|
631
|
+
of what a domain's code requires and its specification does not say (check on each regeneration whether they are
|
|
632
|
+
still needed); and what keeps saved workflows working when the specification changes what the node published:
|
|
633
|
+
`keepOperationValues` (a renamed operation keeps its old value), `keepFieldKinds` (a field keeps its kind),
|
|
634
|
+
`fieldDefaults` (the option shown first) and `extraParameters` (query fields the code reads and the specification
|
|
635
|
+
does not list).
|
|
636
|
+
- **Supplements.** `spec/supplements/` has what the specification does not have yet: from conversations, the WhatsApp
|
|
637
|
+
forms and the poll and event invitation, which the node keeps; from communities `v2.35.5`, a message to a group.
|
|
638
|
+
They are written in English. If a new specification includes a route of a supplement, the generator uses the
|
|
639
|
+
specification's and says the supplement is no longer needed: remove it from the config then. A supplement with
|
|
640
|
+
`"replaces": true` wins over the specification instead, with the same `operationId`; none has it today.
|
|
543
641
|
- **Event catalog.** `spec/webhook-events.json` is a copy of `GET /api/v1/webhooks/events` (the trigger's fallback
|
|
544
642
|
list). Replace it with a new copy (for example `snapshots/accounts/events.json` of the portal), write it down in
|
|
545
643
|
`spec/PROVENANCE.md`, add the English label of any new type to `scripts/events.en.json` and regenerate.
|
|
546
644
|
- **Watch out for `operationId` changes.** The value of each operation in n8n is its `operationId`. If the
|
|
547
|
-
specification changes
|
|
645
|
+
specification changes one the node published, add it to `keepOperationValues` (it happened with "Get a message":
|
|
646
|
+
`message.showMessage` in the specification, `showMessage` in the node). Two tests guard this: every operation the
|
|
647
|
+
node has published (`test/fixtures/published-operations.json`) is still there in its resource, and the default
|
|
648
|
+
operation of each resource does not change.
|
|
649
|
+
- **Compare before and after.** For the operations the node already had, look in the diff of
|
|
650
|
+
`generated/operations.ts` for a field that disappears, changes its `name` or kind, or becomes required: a saved
|
|
651
|
+
workflow could lose its value.
|
|
548
652
|
|
|
549
653
|
## Development
|
|
550
654
|
|
|
@@ -558,8 +662,8 @@ FUNNELCHAT_SANDBOX_URL=http://127.0.0.1:4010 npm run test:e2e # e2e against a
|
|
|
558
662
|
npm run dev # starts n8n on http://localhost:5678 with the node loaded
|
|
559
663
|
```
|
|
560
664
|
|
|
561
|
-
**Publishing:**
|
|
562
|
-
(`.github/workflows/publish.yml`) publishes it
|
|
665
|
+
**Publishing:** a `vX.Y.Z` tag on `main`, matching the `package.json` version; GitHub Actions
|
|
666
|
+
(`.github/workflows/publish.yml`) publishes it through npm Trusted Publishing.
|
|
563
667
|
|
|
564
668
|
- `nodes/Funnelchat/`: the action node. `generated/operations.ts` is the generated table; `description.ts` builds the
|
|
565
669
|
fields from it and `request.ts` builds the requests (route, query and body) and the pagination.
|
|
@@ -567,19 +671,20 @@ npm run dev # starts n8n on http://localhost:5678 with the nod
|
|
|
567
671
|
- `nodes/shared/`: the transport (key, base URL, errors, `429`) and the signature check.
|
|
568
672
|
- `test/`: the signature with the portal's vectors, building requests and pagination, the trigger's create, check and
|
|
569
673
|
delete cycle, and the custom base URL.
|
|
570
|
-
- `test/e2e/`: the node with real HTTP against the sandbox:
|
|
571
|
-
|
|
572
|
-
`FUNNELCHAT_SANDBOX_URL` it is
|
|
674
|
+
- `test/e2e/`: the node with real HTTP against the sandbox: the first use, connecting a number by QR and with a
|
|
675
|
+
connect link, the group participant events, send and read a message, file by URL, `X-Request-Id` in errors, the
|
|
676
|
+
trigger cycle with a really signed event, and a WhatsApp form end to end. Without `FUNNELCHAT_SANDBOX_URL` it is
|
|
677
|
+
skipped.
|
|
573
678
|
|
|
574
679
|
## Sources and what is left to verify
|
|
575
680
|
|
|
576
|
-
| What | Where it comes from
|
|
577
|
-
| ------------------------------------------------------- |
|
|
578
|
-
| The unified specification (most operations)
|
|
579
|
-
|
|
|
580
|
-
|
|
|
581
|
-
| The trigger's fallback event catalog | accounts tag `v1.
|
|
582
|
-
| The signature algorithm and vectors, the event envelope | developers-portal (`snippets/verificar-firma.js`, `tests/test_firmas.py`)
|
|
583
|
-
| The local sandbox of "Testing with the sandbox" | funnelchat-sandbox `
|
|
681
|
+
| What | Where it comes from | Status on 2026-11-04 |
|
|
682
|
+
| ------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
683
|
+
| The full unified specification (most operations) | developers-portal `main` @ `c90565e4` (`v0.6.0`), with the snapshots of accounts `v1.5.97`, conversations `v1.19.7` and communities `v2.35.5` | The versions in production on 2026-11-04 |
|
|
684
|
+
| WhatsApp forms, poll and event invitation | conversations tag `v1.18.10`, read from the code and checked again against `v1.19.7` (production); the 15-10 copy of the specification | Forms open to API keys, routed by api-edge; the portal leaves them out (its edge table is from 13-10). Poll and event are still closed to keys. `operationId`s of the forms not checked against a generated specification |
|
|
685
|
+
| A message to a group, and the group action | communities tag `v2.35.5` (production), read from the code | Open to API keys in production (`communities:send` to send); not in the specification because communities' snapshot was taken with group actions off. `operationId`s not checked against a generated specification |
|
|
686
|
+
| The trigger's fallback event catalog | accounts tag `v1.5.97`, extracted from the code | 59 types, 54 being emitted; every event carries `data.workspace_id` |
|
|
687
|
+
| The signature algorithm and vectors, the event envelope | developers-portal (`snippets/verificar-firma.js`, `tests/test_firmas.py`) | Published |
|
|
688
|
+
| The local sandbox of "Testing with the sandbox" | funnelchat-sandbox `0.2.0` (`main` @ `b3b4513`) | No group messages nor `workspace_id` yet |
|
|
584
689
|
|
|
585
690
|
The details of each source are in [`spec/PROVENANCE.md`](spec/PROVENANCE.md).
|
|
@@ -113,7 +113,7 @@ class Funnelchat {
|
|
|
113
113
|
group: ['transform'],
|
|
114
114
|
version: 1,
|
|
115
115
|
subtitle: '={{$parameter["operation"]}}',
|
|
116
|
-
description: '
|
|
116
|
+
description: 'Connect WhatsApp numbers, send messages and templates, and work with contacts, groups, WhatsApp forms, tags, custom fields and webhooks of the Funnelchat public API',
|
|
117
117
|
defaults: {
|
|
118
118
|
name: 'Funnelchat',
|
|
119
119
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Funnelchat.node.js","sourceRoot":"","sources":["../../../nodes/Funnelchat/Funnelchat.node.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Funnelchat.node.js","sourceRoot":"","sources":["../../../nodes/Funnelchat/Funnelchat.node.ts"],"names":[],"mappings":"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"}
|