@funnelchat-hq/n8n-nodes-funnelchat 0.2.0 → 0.2.1
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 +45 -27
- package/dist/nodes/Funnelchat/description.js +3 -3
- package/dist/nodes/Funnelchat/description.js.map +1 -1
- package/dist/nodes/Funnelchat/generated/operations.js +715 -30
- package/dist/nodes/Funnelchat/generated/operations.js.map +1 -1
- package/dist/nodes/Funnelchat/operationTypes.d.ts +2 -0
- package/dist/package.json +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -16,13 +16,15 @@ know when they are read, receive messages and work with your groups, from your w
|
|
|
16
16
|
of the result: the page shows a QR code. Scan it with WhatsApp on your phone (**Linked devices**). The number's `id`
|
|
17
17
|
is then in **List numbers**, and in **Get a connect link** (`device_id`).
|
|
18
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`. **
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
- **Funnelchat**: **Conversations and Messages → Send a message**. **Number ID**: your number's `id`. **Phone**:
|
|
20
|
+
the recipient's, with the country code (`5491100000000`). No need to create the contact first: if the phone is
|
|
21
|
+
new, Funnelchat creates it in your key's workspace (that takes `conversations:write`). **Additional Fields**:
|
|
22
|
+
**Text** `Hello!` and **Client Reference** `order-981`.
|
|
22
23
|
- **Funnelchat Trigger**: **Event Names or IDs**: Message status changed (`message.status_changed`).
|
|
23
24
|
|
|
24
25
|
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
|
|
26
|
+
answers at once with the message in `status: "queued"` and its `contact_id`. Then the trigger starts once per
|
|
27
|
+
status, `sent`,
|
|
26
28
|
`delivered` and `read` (or `failed`, with its `error`), with your `client_reference` and your workspace:
|
|
27
29
|
|
|
28
30
|
```json
|
|
@@ -46,7 +48,9 @@ know when they are read, receive messages and work with your groups, from your w
|
|
|
46
48
|
```
|
|
47
49
|
|
|
48
50
|
The trigger needs n8n reachable from the internet over `https` (in self-hosted n8n, `WEBHOOK_URL`): see
|
|
49
|
-
[What you need](#what-you-need).
|
|
51
|
+
[What you need](#what-you-need). With an official WhatsApp number, the first message to a new contact has to be a
|
|
52
|
+
template (**Templates → Send a template**, with the same **Phone**): a free message only goes out within 24 hours
|
|
53
|
+
of the contact's last message. A number connected by QR has no such rule.
|
|
50
54
|
|
|
51
55
|
<details><summary>The same two nodes, to paste on the canvas (then choose your credential in both)</summary>
|
|
52
56
|
|
|
@@ -62,7 +66,7 @@ know when they are read, receive messages and work with your groups, from your w
|
|
|
62
66
|
"resource": "conversation",
|
|
63
67
|
"operation": "message.sendMessage",
|
|
64
68
|
"device_id": "4",
|
|
65
|
-
"
|
|
69
|
+
"phone": "5491100000000",
|
|
66
70
|
"additionalFields": { "text": "Hello!", "client_reference": "order-981" }
|
|
67
71
|
}
|
|
68
72
|
},
|
|
@@ -81,9 +85,11 @@ know when they are read, receive messages and work with your groups, from your w
|
|
|
81
85
|
</details>
|
|
82
86
|
|
|
83
87
|
**What the key needs** for all of this: `accounts:read` (list numbers, and the credential test), `accounts:operate`
|
|
84
|
-
(connect a number), `conversations:write` (
|
|
85
|
-
`conversations:
|
|
86
|
-
|
|
88
|
+
(connect a number), `conversations:write` (sending to a phone that is not a contact yet creates the contact, as
|
|
89
|
+
**Create or update a contact** does; it includes `conversations:send`, and without it that send answers `403`),
|
|
90
|
+
`conversations:read`, `webhooks:read` and `webhooks:write` (the trigger on message events). Sending to a phone or a
|
|
91
|
+
contact you already have, in your key's workspace, only needs `conversations:send`. A key with full access has them
|
|
92
|
+
all.
|
|
87
93
|
|
|
88
94
|
### Receive messages
|
|
89
95
|
|
|
@@ -159,10 +165,10 @@ git clone https://github.com/Funnelchat20/n8n-nodes-funnelchat.git
|
|
|
159
165
|
cd n8n-nodes-funnelchat
|
|
160
166
|
npm ci
|
|
161
167
|
npm run build
|
|
162
|
-
npm pack # creates funnelchat-hq-n8n-nodes-funnelchat-0.2.
|
|
168
|
+
npm pack # creates funnelchat-hq-n8n-nodes-funnelchat-0.2.1.tgz
|
|
163
169
|
```
|
|
164
170
|
|
|
165
|
-
Then, in n8n's nodes folder, `npm install /path/to/funnelchat-hq-n8n-nodes-funnelchat-0.2.
|
|
171
|
+
Then, in n8n's nodes folder, `npm install /path/to/funnelchat-hq-n8n-nodes-funnelchat-0.2.1.tgz`.
|
|
166
172
|
|
|
167
173
|
## Credential
|
|
168
174
|
|
|
@@ -224,7 +230,7 @@ The node can also be used as a tool of an n8n AI agent.
|
|
|
224
230
|
|
|
225
231
|
<!-- operations:start (generated by npm run generate) -->
|
|
226
232
|
|
|
227
|
-
|
|
233
|
+
153 operations generated from the specification (sha256 `8228ea7369da`) 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).
|
|
228
234
|
|
|
229
235
|
<details><summary><strong>Contacts</strong> (15)</summary>
|
|
230
236
|
|
|
@@ -341,7 +347,7 @@ The node can also be used as a tool of an n8n AI agent.
|
|
|
341
347
|
|
|
342
348
|
</details>
|
|
343
349
|
|
|
344
|
-
<details><summary><strong>Groups</strong> (
|
|
350
|
+
<details><summary><strong>Groups</strong> (30)</summary>
|
|
345
351
|
|
|
346
352
|
| Operation | Route | Permission |
|
|
347
353
|
|---|---|---|
|
|
@@ -354,8 +360,22 @@ The node can also be used as a tool of an n8n AI agent.
|
|
|
354
360
|
| List the session actions on a group "return all" | `GET /api/v1/groups/{group}/actions` | `communities:read` |
|
|
355
361
|
| List the messages sent to a group "return all" | `GET /api/v1/groups/{group}/messages` | `communities:read` |
|
|
356
362
|
| List the scheduled sends that include a group "return all" | `GET /api/v1/groups/{group}/scheduled-messages` | `communities:read` |
|
|
363
|
+
| Create a group ⚠ | `POST /api/v1/groups` | `communities:operate` |
|
|
357
364
|
| Send a message to a group ⚠ | `POST /api/v1/groups/{group}/messages` | `communities:send` |
|
|
358
365
|
| Get a group action ⚠ | `GET /api/v1/groups/actions/{action}` | `communities:read` |
|
|
366
|
+
| Add participants to a group ⚠ | `POST /api/v1/groups/{group}/participants` | `communities:operate` |
|
|
367
|
+
| Remove participants from a group ⚠ | `POST /api/v1/groups/{group}/participants/remove` | `communities:operate` |
|
|
368
|
+
| Make participants admins ⚠ | `POST /api/v1/groups/{group}/admins` | `communities:operate` |
|
|
369
|
+
| Remove the admin role ⚠ | `POST /api/v1/groups/{group}/admins/remove` | `communities:operate` |
|
|
370
|
+
| Rename a group ⚠ | `PUT /api/v1/groups/{group}/name` | `communities:operate` |
|
|
371
|
+
| Change a group's description ⚠ | `PUT /api/v1/groups/{group}/description` | `communities:operate` |
|
|
372
|
+
| Change a group's photo ⚠ | `PUT /api/v1/groups/{group}/photo` | `communities:operate` |
|
|
373
|
+
| Change who can write in a group ⚠ | `PUT /api/v1/groups/{group}/settings` | `communities:operate` |
|
|
374
|
+
| Renew a group's invite link ⚠ | `POST /api/v1/groups/{group}/invite-link/renew` | `communities:operate` |
|
|
375
|
+
| Get a group's live invite link ⚠ | `GET /api/v1/groups/{group}/invite-link/live` | `communities:read` |
|
|
376
|
+
| List a group's join requests ⚠ | `GET /api/v1/groups/{group}/join-requests` | `communities:read` |
|
|
377
|
+
| Approve join requests ⚠ | `POST /api/v1/groups/{group}/join-requests/approve` | `communities:operate` |
|
|
378
|
+
| Reject join requests ⚠ | `POST /api/v1/groups/{group}/join-requests/reject` | `communities:operate` |
|
|
359
379
|
| List a campaign's participants "return all" | `GET /api/v1/campaigns/{campaign}/participants` | `communities:read` |
|
|
360
380
|
| List participants with their current group "return all" | `GET /api/v1/campaigns/{campaign}/campaign-participants` | `communities:read` |
|
|
361
381
|
| List a campaign's joins and leaves "return all" | `GET /api/v1/campaigns/{campaign}/participant-events` | `communities:read` |
|
|
@@ -517,11 +537,9 @@ than 300 seconds away from n8n's clock: keep the server's clock in sync. The cod
|
|
|
517
537
|
|
|
518
538
|
1. **Funnelchat Trigger** — Events: "Message received (message.received)".
|
|
519
539
|
2. **If** (optional) — continue only if `{{ $json.data.message.type }}` is `text`.
|
|
520
|
-
3. **Funnelchat** — resource "Conversations and Messages", operation "Send a message
|
|
521
|
-
- Contact ID (in the route and in the body): `{{ $json.data.contact.id }}`
|
|
540
|
+
3. **Funnelchat** — resource "Conversations and Messages", operation "Send a message":
|
|
522
541
|
- Number ID: `{{ $json.data.device_id }}` (it may be `null`; then, the ID from "Numbers → List numbers").
|
|
523
|
-
-
|
|
524
|
-
must be the contact's: otherwise, `422 recipient_mismatch`.
|
|
542
|
+
- Phone: `{{ $json.data.contact.phone }}` (with or without `+`).
|
|
525
543
|
- Additional Fields → Text: `Thanks for writing to us! We will get back to you shortly.`
|
|
526
544
|
|
|
527
545
|
Reply within the contact's 24-hour window: outside it, WhatsApp requires a template ("Templates → Send a template") and
|
|
@@ -599,7 +617,7 @@ its README. By default it listens on `http://localhost:4010`.
|
|
|
599
617
|
`npx @funnelchat-hq/sandbox --require-https`).
|
|
600
618
|
|
|
601
619
|
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
|
|
620
|
+
`0.2.0` (`main` @ `b3b4513`): the first use of 0.2.0 (**Send a message** to a contact and the trigger up to `read`, with the
|
|
603
621
|
`client_reference`), a number created by QR, its QR and `device.connected` through the trigger, a connect link
|
|
604
622
|
created, read, listed by reference and revoked, the group participant events, sending and reading a message, file by
|
|
605
623
|
URL, `X-Request-Id` in errors, and a WhatsApp form created, published, sent and completed through the trigger. By
|
|
@@ -634,7 +652,7 @@ What changes on its own, without touching code: new operations, permissions, fie
|
|
|
634
652
|
`fieldDefaults` (the option shown first) and `extraParameters` (query fields the code reads and the specification
|
|
635
653
|
does not list).
|
|
636
654
|
- **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
|
|
655
|
+
forms and the poll and event invitation, which the node keeps.
|
|
638
656
|
They are written in English. If a new specification includes a route of a supplement, the generator uses the
|
|
639
657
|
specification's and says the supplement is no longer needed: remove it from the config then. A supplement with
|
|
640
658
|
`"replaces": true` wins over the specification instead, with the same `operationId`; none has it today.
|
|
@@ -678,13 +696,13 @@ npm run dev # starts n8n on http://localhost:5678 with the nod
|
|
|
678
696
|
|
|
679
697
|
## Sources and what is left to verify
|
|
680
698
|
|
|
681
|
-
| What | Where it comes from
|
|
682
|
-
| ------------------------------------------------------- |
|
|
683
|
-
| The full unified specification (most operations) | developers-portal `main` @ `
|
|
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
|
|
685
|
-
| A message to a group, and the group
|
|
686
|
-
| The trigger's fallback event catalog | accounts tag `v1.5.97`, extracted from the code
|
|
687
|
-
| The signature algorithm and vectors, the event envelope | developers-portal (`snippets/verificar-firma.js`, `tests/test_firmas.py`)
|
|
688
|
-
| The local sandbox of "Testing with the sandbox" | funnelchat-sandbox `0.2.0` (`main` @ `b3b4513`)
|
|
699
|
+
| What | Where it comes from | Status on 2026-11-04 |
|
|
700
|
+
| ------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
701
|
+
| The full unified specification (most operations) | developers-portal `main` @ `f5464516` (`v0.6.2`), with the snapshots of accounts `v1.5.97`, conversations `v1.19.21` and communities `v2.35.5` | The versions in production on 2026-11-05; sending by phone since conversations `v1.19.21` |
|
|
702
|
+
| 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 |
|
|
703
|
+
| A message to a group, and the other group actions | The specification (communities `v2.35.5`) | Open to API keys in production (`communities:send` to send, `communities:operate` to act on a group) |
|
|
704
|
+
| 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` |
|
|
705
|
+
| The signature algorithm and vectors, the event envelope | developers-portal (`snippets/verificar-firma.js`, `tests/test_firmas.py`) | Published |
|
|
706
|
+
| The local sandbox of "Testing with the sandbox" | funnelchat-sandbox `0.2.0` (`main` @ `b3b4513`) | No group messages nor `workspace_id` yet |
|
|
689
707
|
|
|
690
708
|
The details of each source are in [`spec/PROVENANCE.md`](spec/PROVENANCE.md).
|
|
@@ -5,7 +5,7 @@ exports.hasJsonBodyOption = hasJsonBodyOption;
|
|
|
5
5
|
exports.hasPagination = hasPagination;
|
|
6
6
|
exports.buildProperties = buildProperties;
|
|
7
7
|
function isTopLevel(param) {
|
|
8
|
-
return param.location === 'path' || param.required;
|
|
8
|
+
return param.location === 'path' || param.required || param.topLevel === true;
|
|
9
9
|
}
|
|
10
10
|
function hasJsonBodyOption(op) {
|
|
11
11
|
var _a;
|
|
@@ -138,7 +138,7 @@ function operationProperties(op) {
|
|
|
138
138
|
return props;
|
|
139
139
|
}
|
|
140
140
|
function buildProperties(resources, operations) {
|
|
141
|
-
var _a, _b, _c;
|
|
141
|
+
var _a, _b, _c, _d;
|
|
142
142
|
const defaultResource = (_b = (_a = resources[0]) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : '';
|
|
143
143
|
const props = [
|
|
144
144
|
{
|
|
@@ -160,7 +160,7 @@ function buildProperties(resources, operations) {
|
|
|
160
160
|
.sort((a, b) => a.name.localeCompare(b.name, 'es'));
|
|
161
161
|
if (ops.length === 0)
|
|
162
162
|
continue;
|
|
163
|
-
const defaultOperation = (
|
|
163
|
+
const defaultOperation = (_c = resource.defaultOperation) !== null && _c !== void 0 ? _c : ((_d = ops.find((o) => o.list)) !== null && _d !== void 0 ? _d : ops[0]).value;
|
|
164
164
|
props.push({
|
|
165
165
|
displayName: 'Operation',
|
|
166
166
|
name: 'operation',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"description.js","sourceRoot":"","sources":["../../../nodes/Funnelchat/description.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"description.js","sourceRoot":"","sources":["../../../nodes/Funnelchat/description.ts"],"names":[],"mappings":"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"}
|