n8n-nodes-contact-validator 1.0.8
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.
Potentially problematic release.
This version of n8n-nodes-contact-validator might be problematic. Click here for more details.
- package/LICENSE +21 -0
- package/LICENSE.md +22 -0
- package/README.md +525 -0
- package/dist/credentials/SinchApi.credentials.d.ts +9 -0
- package/dist/credentials/SinchApi.credentials.js +83 -0
- package/dist/credentials/SinchMailgunApi.credentials.d.ts +9 -0
- package/dist/credentials/SinchMailgunApi.credentials.js +67 -0
- package/dist/nodes/Sinch/EmailValidation/EmailValidation.node.d.ts +5 -0
- package/dist/nodes/Sinch/EmailValidation/EmailValidation.node.js +353 -0
- package/dist/nodes/Sinch/EmailValidation/emailValidation.svg +7 -0
- package/dist/nodes/Sinch/NumberLookup/NumberLookup.node.d.ts +5 -0
- package/dist/nodes/Sinch/NumberLookup/NumberLookup.node.js +372 -0
- package/dist/nodes/Sinch/NumberLookup/numberLookup.svg +6 -0
- package/dist/nodes/Sinch/ProgrammableVoice/ProgrammableVoice.node.d.ts +5 -0
- package/dist/nodes/Sinch/ProgrammableVoice/ProgrammableVoice.node.js +548 -0
- package/dist/nodes/Sinch/ProgrammableVoice/voice.svg +5 -0
- package/index.js +7 -0
- package/package.json +67 -0
- package/workflows/templates/event-registration-quality.json +739 -0
- package/workflows/templates/multi-channel-campaign.json +648 -0
- package/workflows/templates/support-escalation-continuity.json +898 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Sinch
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/LICENSE.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
|
|
2
|
+
The MIT License (MIT)
|
|
3
|
+
|
|
4
|
+
Copyright (c) 2026 Chris
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,525 @@
|
|
|
1
|
+
# Contact Validator for n8n
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/n8n-nodes-contact-validator)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
|
|
6
|
+
> **Omnichannel Quality & Continuity for n8n Workflows**
|
|
7
|
+
> Validate contacts, intelligently route messages, and ensure critical communications reach your customers through the best available channel.
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
Contact Validator brings enterprise-grade contact validation and intelligent multi-channel communication to n8n automation workflows. This package includes three powerful nodes and three ready-to-use workflow templates that help you:
|
|
12
|
+
|
|
13
|
+
- **Validate phone numbers** before sending SMS or making calls
|
|
14
|
+
- **Verify email addresses** to reduce bounce rates and improve deliverability
|
|
15
|
+
- **Execute voice calls** for critical notifications and escalations
|
|
16
|
+
- **Intelligently route** messages based on contact quality and channel availability
|
|
17
|
+
- **Ensure message delivery** through automatic channel escalation
|
|
18
|
+
|
|
19
|
+
## What's Included
|
|
20
|
+
|
|
21
|
+
### Three Powerful n8n Nodes
|
|
22
|
+
|
|
23
|
+
1. **[Number Lookup](#number-lookup-node)** - Validate and enrich phone number data
|
|
24
|
+
2. **[Email Validation](#email-validation-node)** - Validate email addresses
|
|
25
|
+
3. **[Voice](#voice-node)** - Execute voice calls with text-to-speech
|
|
26
|
+
|
|
27
|
+
### Three Production-Ready Workflow Templates
|
|
28
|
+
|
|
29
|
+
1. **[Smart Multi-Channel Campaign](#workflow-1-smart-multi-channel-campaign)** - Intelligent outreach with quality gates and voice escalation
|
|
30
|
+
2. **[Event Registration Quality Control](#workflow-2-event-registration-quality-control)** - Real-time validation and automated event reminders
|
|
31
|
+
3. **[Support Ticket Escalation](#workflow-3-support-ticket-escalation)** - Priority-based contact escalation with continuity guarantee
|
|
32
|
+
|
|
33
|
+
## Quick Start
|
|
34
|
+
|
|
35
|
+
### Installation
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npm install n8n-nodes-contact-validator
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Or install directly in n8n:
|
|
42
|
+
|
|
43
|
+
1. Go to **Settings** → **Community Nodes**
|
|
44
|
+
2. Search for `n8n-nodes-contact-validator`
|
|
45
|
+
3. Click **Install**
|
|
46
|
+
|
|
47
|
+
### Prerequisites
|
|
48
|
+
|
|
49
|
+
You'll need the following API credentials:
|
|
50
|
+
|
|
51
|
+
- **Sinch Account** - [Sign up here](https://dashboard.sinch.com/signup)
|
|
52
|
+
- Project ID
|
|
53
|
+
- API Key & Secret
|
|
54
|
+
- Service Plan ID (for Voice API)
|
|
55
|
+
|
|
56
|
+
- **Mailgun Account** - [Sign up here](https://signup.mailgun.com/)
|
|
57
|
+
- API Key
|
|
58
|
+
- Domain
|
|
59
|
+
|
|
60
|
+
### Configuration
|
|
61
|
+
|
|
62
|
+
#### 1. Add API Credentials
|
|
63
|
+
|
|
64
|
+
1. In n8n, go to **Credentials** → **New**
|
|
65
|
+
2. Select **Sinch API** (for Number Lookup and Voice nodes)
|
|
66
|
+
3. Enter your credentials:
|
|
67
|
+
- Project ID
|
|
68
|
+
- API Key (Key ID)
|
|
69
|
+
- API Secret (Key Secret)
|
|
70
|
+
- Service Plan ID (optional, for Voice)
|
|
71
|
+
- Region (US/EU/AP)
|
|
72
|
+
4. Click **Save**
|
|
73
|
+
|
|
74
|
+
#### 2. Add Mailgun API Credentials
|
|
75
|
+
|
|
76
|
+
1. In n8n, go to **Credentials** → **New**
|
|
77
|
+
2. Select **Mailgun API** (for Email Validation node)
|
|
78
|
+
3. Enter your credentials:
|
|
79
|
+
- API Key
|
|
80
|
+
- Domain
|
|
81
|
+
- Region (US/EU)
|
|
82
|
+
4. Click **Save**
|
|
83
|
+
|
|
84
|
+
## Node Documentation
|
|
85
|
+
|
|
86
|
+
### Number Lookup Node
|
|
87
|
+
|
|
88
|
+
Validate and enrich phone numbers with intelligence about reachability, line type, carrier, and risk factors.
|
|
89
|
+
|
|
90
|
+
#### Operations
|
|
91
|
+
|
|
92
|
+
**Number Lookup**
|
|
93
|
+
- Validate phone number format and active status
|
|
94
|
+
- Retrieve carrier information
|
|
95
|
+
- Determine line type (mobile, landline, VoIP, toll-free)
|
|
96
|
+
- Country and region identification
|
|
97
|
+
- Porting status
|
|
98
|
+
|
|
99
|
+
**Reachability Check**
|
|
100
|
+
- Real-time reachability assessment
|
|
101
|
+
- SMS capability detection
|
|
102
|
+
- Voice capability detection
|
|
103
|
+
- Risk scoring
|
|
104
|
+
|
|
105
|
+
**Bulk Lookup**
|
|
106
|
+
- Process multiple numbers in batch
|
|
107
|
+
- Return aggregated results
|
|
108
|
+
|
|
109
|
+
#### Example Output
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
{
|
|
113
|
+
"phoneNumber": "+14155551234",
|
|
114
|
+
"countryCode": "US",
|
|
115
|
+
"numberType": "mobile",
|
|
116
|
+
"carrier": "T-Mobile USA",
|
|
117
|
+
"reachable": true,
|
|
118
|
+
"smsCapable": true,
|
|
119
|
+
"voiceCapable": true,
|
|
120
|
+
"riskScore": 0.12,
|
|
121
|
+
"ported": false,
|
|
122
|
+
"validation": {
|
|
123
|
+
"valid": true,
|
|
124
|
+
"formatted": "+14155551234"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
#### Use Cases
|
|
130
|
+
|
|
131
|
+
- Pre-send validation for SMS campaigns
|
|
132
|
+
- Contact list hygiene and cleanup
|
|
133
|
+
- Phone number enrichment for CRM
|
|
134
|
+
- Fraud detection and risk assessment
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
### Email Validation Node
|
|
139
|
+
|
|
140
|
+
Validate email addresses, assess deliverability risk, and prevent sending to invalid or risky addresses.
|
|
141
|
+
|
|
142
|
+
#### Operations
|
|
143
|
+
|
|
144
|
+
**Single Email Validation**
|
|
145
|
+
- Format validation (RFC 5322)
|
|
146
|
+
- Domain verification (MX records, DNS)
|
|
147
|
+
- Mailbox verification
|
|
148
|
+
- Risk assessment (disposable, role-based, catch-all)
|
|
149
|
+
- Deliverability score
|
|
150
|
+
- Typo suggestions
|
|
151
|
+
|
|
152
|
+
**Bulk Email Validation**
|
|
153
|
+
- Process lists of emails
|
|
154
|
+
- Return aggregated risk metrics
|
|
155
|
+
|
|
156
|
+
**Domain Validation**
|
|
157
|
+
- Check domain reputation
|
|
158
|
+
- Verify domain configuration
|
|
159
|
+
- MX record validation
|
|
160
|
+
|
|
161
|
+
#### Example Output
|
|
162
|
+
|
|
163
|
+
```json
|
|
164
|
+
{
|
|
165
|
+
"email": "user@example.com",
|
|
166
|
+
"valid": true,
|
|
167
|
+
"mailboxVerified": true,
|
|
168
|
+
"disposable": false,
|
|
169
|
+
"roleBasedAddress": false,
|
|
170
|
+
"catchAll": false,
|
|
171
|
+
"didYouMean": null,
|
|
172
|
+
"riskScore": 0.08,
|
|
173
|
+
"deliverabilityScore": 0.95,
|
|
174
|
+
"domainReputation": "high",
|
|
175
|
+
"reasons": [],
|
|
176
|
+
"flagged": false
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
#### Use Cases
|
|
181
|
+
|
|
182
|
+
- Pre-send validation for email campaigns
|
|
183
|
+
- Form validation and real-time feedback
|
|
184
|
+
- Email list cleaning and verification
|
|
185
|
+
- Reduce bounce rates and improve sender reputation
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
### Voice Node
|
|
190
|
+
|
|
191
|
+
Execute voice calls for escalation, notification, and continuity scenarios.
|
|
192
|
+
|
|
193
|
+
#### Operations
|
|
194
|
+
|
|
195
|
+
**Make Call**
|
|
196
|
+
- Outbound call to number
|
|
197
|
+
- Custom audio file playback
|
|
198
|
+
- Call recording
|
|
199
|
+
|
|
200
|
+
**Text-to-Speech Call**
|
|
201
|
+
- Convert text to speech
|
|
202
|
+
- Multiple voice options and languages
|
|
203
|
+
- Dynamic message generation
|
|
204
|
+
|
|
205
|
+
**Conference Call**
|
|
206
|
+
- Create conference room
|
|
207
|
+
- Add participants dynamically
|
|
208
|
+
|
|
209
|
+
**Check Call Status**
|
|
210
|
+
- Query call status
|
|
211
|
+
- Retrieve call logs and recordings
|
|
212
|
+
|
|
213
|
+
#### Example Output
|
|
214
|
+
|
|
215
|
+
```json
|
|
216
|
+
{
|
|
217
|
+
"callId": "1ce0ffee-ca11-ca11-ca11-abcdef123456",
|
|
218
|
+
"to": "+14155551234",
|
|
219
|
+
"from": "+14155556789",
|
|
220
|
+
"status": "completed",
|
|
221
|
+
"duration": 42,
|
|
222
|
+
"startTime": "2025-01-13T10:30:00Z",
|
|
223
|
+
"endTime": "2025-01-13T10:30:42Z",
|
|
224
|
+
"recordingUrl": "https://...",
|
|
225
|
+
"cost": 0.012
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
#### Use Cases
|
|
230
|
+
|
|
231
|
+
- Critical alert notifications
|
|
232
|
+
- Two-factor authentication via voice
|
|
233
|
+
- Appointment reminders
|
|
234
|
+
- Support ticket escalation
|
|
235
|
+
- Emergency communications
|
|
236
|
+
|
|
237
|
+
## Workflow Templates
|
|
238
|
+
|
|
239
|
+
### How to Import Workflow Templates
|
|
240
|
+
|
|
241
|
+
The workflow templates are included with this package. After installing `n8n-nodes-contact-validator`, you can find them at:
|
|
242
|
+
|
|
243
|
+
**Location:** `node_modules/n8n-nodes-contact-validator/workflows/templates/`
|
|
244
|
+
|
|
245
|
+
**To import a template:**
|
|
246
|
+
|
|
247
|
+
1. Navigate to the template file location above
|
|
248
|
+
2. Open the desired `.json` file and copy its contents
|
|
249
|
+
3. In n8n, click the **"+"** button in the top right
|
|
250
|
+
4. Select **"Import from File"** or **"Import from URL"**
|
|
251
|
+
5. Paste the JSON content
|
|
252
|
+
6. Click **"Import"**
|
|
253
|
+
7. Configure your credentials in the imported workflow nodes
|
|
254
|
+
|
|
255
|
+
**Available Templates:**
|
|
256
|
+
- `multi-channel-campaign.json`
|
|
257
|
+
- `event-registration-quality.json`
|
|
258
|
+
- `support-escalation-continuity.json`
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
### Workflow 1: Smart Multi-Channel Campaign
|
|
263
|
+
|
|
264
|
+
**Use Case:** Validate contacts before sending, intelligently route messages based on channel capability, and escalate to voice when critical messages aren't engaged.
|
|
265
|
+
|
|
266
|
+
**How It Works:**
|
|
267
|
+
|
|
268
|
+
1. **Contact Validation** - Validates both phone and email in parallel
|
|
269
|
+
2. **Quality Gate** - Routes based on validation results:
|
|
270
|
+
- Route A: High quality (valid email + SMS-capable mobile)
|
|
271
|
+
- Route B: Email only (invalid/landline phone)
|
|
272
|
+
- Route C: Phone only (invalid email)
|
|
273
|
+
- Route D: Suppress (both invalid)
|
|
274
|
+
3. **Progressive Engagement** (Route A):
|
|
275
|
+
- Send email → Wait 24h
|
|
276
|
+
- If not opened → Send SMS → Wait 48h
|
|
277
|
+
- If still no engagement → Voice call
|
|
278
|
+
4. **CRM Update** - Track validation results and engagement
|
|
279
|
+
|
|
280
|
+
**Benefits:**
|
|
281
|
+
- Reduce wasted messaging costs by 30-50%
|
|
282
|
+
- Improve engagement rates through channel optimization
|
|
283
|
+
- Automatic escalation ensures critical messages are seen
|
|
284
|
+
- Complete audit trail of contact attempts
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
### Workflow 2: Event Registration Quality Control
|
|
289
|
+
|
|
290
|
+
**Use Case:** Enhance event registration with real-time validation and automated continuity to ensure attendees receive critical updates.
|
|
291
|
+
|
|
292
|
+
**How It Works:**
|
|
293
|
+
|
|
294
|
+
1. **Real-Time Validation** - Validates contact info at registration
|
|
295
|
+
2. **Quality Check** - Accepts valid registrations or requests correction
|
|
296
|
+
3. **Confirmation** - Sends email + SMS confirmation
|
|
297
|
+
4. **Reminder Sequence**:
|
|
298
|
+
- Day -7: Email reminder
|
|
299
|
+
- Day -3: SMS reminder
|
|
300
|
+
- Day -1: Email + SMS
|
|
301
|
+
- Day 0 (2h before): Voice call if no check-in
|
|
302
|
+
5. **Post-Event Follow-up** - Survey and engagement tracking
|
|
303
|
+
|
|
304
|
+
**Benefits:**
|
|
305
|
+
- Prevent no-shows with multi-channel reminders
|
|
306
|
+
- Ensure all attendees receive event updates
|
|
307
|
+
- Improve data quality for future events
|
|
308
|
+
- Higher attendance and engagement rates
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
### Workflow 3: Support Ticket Escalation
|
|
313
|
+
|
|
314
|
+
**Use Case:** Automatically escalate high-priority support tickets through the most reliable channels with continuity guarantee.
|
|
315
|
+
|
|
316
|
+
**How It Works:**
|
|
317
|
+
|
|
318
|
+
1. **Contact Validation** - Validates customer contact methods
|
|
319
|
+
2. **Priority Assessment** - Routes based on ticket priority
|
|
320
|
+
|
|
321
|
+
**P0/P1 Immediate Escalation:**
|
|
322
|
+
- Attempt 1: Voice call → Wait 5min
|
|
323
|
+
- Attempt 2: SMS + Email → Wait 15min
|
|
324
|
+
- Attempt 3: Call alternate contact + Page on-call team
|
|
325
|
+
|
|
326
|
+
**P2/P3 Standard Flow:**
|
|
327
|
+
- Email → Wait 2h
|
|
328
|
+
- If no response → SMS → Wait 4h
|
|
329
|
+
- If no response → Voice call
|
|
330
|
+
|
|
331
|
+
3. **Tracking** - Log all attempts and update customer profile
|
|
332
|
+
4. **Feedback Loop** - Track which channels lead to fastest response
|
|
333
|
+
|
|
334
|
+
**Benefits:**
|
|
335
|
+
- Guaranteed contact for critical issues
|
|
336
|
+
- Reduced resolution time
|
|
337
|
+
- Improved customer satisfaction
|
|
338
|
+
- Optimized support team efficiency
|
|
339
|
+
|
|
340
|
+
## Best Practices
|
|
341
|
+
|
|
342
|
+
### Phone Number Validation
|
|
343
|
+
|
|
344
|
+
1. **Always use E.164 format** - International format with country code (e.g., +14155551234)
|
|
345
|
+
2. **Validate before sending** - Check SMS capability before sending SMS
|
|
346
|
+
3. **Handle errors gracefully** - Use "Continue on Error" for bulk operations
|
|
347
|
+
4. **Cache results** - Store validation results in your CRM to avoid repeated lookups
|
|
348
|
+
|
|
349
|
+
### Email Validation
|
|
350
|
+
|
|
351
|
+
1. **Set appropriate risk thresholds** - 0.5 is recommended for marketing, 0.7 for transactional
|
|
352
|
+
2. **Use suggestions** - Present "Did you mean?" suggestions to users for typos
|
|
353
|
+
3. **Validate at collection** - Validate emails when users submit forms
|
|
354
|
+
4. **Suppress high-risk emails** - Don't send to disposable or high-risk addresses
|
|
355
|
+
|
|
356
|
+
### Voice Calls
|
|
357
|
+
|
|
358
|
+
1. **Keep messages concise** - 30-60 seconds maximum
|
|
359
|
+
2. **Use appropriate voice** - Match voice to your brand and audience
|
|
360
|
+
3. **Record important calls** - Enable recording for compliance and quality
|
|
361
|
+
4. **Set reasonable timeouts** - Don't let calls run indefinitely
|
|
362
|
+
5. **Provide callback options** - Always include a callback number
|
|
363
|
+
|
|
364
|
+
### Workflow Design
|
|
365
|
+
|
|
366
|
+
1. **Fail gracefully** - Use "Continue on Error" to prevent workflow failures
|
|
367
|
+
2. **Log everything** - Track all contact attempts in your CRM
|
|
368
|
+
3. **Respect preferences** - Honor customer channel preferences
|
|
369
|
+
4. **Test thoroughly** - Use sandbox credentials for testing
|
|
370
|
+
5. **Monitor costs** - Track API usage and set budget alerts
|
|
371
|
+
|
|
372
|
+
## API Rate Limits
|
|
373
|
+
|
|
374
|
+
- **Number Lookup:** 100 requests/second
|
|
375
|
+
- **Email Validation:** 100 requests/hour (free tier), higher on paid plans
|
|
376
|
+
- **Voice:** 10 calls/second per account
|
|
377
|
+
|
|
378
|
+
Consider implementing rate limiting and queueing for bulk operations.
|
|
379
|
+
|
|
380
|
+
## Troubleshooting
|
|
381
|
+
|
|
382
|
+
### Common Issues
|
|
383
|
+
|
|
384
|
+
**"Invalid credentials" error**
|
|
385
|
+
- Verify your API Key and Secret are correct
|
|
386
|
+
- Check that you've selected the correct region
|
|
387
|
+
- Ensure credentials are saved in n8n
|
|
388
|
+
|
|
389
|
+
**"Phone number invalid" error**
|
|
390
|
+
- Use E.164 format (+country code + number)
|
|
391
|
+
- Remove spaces, hyphens, and parentheses
|
|
392
|
+
- Ensure country code is included
|
|
393
|
+
|
|
394
|
+
**"Email validation failed" error**
|
|
395
|
+
- Check that the email address is properly formatted
|
|
396
|
+
- Verify your Mailgun domain is verified
|
|
397
|
+
- Check your Mailgun API key is active
|
|
398
|
+
|
|
399
|
+
**Voice calls not connecting**
|
|
400
|
+
- Verify your Service Plan ID is correct
|
|
401
|
+
- Ensure the "from" number is a valid phone number from your provider
|
|
402
|
+
- Check that the "to" number can receive calls
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
## Examples
|
|
406
|
+
|
|
407
|
+
### Example 1: Validate Phone Before Sending SMS
|
|
408
|
+
|
|
409
|
+
```json
|
|
410
|
+
{
|
|
411
|
+
"nodes": [
|
|
412
|
+
{
|
|
413
|
+
"name": "Number Lookup",
|
|
414
|
+
"type": "numberLookup",
|
|
415
|
+
"parameters": {
|
|
416
|
+
"operation": "reachability",
|
|
417
|
+
"phoneNumber": "={{ $json.phone }}",
|
|
418
|
+
"checkSms": true
|
|
419
|
+
}
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
"name": "IF SMS Capable",
|
|
423
|
+
"type": "n8n-nodes-base.if",
|
|
424
|
+
"parameters": {
|
|
425
|
+
"conditions": {
|
|
426
|
+
"boolean": [{"value1": "={{ $json.smsCapable }}", "value2": true}]
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
},
|
|
430
|
+
{
|
|
431
|
+
"name": "Send SMS",
|
|
432
|
+
"type": "n8n-nodes-base.twilio",
|
|
433
|
+
"parameters": {
|
|
434
|
+
"operation": "send",
|
|
435
|
+
"toNumber": "={{ $json.phoneNumber }}",
|
|
436
|
+
"message": "Your verification code is 123456"
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
]
|
|
440
|
+
}
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
### Example 2: Email Validation with Suggestions
|
|
444
|
+
|
|
445
|
+
```json
|
|
446
|
+
{
|
|
447
|
+
"nodes": [
|
|
448
|
+
{
|
|
449
|
+
"name": "Email Validation",
|
|
450
|
+
"type": "emailValidation",
|
|
451
|
+
"parameters": {
|
|
452
|
+
"operation": "validate",
|
|
453
|
+
"emailAddress": "={{ $json.email }}",
|
|
454
|
+
"returnSuggestions": true,
|
|
455
|
+
"riskThreshold": 0.6
|
|
456
|
+
}
|
|
457
|
+
},
|
|
458
|
+
{
|
|
459
|
+
"name": "Check Valid",
|
|
460
|
+
"type": "n8n-nodes-base.if",
|
|
461
|
+
"parameters": {
|
|
462
|
+
"conditions": {
|
|
463
|
+
"boolean": [{"value1": "={{ $json.valid }}", "value2": true}]
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
},
|
|
467
|
+
{
|
|
468
|
+
"name": "Send to Valid",
|
|
469
|
+
"type": "n8n-nodes-base.emailSend"
|
|
470
|
+
},
|
|
471
|
+
{
|
|
472
|
+
"name": "Suggest Correction",
|
|
473
|
+
"type": "n8n-nodes-base.webhook",
|
|
474
|
+
"parameters": {
|
|
475
|
+
"responseData": "={{ {suggestion: $json.didYouMean} }}"
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
]
|
|
479
|
+
}
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
### Example 3: Progressive Voice Escalation
|
|
483
|
+
|
|
484
|
+
```json
|
|
485
|
+
{
|
|
486
|
+
"nodes": [
|
|
487
|
+
{
|
|
488
|
+
"name": "Send Email",
|
|
489
|
+
"type": "n8n-nodes-base.emailSend"
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
"name": "Wait 1 Hour",
|
|
493
|
+
"type": "n8n-nodes-base.wait",
|
|
494
|
+
"parameters": {"amount": 1, "unit": "hours"}
|
|
495
|
+
},
|
|
496
|
+
{
|
|
497
|
+
"name": "Check Opened",
|
|
498
|
+
"type": "n8n-nodes-base.if",
|
|
499
|
+
"parameters": {
|
|
500
|
+
"conditions": {
|
|
501
|
+
"boolean": [{"value1": "={{ $json.opened }}", "value2": false}]
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
},
|
|
505
|
+
{
|
|
506
|
+
"name": "Voice Call",
|
|
507
|
+
"type": "programmableVoice",
|
|
508
|
+
"parameters": {
|
|
509
|
+
"operation": "ttsCall",
|
|
510
|
+
"toNumber": "={{ $json.phone }}",
|
|
511
|
+
"message": "This is an urgent notification. Please check your email.",
|
|
512
|
+
"voice": "en-US-female"
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
]
|
|
516
|
+
}
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
## License
|
|
520
|
+
|
|
521
|
+
MIT License - see [LICENSE](LICENSE) file for details.
|
|
522
|
+
|
|
523
|
+
---
|
|
524
|
+
|
|
525
|
+
**Built with ❤️**
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class SinchApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
documentationUrl: string;
|
|
6
|
+
properties: INodeProperties[];
|
|
7
|
+
authenticate: IAuthenticateGeneric;
|
|
8
|
+
test: ICredentialTestRequest;
|
|
9
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SinchApi = void 0;
|
|
4
|
+
class SinchApi {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'sinchApi';
|
|
7
|
+
this.displayName = 'Sinch API';
|
|
8
|
+
this.documentationUrl = 'https://developers.sinch.com/docs/numbers/';
|
|
9
|
+
this.properties = [
|
|
10
|
+
{
|
|
11
|
+
displayName: 'Project ID',
|
|
12
|
+
name: 'projectId',
|
|
13
|
+
type: 'string',
|
|
14
|
+
default: '',
|
|
15
|
+
required: true,
|
|
16
|
+
description: 'Your Sinch Project ID',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
displayName: 'API Key',
|
|
20
|
+
name: 'apiKey',
|
|
21
|
+
type: 'string',
|
|
22
|
+
typeOptions: { password: true },
|
|
23
|
+
default: '',
|
|
24
|
+
required: true,
|
|
25
|
+
description: 'Your Sinch API Key (Key ID)',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
displayName: 'API Secret',
|
|
29
|
+
name: 'apiSecret',
|
|
30
|
+
type: 'string',
|
|
31
|
+
typeOptions: { password: true },
|
|
32
|
+
default: '',
|
|
33
|
+
required: true,
|
|
34
|
+
description: 'Your Sinch API Secret (Key Secret)',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
displayName: 'Service Plan ID',
|
|
38
|
+
name: 'servicePlanId',
|
|
39
|
+
type: 'string',
|
|
40
|
+
default: '',
|
|
41
|
+
description: 'Your Sinch Service Plan ID (optional, for Voice API)',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
displayName: 'Region',
|
|
45
|
+
name: 'region',
|
|
46
|
+
type: 'options',
|
|
47
|
+
options: [
|
|
48
|
+
{
|
|
49
|
+
name: 'United States',
|
|
50
|
+
value: 'us',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'Europe',
|
|
54
|
+
value: 'eu',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'Asia Pacific',
|
|
58
|
+
value: 'ap',
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
default: 'us',
|
|
62
|
+
description: 'The region for your Sinch API endpoint',
|
|
63
|
+
},
|
|
64
|
+
];
|
|
65
|
+
this.authenticate = {
|
|
66
|
+
type: 'generic',
|
|
67
|
+
properties: {
|
|
68
|
+
auth: {
|
|
69
|
+
username: '={{$credentials.apiKey}}',
|
|
70
|
+
password: '={{$credentials.apiSecret}}',
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
this.test = {
|
|
75
|
+
request: {
|
|
76
|
+
baseURL: '=https://numbers.api.sinch.com/v1/projects/{{$credentials.projectId}}',
|
|
77
|
+
url: '/availableNumbers',
|
|
78
|
+
method: 'GET',
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.SinchApi = SinchApi;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class SinchMailgunApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
documentationUrl: string;
|
|
6
|
+
properties: INodeProperties[];
|
|
7
|
+
authenticate: IAuthenticateGeneric;
|
|
8
|
+
test: ICredentialTestRequest;
|
|
9
|
+
}
|