@funnelchat-hq/n8n-nodes-funnelchat 0.1.0 → 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 CHANGED
@@ -1,30 +1,120 @@
1
1
  # @funnelchat-hq/n8n-nodes-funnelchat
2
2
 
3
- [n8n](https://n8n.io) community node for the Funnelchat public API. With it you build workflows that work with your
4
- account without writing code: sync contacts from a form or a CRM, reply to messages, check the status of your numbers
5
- or react to what happens in your account.
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
+ ```
47
+
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>
6
52
 
7
- It has three parts:
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
+ ```
8
80
 
9
- - **"Funnelchat API" credential**: your API key and the environment (production, staging or a URL of your own, such
10
- as the sandbox).
11
- - **"Funnelchat" node**: the API operations grouped as in the portal: contacts, conversations and messages,
12
- templates, WhatsApp forms, tags, custom fields, groups, numbers and webhooks. They are generated from the unified
13
- specification and from what the domains opened later.
14
- - **"Funnelchat Trigger" node**: starts a workflow with each event Funnelchat sends by webhook, with its signature
15
- verified.
81
+ </details>
16
82
 
17
- > [!IMPORTANT]
18
- > **Status: 0.1.0, ready to publish and not published yet** on npm or in n8n's node registry. It is up to date with the
19
- > API running in production on 2026-10-22 (accounts `v1.4.24`, conversations `v1.18.10`). The public API is v0 and
20
- > may change: see [Sources and what is left to verify](#sources-and-what-is-left-to-verify).
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.
21
87
 
22
- API documentation: [Funnelchat developer portal](https://developers-portal.funnelchat.app/docs/).
88
+ ### Receive messages
23
89
 
24
- ## Contents
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
97
+
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
25
116
 
26
117
  - [Installation](#installation)
27
- - [Minimal example](#minimal-example)
28
118
  - [Credential](#credential)
29
119
  - [The Funnelchat node](#the-funnelchat-node)
30
120
  - [The Funnelchat Trigger](#the-funnelchat-trigger)
@@ -34,6 +124,13 @@ API documentation: [Funnelchat developer portal](https://developers-portal.funne
34
124
  - [Development](#development)
35
125
  - [Sources and what is left to verify](#sources-and-what-is-left-to-verify)
36
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
+
37
134
  ## Installation
38
135
 
39
136
  ### From n8n (community nodes)
@@ -62,39 +159,10 @@ git clone https://github.com/Funnelchat20/n8n-nodes-funnelchat.git
62
159
  cd n8n-nodes-funnelchat
63
160
  npm ci
64
161
  npm run build
65
- npm pack # creates funnelchat-hq-n8n-nodes-funnelchat-0.1.0.tgz
162
+ npm pack # creates funnelchat-hq-n8n-nodes-funnelchat-0.2.0.tgz
66
163
  ```
67
164
 
68
- Then, in n8n's nodes folder, `npm install /path/to/funnelchat-hq-n8n-nodes-funnelchat-0.1.0.tgz`.
69
-
70
- ## Minimal example
71
-
72
- A workflow that sends a message to a contact and keeps the message ID:
73
-
74
- 1. Create the **Funnelchat API** credential with your key (see [Credential](#credential)).
75
- 2. Add the **Funnelchat** node — resource "Conversations and Messages", operation "Send a message to a contact":
76
- - Contact ID (in the route and in the body): `2001`
77
- - Number ID: the ID of the number that sends, from "Numbers → List numbers".
78
- - Additional Fields → Phone: the contact's, `5491100000000`; Text: `Hello`; Client Reference: `order-981`.
79
- 3. Run it. You get one item with the queued message:
80
-
81
- ```json
82
- {
83
- "id": 1001,
84
- "contact_id": 2001,
85
- "device_id": 7,
86
- "direction": "outbound",
87
- "type": "text",
88
- "status": "queued",
89
- "error": null,
90
- "client_reference": "order-981",
91
- "created_at": "2026-10-22T13:05:00Z",
92
- "updated_at": "2026-10-22T13:05:00Z"
93
- }
94
- ```
95
-
96
- The result (`sent`, `delivered`, `read` or `failed`) comes later: with the **Funnelchat Trigger** and the
97
- `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`.
98
166
 
99
167
  ## Credential
100
168
 
@@ -156,7 +224,7 @@ The node can also be used as a tool of an n8n AI agent.
156
224
 
157
225
  <!-- operations:start (generated by npm run generate) -->
158
226
 
159
- 128 operations generated from the specification (sha256 `8bbbae569b4c`) 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).
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).
160
228
 
161
229
  <details><summary><strong>Contacts</strong> (15)</summary>
162
230
 
@@ -180,7 +248,7 @@ The node can also be used as a tool of an n8n AI agent.
180
248
 
181
249
  </details>
182
250
 
183
- <details><summary><strong>Conversations and Messages</strong> (18)</summary>
251
+ <details><summary><strong>Conversations and Messages</strong> (20)</summary>
184
252
 
185
253
  | Operation | Route | Permission |
186
254
  |---|---|---|
@@ -195,17 +263,19 @@ The node can also be used as a tool of an n8n AI agent.
195
263
  | Send a message to a contact ⚠ | `POST /api/v1/contacts/{contact}/message` | `conversations:send` |
196
264
  | List a contact's messages "return all" | `GET /api/v1/contacts/{contactId}/messages` | `conversations:read` |
197
265
  | Send a message ⚠ | `POST /api/v1/message/send-message` | `conversations:send` |
198
- | Get a message | `GET /api/v1/contacts/{contact}/messages/{message}` | `conversations:read` |
199
266
  | React to a message ⚠ | `PUT /api/v1/contacts/{contact}/messages/{message}/reaction` | `conversations:send` |
200
267
  | Remove a reaction ⚠ | `DELETE /api/v1/contacts/{contact}/messages/{message}/reaction` | `conversations:send` |
201
268
  | Forward a message ⚠ | `POST /api/v1/contacts/{contact}/messages/{message}/forward` | `conversations:send` |
202
269
  | Send a poll ⚠ | `POST /api/v1/contacts/{contact}/message/poll` | `conversations:send` |
203
270
  | Send an event invitation ⚠ | `POST /api/v1/contacts/{contact}/message/event` | `conversations:send` |
204
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` |
205
275
 
206
276
  </details>
207
277
 
208
- <details><summary><strong>Templates</strong> (7)</summary>
278
+ <details><summary><strong>Templates</strong> (8)</summary>
209
279
 
210
280
  | Operation | Route | Permission |
211
281
  |---|---|---|
@@ -216,6 +286,7 @@ The node can also be used as a tool of an n8n AI agent.
216
286
  | Get a template's quick reply buttons | `GET /api/v1/templates/{template}/quick-reply-buttons` | `conversations:read` |
217
287
  | Send a template ⚠ | `POST /api/v1/devices/{device}/templates/{template}/send-template` | `conversations:send` |
218
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` |
219
290
 
220
291
  </details>
221
292
 
@@ -270,7 +341,7 @@ The node can also be used as a tool of an n8n AI agent.
270
341
 
271
342
  </details>
272
343
 
273
- <details><summary><strong>Groups</strong> (14)</summary>
344
+ <details><summary><strong>Groups</strong> (16)</summary>
274
345
 
275
346
  | Operation | Route | Permission |
276
347
  |---|---|---|
@@ -283,6 +354,8 @@ The node can also be used as a tool of an n8n AI agent.
283
354
  | List the session actions on a group "return all" | `GET /api/v1/groups/{group}/actions` | `communities:read` |
284
355
  | List the messages sent to a group "return all" | `GET /api/v1/groups/{group}/messages` | `communities:read` |
285
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` |
286
359
  | List a campaign's participants "return all" | `GET /api/v1/campaigns/{campaign}/participants` | `communities:read` |
287
360
  | List participants with their current group "return all" | `GET /api/v1/campaigns/{campaign}/campaign-participants` | `communities:read` |
288
361
  | List a campaign's joins and leaves "return all" | `GET /api/v1/campaigns/{campaign}/participant-events` | `communities:read` |
@@ -291,7 +364,7 @@ The node can also be used as a tool of an n8n AI agent.
291
364
 
292
365
  </details>
293
366
 
294
- <details><summary><strong>Numbers</strong> (29)</summary>
367
+ <details><summary><strong>Numbers</strong> (35)</summary>
295
368
 
296
369
  | Operation | Route | Permission |
297
370
  |---|---|---|
@@ -313,6 +386,12 @@ The node can also be used as a tool of an n8n AI agent.
313
386
  | Empty the message queue ⚠ | `DELETE /api/v1/devices/{device}/message-queue/all` | `accounts:operate` |
314
387
  | Get the connection status | `GET /api/v1/devices/{device}/status` | `accounts:read` |
315
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` |
316
395
  | Get a number's health | `GET /api/v1/devices/{device}/health` | `accounts:read` |
317
396
  | Refresh a number's health | `POST /api/v1/devices/{device}/health/refresh` | `accounts:write` |
318
397
  | Get the connection history "return all" | `GET /api/v1/devices/{device}/connection-history` | `accounts:read` |
@@ -331,13 +410,11 @@ The node can also be used as a tool of an n8n AI agent.
331
410
 
332
411
  | Operation | Route | Permission |
333
412
  |---|---|---|
334
- | List webhook subscriptions ⚠ | `GET /api/v1/webhooks` | `webhooks:read` |
413
+ | List webhook subscriptions ⚠ "return all" | `GET /api/v1/webhooks` | `webhooks:read` |
335
414
  | Create a webhook subscription ⚠ | `POST /api/v1/webhooks` | `webhooks:write` |
336
415
  | Get a webhook subscription ⚠ | `GET /api/v1/webhooks/{id}` | `webhooks:read` |
337
416
  | Update a webhook subscription ⚠ | `PUT /api/v1/webhooks/{id}` | `webhooks:write` |
338
417
  | Delete a webhook subscription ⚠ | `DELETE /api/v1/webhooks/{id}` | `webhooks:write` |
339
- | List a subscription's deliveries ⚠ "return all" | `GET /api/v1/webhooks/{id}/deliveries` | `webhooks:read` |
340
- | Send a test event ⚠ | `POST /api/v1/webhooks/{id}/test` | `webhooks:write` |
341
418
  | List event types | `GET /api/v1/webhooks/events` | `accounts:read` |
342
419
  | List webhooks "return all" | `GET /api/v1/webhooks/endpoints` | `accounts:read` |
343
420
  | Create a webhook | `POST /api/v1/webhooks/endpoints` | `accounts:write` |
@@ -346,6 +423,8 @@ The node can also be used as a tool of an n8n AI agent.
346
423
  | Delete a webhook | `DELETE /api/v1/webhooks/endpoints/{id}` | `accounts:write` |
347
424
  | Choose a webhook's events | `PUT /api/v1/webhooks/endpoints/{id}/events` | `accounts:write` |
348
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` |
349
428
 
350
429
  </details>
351
430
 
@@ -358,9 +437,15 @@ The node can also be used as a tool of an n8n AI agent.
358
437
  1. You choose the **Events** from the list. The list comes from Funnelchat's catalog (`GET /api/v1/webhooks/events`):
359
438
  it shows the types that can be subscribed to, the read permission each one needs, and marks the ones that are not
360
439
  emitted yet (`planned`). If the key cannot read the catalog (it needs `accounts:read`), it shows the list built into
361
- the node, copied from the catalog of accounts `v1.4.24`: 53 types, among them `message.received`,
362
- `message.status_changed`, `whatsapp_form.completed`, `group.message_received`, `group_action.completed` and
363
- `group.reaction_added`.
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
+
364
449
  2. When the workflow is **activated**, the node creates a subscription in Funnelchat (`POST /api/v1/webhooks`) with
365
450
  n8n's URL, those events and the description `n8n · <workflow name>`, and keeps the `id` and the secret Funnelchat
366
451
  returns only once.
@@ -386,7 +471,8 @@ events of those campaigns (`filters.campaign_ids`; with a filter, an event witho
386
471
  - **A key of the account owner**, with `webhooks:read` and `webhooks:write` and the read permission of the area of each
387
472
  event you choose (for example, `conversations:read` for `message.received`, `communities:read` for the group events).
388
473
  Without the one of an area, creating the subscription answers `422` on `events`.
389
- - **Room in the account:** there is a cap of 50 subscriptions per account.
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.
390
476
 
391
477
  ### What reaches the workflow
392
478
 
@@ -407,12 +493,14 @@ One item per delivery, with the event envelope as Funnelchat sends it:
407
493
  },
408
494
  "contact": { "id": 2001, "name": "Sample contact", "phone": "+5491100000000" },
409
495
  "receiver": { "phone": "+5491100000001" },
410
- "device_id": 4521
496
+ "device_id": 4521,
497
+ "workspace_id": 37
411
498
  }
412
499
  }
413
500
  ```
414
501
 
415
- Delivery is "at least once": the same event may arrive twice with the same `id`. If your workflow does not tolerate
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
416
504
  duplicates, keep the processed `id`s and drop the ones you have already seen. The format of each type is in the
417
505
  portal's event catalog.
418
506
 
@@ -483,10 +571,12 @@ its README. By default it listens on `http://localhost:4010`.
483
571
 
484
572
  The credential test calls the sandbox's `GET /api/v1/me`.
485
573
 
486
- 3. **Actions.** Any operation of the node works against the sandbox. Contacts, conversations and messages, tags, custom
487
- fields, templates, WhatsApp forms, numbers and webhook subscriptions keep what you do; the rest answers an example
488
- built from the specification. Sending with an API key is open in the sandbox, with the API's 24-hour window and
489
- 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.
490
580
  4. **Trigger.** The sandbox accepts `http` and local URLs, so an n8n on `http://localhost:5678` receives the events.
491
581
  Activate the workflow with the **Funnelchat Trigger** and simulate an incoming message:
492
582
 
@@ -501,22 +591,29 @@ its README. By default it listens on `http://localhost:4010`.
501
591
  `http://localhost:5678/` publishing that port, or `http://host.docker.internal:5678/` if the sandbox runs in Docker
502
592
  too).
503
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
+
504
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
505
599
  `npx @funnelchat-hq/sandbox --require-https`).
506
600
 
507
- The end-to-end tests (`npm run test:e2e`, see [Development](#development)) passed on 2026-10-22 against the sandbox on
508
- `feat/inicial` @ `7e244b8`: send and read a message, file by URL, `X-Request-Id` in errors, the signed
509
- `message.status_changed` with the `client_reference`, and a WhatsApp form created, published, sent and completed
510
- through the trigger. By hand, on 2026-10-16 with n8n 2.25.7 and the sandbox @ `7a1b3d8`: the credential test, a
511
- workflow with "Create or update a contact" and "List tags", and the full trigger cycle.
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.
512
608
 
513
609
  ## Regenerating
514
610
 
515
611
  The node's operations are not written by hand: they come from `spec/funnelchat.json` with `npm run generate`. When
516
612
  the portal publishes a new specification:
517
613
 
518
- 1. Copy the portal's unified specification (`out/specs/funnelchat.json`, built by its build) to
519
- `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.
520
617
  2. Write down in `spec/PROVENANCE.md` where it came from: branch, commit, date and SHA-256
521
618
  (`shasum -a 256 spec/funnelchat.json`). The generator refuses to run if the SHA-256 is not there.
522
619
  3. Run `npm run generate`. It updates `nodes/Funnelchat/generated/operations.ts` and this README's operations table,
@@ -528,22 +625,30 @@ What changes on its own, without touching code: new operations, permissions, fie
528
625
 
529
626
  - **English texts.** The portal's specification is in Spanish. The name and purpose of each of its operations are in
530
627
  `scripts/operations.en.json`: a new operation without an entry makes the generator stop and ask for one.
531
- - **`scripts/generator.config.json`.** Which tags of the specification go into each resource, the English labels of
532
- the fields (the ones not listed show their API name), `fieldDescriptions` to replace field descriptions of the
533
- specification that are in Spanish or written for the domain's developers, and, in `operationNotes`, notices of what
534
- a domain's code requires and its specification does not say. When regenerating, check whether those notices are
535
- still needed.
536
- - **Supplements.** `spec/supplements/` has what the specification does not have yet: the webhook subscriptions of
537
- accounts and, from conversations `v1.18.10`, sending with an API key, reading a message and the forms. They are
538
- written in English. If a new specification includes a route of a regular supplement, the generator uses the
539
- specification's and says the supplement is no longer needed. A supplement with `"replaces": true` (the conversations
540
- one) wins over the specification, with the same `operationId`, and the generator says so on every run: when the
541
- specification brings it up to date, remove it from the config.
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.
542
641
  - **Event catalog.** `spec/webhook-events.json` is a copy of `GET /api/v1/webhooks/events` (the trigger's fallback
543
642
  list). Replace it with a new copy (for example `snapshots/accounts/events.json` of the portal), write it down in
544
643
  `spec/PROVENANCE.md`, add the English label of any new type to `scripts/events.en.json` and regenerate.
545
644
  - **Watch out for `operationId` changes.** The value of each operation in n8n is its `operationId`. If the
546
- specification changes it, saved workflows with the old operation stop finding it.
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.
547
652
 
548
653
  ## Development
549
654
 
@@ -557,8 +662,8 @@ FUNNELCHAT_SANDBOX_URL=http://127.0.0.1:4010 npm run test:e2e # e2e against a
557
662
  npm run dev # starts n8n on http://localhost:5678 with the node loaded
558
663
  ```
559
664
 
560
- **Publishing:** push a `vX.Y.Z` tag on `main` matching the `package.json` version, and GitHub Actions
561
- (`.github/workflows/publish.yml`) publishes it to npm with provenance.
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.
562
667
 
563
668
  - `nodes/Funnelchat/`: the action node. `generated/operations.ts` is the generated table; `description.ts` builds the
564
669
  fields from it and `request.ts` builds the requests (route, query and body) and the pagination.
@@ -566,19 +671,20 @@ npm run dev # starts n8n on http://localhost:5678 with the nod
566
671
  - `nodes/shared/`: the transport (key, base URL, errors, `429`) and the signature check.
567
672
  - `test/`: the signature with the portal's vectors, building requests and pagination, the trigger's create, check and
568
673
  delete cycle, and the custom base URL.
569
- - `test/e2e/`: the node with real HTTP against the sandbox: send and read a message, file by URL, `X-Request-Id` in
570
- errors, the trigger cycle with a really signed event, and a WhatsApp form end to end. Without
571
- `FUNNELCHAT_SANDBOX_URL` it is skipped.
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.
572
678
 
573
679
  ## Sources and what is left to verify
574
680
 
575
- | What | Where it comes from | Status on 2026-10-22 |
576
- | ------------------------------------------------------- | -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
577
- | The unified specification (most operations) | developers-portal, the same one the portal publishes (domain snapshots of 13-10) | Published; the portal regenerates it from the production tags |
578
- | Sending with an API key, message by ID and forms | conversations tag `v1.18.10` (production), read from the code | Open to API keys. The new `operationId`s are not checked against a generated specification |
579
- | Webhook subscriptions (trigger and Webhooks resource) | accounts tag `v1.4.24` (production), read from the code | Open to API keys with `webhooks:read` / `webhooks:write` |
580
- | The trigger's fallback event catalog | accounts tag `v1.4.24`, extracted from the code | 54 types, 49 being emitted |
581
- | The signature algorithm and vectors, the event envelope | developers-portal (`snippets/verificar-firma.js`, `tests/test_firmas.py`) | Published |
582
- | The local sandbox of "Testing with the sandbox" | funnelchat-sandbox `feat/inicial` @ `7e244b8` | funnelchat-sandbox PR #1, not merged |
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 |
583
689
 
584
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: 'Contacts, conversations and messages, templates, WhatsApp forms, tags, custom fields, groups, numbers and webhooks of the Funnelchat public API',
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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"}