n8n-nodes-clientify 0.2.1 → 0.2.3
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 +114 -54
- package/dist/README.md +114 -54
- package/dist/nodes/ClientifyMcp/ClientifyMcpTrigger.node.js +2 -0
- package/dist/package.json +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -124,54 +124,68 @@ This node dynamically supports **26 operations** from the Clientify MCP API:
|
|
|
124
124
|
|
|
125
125
|
## Trigger Events
|
|
126
126
|
|
|
127
|
-
**NEW in v0.2.0!** The Clientify Trigger node enables automatic workflow execution when events occur in Clientify CRM.
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
127
|
+
**NEW in v0.2.0!** The Clientify Trigger node enables automatic workflow execution when events occur in Clientify CRM. With 16 event types covering contacts, companies, deals, and tasks, you can automate workflows instantly when things happen in your CRM.
|
|
128
|
+
|
|
129
|
+
### How It Works
|
|
130
|
+
|
|
131
|
+
1. Add "Clientify Trigger" node to your n8n workflow
|
|
132
|
+
2. Select which event should start the workflow (e.g., "Contact Created")
|
|
133
|
+
3. Activate the workflow to get your unique webhook URL
|
|
134
|
+
4. Configure the webhook in Clientify to point to your n8n URL
|
|
135
|
+
5. When the event happens in Clientify, your workflow runs automatically with the data
|
|
136
|
+
|
|
137
|
+
### 16 Available Triggers
|
|
138
|
+
|
|
139
|
+
| Event | Trigger Name | When It Fires | Common Use Cases |
|
|
140
|
+
|-------|--------------|---------------|------------------|
|
|
141
|
+
| 👥 **Contacts** | | | |
|
|
142
|
+
| | Contact Created | New contact added | Welcome email, create follow-up task, add to CRM |
|
|
143
|
+
| | Contact Updated | Contact details changed | Sync to other systems, log changes, update records |
|
|
144
|
+
| | Contact Deleted | Contact removed | Archive data, remove from email lists, cleanup |
|
|
145
|
+
| 📊 **Companies** | | | |
|
|
146
|
+
| | Company Created | New company added | Research company, assign account manager, notify team |
|
|
147
|
+
| | Company Updated | Company details changed | Update external systems, track changes |
|
|
148
|
+
| | Company Deleted | Company removed | Clean up related data, archive records |
|
|
149
|
+
| 💼 **Deals** | | | |
|
|
150
|
+
| | Deal Created | New deal/opportunity created | Notify sales team, create tasks, log in analytics |
|
|
151
|
+
| | Deal Updated | Deal details changed | Track value changes, update forecasts, log activity |
|
|
152
|
+
| | Deal Won | Deal closed successfully | Send celebration, create invoice, start onboarding |
|
|
153
|
+
| | Deal Lost | Deal closed unsuccessfully | Add to nurture campaign, analyze loss reason |
|
|
154
|
+
| | Deal Stage Changed | Deal moved to different stage | Stage-specific actions (send pricing, generate contract) |
|
|
155
|
+
| | Deal Deleted | Deal removed | Log deletion, archive data |
|
|
156
|
+
| ✅ **Tasks** | | | |
|
|
157
|
+
| | Task Created | New task added | Add to calendar, notify assignee, sync to project tools |
|
|
158
|
+
| | Task Completed | Task marked complete | Log activity, update metrics, trigger next steps |
|
|
159
|
+
| | Task Due Soon | Task approaching due date | Send reminder to assignee |
|
|
160
|
+
| | Task Overdue | Task past due date | Escalate to manager, send urgent notification |
|
|
161
|
+
|
|
162
|
+
### Setup Instructions
|
|
163
|
+
|
|
164
|
+
**In n8n:**
|
|
165
|
+
1. Add "Clientify Trigger" node to your workflow
|
|
166
|
+
2. Select the event from the dropdown
|
|
167
|
+
3. Choose your Clientify MCP credentials
|
|
168
|
+
4. Save and **activate** the workflow (toggle ON)
|
|
169
|
+
5. Click the trigger node → Expand "Webhook URLs"
|
|
170
|
+
6. Switch to "Production URL" tab
|
|
171
|
+
7. Copy the webhook URL
|
|
172
|
+
|
|
173
|
+
**In Clientify:**
|
|
174
|
+
1. Go to Settings → Webhooks
|
|
175
|
+
2. Click "Add Webhook"
|
|
176
|
+
3. Select the matching event (e.g., "contact.created")
|
|
177
|
+
4. Paste your n8n webhook URL
|
|
178
|
+
5. Set status to "Active"
|
|
179
|
+
6. Save
|
|
180
|
+
|
|
181
|
+
**Test It:**
|
|
182
|
+
Create a contact, deal, or task in Clientify → Check n8n executions → Your workflow should have run!
|
|
183
|
+
|
|
184
|
+
### Data You'll Receive
|
|
185
|
+
|
|
186
|
+
All webhook data is automatically flattened so you can easily access it in your workflow. Here's what you get for each event type:
|
|
187
|
+
|
|
188
|
+
**Contact Events** (`contact.created`, `contact.updated`, `contact.deleted`)
|
|
175
189
|
```json
|
|
176
190
|
{
|
|
177
191
|
"event": "contact.created",
|
|
@@ -182,25 +196,71 @@ When a webhook triggers your workflow, the data is automatically flattened for e
|
|
|
182
196
|
"email": "john.doe@example.com",
|
|
183
197
|
"phone": "+1234567890",
|
|
184
198
|
"company_id": 456,
|
|
185
|
-
"company_name": "Acme Corp"
|
|
199
|
+
"company_name": "Acme Corp",
|
|
200
|
+
"changes": { /* only for .updated events */ }
|
|
186
201
|
}
|
|
187
202
|
```
|
|
203
|
+
Access with: `{{$json.first_name}}`, `{{$json.email}}`, `{{$json.company_name}}`
|
|
188
204
|
|
|
189
|
-
**
|
|
205
|
+
**Company Events** (`company.created`, `company.updated`, `company.deleted`)
|
|
206
|
+
```json
|
|
207
|
+
{
|
|
208
|
+
"event": "company.created",
|
|
209
|
+
"timestamp": "2025-10-02T18:00:00Z",
|
|
210
|
+
"company_id": 999,
|
|
211
|
+
"name": "Tech Startup Inc",
|
|
212
|
+
"domain": "techstartup.com",
|
|
213
|
+
"industry": "Technology",
|
|
214
|
+
"size": "50-100",
|
|
215
|
+
"country": "USA"
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
Access with: `{{$json.name}}`, `{{$json.domain}}`, `{{$json.industry}}`
|
|
219
|
+
|
|
220
|
+
**Deal Events** (`deal.created`, `deal.updated`, `deal.won`, `deal.lost`, `deal.stage_changed`, `deal.deleted`)
|
|
190
221
|
```json
|
|
191
222
|
{
|
|
192
223
|
"event": "deal.won",
|
|
193
|
-
"timestamp": "2025-10-
|
|
224
|
+
"timestamp": "2025-10-02T23:00:00Z",
|
|
194
225
|
"deal_id": 98765,
|
|
195
226
|
"title": "Enterprise License Sale",
|
|
196
|
-
"value":
|
|
227
|
+
"value": 60000,
|
|
197
228
|
"currency": "USD",
|
|
198
229
|
"contact_id": 12345,
|
|
199
230
|
"contact_name": "John Doe",
|
|
200
|
-
"company_id":
|
|
201
|
-
"company_name": "
|
|
231
|
+
"company_id": 999,
|
|
232
|
+
"company_name": "Tech Startup Inc",
|
|
233
|
+
"stage_name": "Won",
|
|
234
|
+
"won_at": "2025-10-02T23:00:00Z"
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
Access with: `{{$json.title}}`, `{{$json.value}}`, `{{$json.contact_name}}`
|
|
238
|
+
|
|
239
|
+
**Task Events** (`task.created`, `task.completed`, `task.due_soon`, `task.overdue`)
|
|
240
|
+
```json
|
|
241
|
+
{
|
|
242
|
+
"event": "task.created",
|
|
243
|
+
"timestamp": "2025-10-03T03:00:00Z",
|
|
244
|
+
"task_id": 5555,
|
|
245
|
+
"title": "Follow up with John Doe",
|
|
246
|
+
"description": "Discuss pricing options",
|
|
247
|
+
"type": "call",
|
|
248
|
+
"contact_id": 12345,
|
|
249
|
+
"contact_name": "John Doe",
|
|
250
|
+
"deal_id": 98765,
|
|
251
|
+
"assigned_to_name": "Sales Rep",
|
|
252
|
+
"due_date": "2025-10-05"
|
|
202
253
|
}
|
|
203
254
|
```
|
|
255
|
+
Access with: `{{$json.title}}`, `{{$json.contact_name}}`, `{{$json.due_date}}`
|
|
256
|
+
|
|
257
|
+
### Important Notes
|
|
258
|
+
|
|
259
|
+
- **Event names are case-sensitive**: Use exact names like `contact.created` (not `Contact.Created`)
|
|
260
|
+
- **Webhook URLs are unique** per workflow - if you recreate a workflow, you'll get a new URL
|
|
261
|
+
- **Workflows must be active** for webhooks to work - inactive workflows won't receive events
|
|
262
|
+
- **All data includes `_raw`** field with the original payload for advanced use cases
|
|
263
|
+
- **Update events include `changes`** object showing what changed (old/new values)
|
|
204
264
|
|
|
205
265
|
## Usage Examples
|
|
206
266
|
|
package/dist/README.md
CHANGED
|
@@ -124,54 +124,68 @@ This node dynamically supports **26 operations** from the Clientify MCP API:
|
|
|
124
124
|
|
|
125
125
|
## Trigger Events
|
|
126
126
|
|
|
127
|
-
**NEW in v0.2.0!** The Clientify Trigger node enables automatic workflow execution when events occur in Clientify CRM.
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
127
|
+
**NEW in v0.2.0!** The Clientify Trigger node enables automatic workflow execution when events occur in Clientify CRM. With 16 event types covering contacts, companies, deals, and tasks, you can automate workflows instantly when things happen in your CRM.
|
|
128
|
+
|
|
129
|
+
### How It Works
|
|
130
|
+
|
|
131
|
+
1. Add "Clientify Trigger" node to your n8n workflow
|
|
132
|
+
2. Select which event should start the workflow (e.g., "Contact Created")
|
|
133
|
+
3. Activate the workflow to get your unique webhook URL
|
|
134
|
+
4. Configure the webhook in Clientify to point to your n8n URL
|
|
135
|
+
5. When the event happens in Clientify, your workflow runs automatically with the data
|
|
136
|
+
|
|
137
|
+
### 16 Available Triggers
|
|
138
|
+
|
|
139
|
+
| Event | Trigger Name | When It Fires | Common Use Cases |
|
|
140
|
+
|-------|--------------|---------------|------------------|
|
|
141
|
+
| 👥 **Contacts** | | | |
|
|
142
|
+
| | Contact Created | New contact added | Welcome email, create follow-up task, add to CRM |
|
|
143
|
+
| | Contact Updated | Contact details changed | Sync to other systems, log changes, update records |
|
|
144
|
+
| | Contact Deleted | Contact removed | Archive data, remove from email lists, cleanup |
|
|
145
|
+
| 📊 **Companies** | | | |
|
|
146
|
+
| | Company Created | New company added | Research company, assign account manager, notify team |
|
|
147
|
+
| | Company Updated | Company details changed | Update external systems, track changes |
|
|
148
|
+
| | Company Deleted | Company removed | Clean up related data, archive records |
|
|
149
|
+
| 💼 **Deals** | | | |
|
|
150
|
+
| | Deal Created | New deal/opportunity created | Notify sales team, create tasks, log in analytics |
|
|
151
|
+
| | Deal Updated | Deal details changed | Track value changes, update forecasts, log activity |
|
|
152
|
+
| | Deal Won | Deal closed successfully | Send celebration, create invoice, start onboarding |
|
|
153
|
+
| | Deal Lost | Deal closed unsuccessfully | Add to nurture campaign, analyze loss reason |
|
|
154
|
+
| | Deal Stage Changed | Deal moved to different stage | Stage-specific actions (send pricing, generate contract) |
|
|
155
|
+
| | Deal Deleted | Deal removed | Log deletion, archive data |
|
|
156
|
+
| ✅ **Tasks** | | | |
|
|
157
|
+
| | Task Created | New task added | Add to calendar, notify assignee, sync to project tools |
|
|
158
|
+
| | Task Completed | Task marked complete | Log activity, update metrics, trigger next steps |
|
|
159
|
+
| | Task Due Soon | Task approaching due date | Send reminder to assignee |
|
|
160
|
+
| | Task Overdue | Task past due date | Escalate to manager, send urgent notification |
|
|
161
|
+
|
|
162
|
+
### Setup Instructions
|
|
163
|
+
|
|
164
|
+
**In n8n:**
|
|
165
|
+
1. Add "Clientify Trigger" node to your workflow
|
|
166
|
+
2. Select the event from the dropdown
|
|
167
|
+
3. Choose your Clientify MCP credentials
|
|
168
|
+
4. Save and **activate** the workflow (toggle ON)
|
|
169
|
+
5. Click the trigger node → Expand "Webhook URLs"
|
|
170
|
+
6. Switch to "Production URL" tab
|
|
171
|
+
7. Copy the webhook URL
|
|
172
|
+
|
|
173
|
+
**In Clientify:**
|
|
174
|
+
1. Go to Settings → Webhooks
|
|
175
|
+
2. Click "Add Webhook"
|
|
176
|
+
3. Select the matching event (e.g., "contact.created")
|
|
177
|
+
4. Paste your n8n webhook URL
|
|
178
|
+
5. Set status to "Active"
|
|
179
|
+
6. Save
|
|
180
|
+
|
|
181
|
+
**Test It:**
|
|
182
|
+
Create a contact, deal, or task in Clientify → Check n8n executions → Your workflow should have run!
|
|
183
|
+
|
|
184
|
+
### Data You'll Receive
|
|
185
|
+
|
|
186
|
+
All webhook data is automatically flattened so you can easily access it in your workflow. Here's what you get for each event type:
|
|
187
|
+
|
|
188
|
+
**Contact Events** (`contact.created`, `contact.updated`, `contact.deleted`)
|
|
175
189
|
```json
|
|
176
190
|
{
|
|
177
191
|
"event": "contact.created",
|
|
@@ -182,25 +196,71 @@ When a webhook triggers your workflow, the data is automatically flattened for e
|
|
|
182
196
|
"email": "john.doe@example.com",
|
|
183
197
|
"phone": "+1234567890",
|
|
184
198
|
"company_id": 456,
|
|
185
|
-
"company_name": "Acme Corp"
|
|
199
|
+
"company_name": "Acme Corp",
|
|
200
|
+
"changes": { /* only for .updated events */ }
|
|
186
201
|
}
|
|
187
202
|
```
|
|
203
|
+
Access with: `{{$json.first_name}}`, `{{$json.email}}`, `{{$json.company_name}}`
|
|
188
204
|
|
|
189
|
-
**
|
|
205
|
+
**Company Events** (`company.created`, `company.updated`, `company.deleted`)
|
|
206
|
+
```json
|
|
207
|
+
{
|
|
208
|
+
"event": "company.created",
|
|
209
|
+
"timestamp": "2025-10-02T18:00:00Z",
|
|
210
|
+
"company_id": 999,
|
|
211
|
+
"name": "Tech Startup Inc",
|
|
212
|
+
"domain": "techstartup.com",
|
|
213
|
+
"industry": "Technology",
|
|
214
|
+
"size": "50-100",
|
|
215
|
+
"country": "USA"
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
Access with: `{{$json.name}}`, `{{$json.domain}}`, `{{$json.industry}}`
|
|
219
|
+
|
|
220
|
+
**Deal Events** (`deal.created`, `deal.updated`, `deal.won`, `deal.lost`, `deal.stage_changed`, `deal.deleted`)
|
|
190
221
|
```json
|
|
191
222
|
{
|
|
192
223
|
"event": "deal.won",
|
|
193
|
-
"timestamp": "2025-10-
|
|
224
|
+
"timestamp": "2025-10-02T23:00:00Z",
|
|
194
225
|
"deal_id": 98765,
|
|
195
226
|
"title": "Enterprise License Sale",
|
|
196
|
-
"value":
|
|
227
|
+
"value": 60000,
|
|
197
228
|
"currency": "USD",
|
|
198
229
|
"contact_id": 12345,
|
|
199
230
|
"contact_name": "John Doe",
|
|
200
|
-
"company_id":
|
|
201
|
-
"company_name": "
|
|
231
|
+
"company_id": 999,
|
|
232
|
+
"company_name": "Tech Startup Inc",
|
|
233
|
+
"stage_name": "Won",
|
|
234
|
+
"won_at": "2025-10-02T23:00:00Z"
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
Access with: `{{$json.title}}`, `{{$json.value}}`, `{{$json.contact_name}}`
|
|
238
|
+
|
|
239
|
+
**Task Events** (`task.created`, `task.completed`, `task.due_soon`, `task.overdue`)
|
|
240
|
+
```json
|
|
241
|
+
{
|
|
242
|
+
"event": "task.created",
|
|
243
|
+
"timestamp": "2025-10-03T03:00:00Z",
|
|
244
|
+
"task_id": 5555,
|
|
245
|
+
"title": "Follow up with John Doe",
|
|
246
|
+
"description": "Discuss pricing options",
|
|
247
|
+
"type": "call",
|
|
248
|
+
"contact_id": 12345,
|
|
249
|
+
"contact_name": "John Doe",
|
|
250
|
+
"deal_id": 98765,
|
|
251
|
+
"assigned_to_name": "Sales Rep",
|
|
252
|
+
"due_date": "2025-10-05"
|
|
202
253
|
}
|
|
203
254
|
```
|
|
255
|
+
Access with: `{{$json.title}}`, `{{$json.contact_name}}`, `{{$json.due_date}}`
|
|
256
|
+
|
|
257
|
+
### Important Notes
|
|
258
|
+
|
|
259
|
+
- **Event names are case-sensitive**: Use exact names like `contact.created` (not `Contact.Created`)
|
|
260
|
+
- **Webhook URLs are unique** per workflow - if you recreate a workflow, you'll get a new URL
|
|
261
|
+
- **Workflows must be active** for webhooks to work - inactive workflows won't receive events
|
|
262
|
+
- **All data includes `_raw`** field with the original payload for advanced use cases
|
|
263
|
+
- **Update events include `changes`** object showing what changed (old/new values)
|
|
204
264
|
|
|
205
265
|
## Usage Examples
|
|
206
266
|
|
|
@@ -133,6 +133,7 @@ class ClientifyMcpTrigger {
|
|
|
133
133
|
const req = this.getRequestObject();
|
|
134
134
|
const event = this.getNodeParameter('event');
|
|
135
135
|
// Get webhook payload from request body
|
|
136
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
136
137
|
const payload = req.body;
|
|
137
138
|
// Validate that we received a payload
|
|
138
139
|
if (!payload || typeof payload !== 'object') {
|
|
@@ -148,6 +149,7 @@ class ClientifyMcpTrigger {
|
|
|
148
149
|
};
|
|
149
150
|
}
|
|
150
151
|
// Extract and flatten data based on event type for easier access in workflows
|
|
152
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
151
153
|
let workflowData = {
|
|
152
154
|
event: payload.event,
|
|
153
155
|
timestamp: payload.timestamp,
|
package/dist/package.json
CHANGED