@vobiz-ai/n8n-nodes-vobiz 0.1.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/LICENSE.md +21 -0
- package/README.md +207 -0
- package/dist/credentials/VobizApi.credentials.d.ts +10 -0
- package/dist/credentials/VobizApi.credentials.js +56 -0
- package/dist/credentials/VobizApi.credentials.js.map +1 -0
- package/dist/nodes/Vobiz/Vobiz.node.d.ts +14 -0
- package/dist/nodes/Vobiz/Vobiz.node.js +123 -0
- package/dist/nodes/Vobiz/Vobiz.node.js.map +1 -0
- package/dist/nodes/Vobiz/Vobiz.node.json +30 -0
- package/dist/nodes/Vobiz/descriptions/CallDescription.d.ts +3 -0
- package/dist/nodes/Vobiz/descriptions/CallDescription.js +153 -0
- package/dist/nodes/Vobiz/descriptions/CallDescription.js.map +1 -0
- package/dist/nodes/Vobiz/descriptions/CallRecordDescription.d.ts +3 -0
- package/dist/nodes/Vobiz/descriptions/CallRecordDescription.js +147 -0
- package/dist/nodes/Vobiz/descriptions/CallRecordDescription.js.map +1 -0
- package/dist/nodes/Vobiz/descriptions/RecordingDescription.d.ts +3 -0
- package/dist/nodes/Vobiz/descriptions/RecordingDescription.js +102 -0
- package/dist/nodes/Vobiz/descriptions/RecordingDescription.js.map +1 -0
- package/dist/nodes/Vobiz/descriptions/WhatsAppMessageDescription.d.ts +3 -0
- package/dist/nodes/Vobiz/descriptions/WhatsAppMessageDescription.js +265 -0
- package/dist/nodes/Vobiz/descriptions/WhatsAppMessageDescription.js.map +1 -0
- package/dist/nodes/Vobiz/operations.d.ts +21 -0
- package/dist/nodes/Vobiz/operations.js +395 -0
- package/dist/nodes/Vobiz/operations.js.map +1 -0
- package/dist/nodes/Vobiz/vobiz.dark.svg +4 -0
- package/dist/nodes/Vobiz/vobiz.svg +4 -0
- package/dist/nodes/VobizCallAnsweredTrigger/VobizCallAnsweredTrigger.node.d.ts +17 -0
- package/dist/nodes/VobizCallAnsweredTrigger/VobizCallAnsweredTrigger.node.js +449 -0
- package/dist/nodes/VobizCallAnsweredTrigger/VobizCallAnsweredTrigger.node.js.map +1 -0
- package/dist/nodes/VobizCallAnsweredTrigger/VobizCallAnsweredTrigger.node.json +27 -0
- package/dist/nodes/VobizTrigger/VobizTrigger.node.d.ts +5 -0
- package/dist/nodes/VobizTrigger/VobizTrigger.node.js +233 -0
- package/dist/nodes/VobizTrigger/VobizTrigger.node.js.map +1 -0
- package/dist/nodes/VobizTrigger/VobizTrigger.node.json +27 -0
- package/dist/nodes/VobizWhatsAppTrigger/VobizWhatsAppTrigger.node.d.ts +27 -0
- package/dist/nodes/VobizWhatsAppTrigger/VobizWhatsAppTrigger.node.js +360 -0
- package/dist/nodes/VobizWhatsAppTrigger/VobizWhatsAppTrigger.node.js.map +1 -0
- package/dist/nodes/VobizWhatsAppTrigger/VobizWhatsAppTrigger.node.json +25 -0
- package/dist/nodes/shared/callRecords.d.ts +11 -0
- package/dist/nodes/shared/callRecords.js +81 -0
- package/dist/nodes/shared/callRecords.js.map +1 -0
- package/dist/nodes/shared/callScript.d.ts +18 -0
- package/dist/nodes/shared/callScript.js +62 -0
- package/dist/nodes/shared/callScript.js.map +1 -0
- package/dist/nodes/shared/numbers.d.ts +10 -0
- package/dist/nodes/shared/numbers.js +50 -0
- package/dist/nodes/shared/numbers.js.map +1 -0
- package/dist/nodes/shared/recordings.d.ts +14 -0
- package/dist/nodes/shared/recordings.js +90 -0
- package/dist/nodes/shared/recordings.js.map +1 -0
- package/dist/nodes/shared/transport.d.ts +28 -0
- package/dist/nodes/shared/transport.js +172 -0
- package/dist/nodes/shared/transport.js.map +1 -0
- package/dist/nodes/shared/webhooks.d.ts +3 -0
- package/dist/nodes/shared/webhooks.js +33 -0
- package/dist/nodes/shared/webhooks.js.map +1 -0
- package/dist/nodes/shared/whatsapp.d.ts +7 -0
- package/dist/nodes/shared/whatsapp.js +63 -0
- package/dist/nodes/shared/whatsapp.js.map +1 -0
- package/dist/package.json +69 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +69 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Vobiz AI
|
|
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/README.md
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# Vobiz nodes for n8n
|
|
2
|
+
|
|
3
|
+
[](LICENSE.md)
|
|
4
|
+
[](https://docs.n8n.io/integrations/community-nodes/)
|
|
5
|
+
|
|
6
|
+
Bring [Vobiz](https://www.vobiz.ai) voice and WhatsApp into your [n8n](https://n8n.io) workflows. Place calls that speak a message, answer incoming calls, act the moment a call is answered or ends, pull call records and recordings, and send and receive WhatsApp messages, all without writing code or running a server of your own.
|
|
7
|
+
|
|
8
|
+
**Package:** `@vobiz-ai/n8n-nodes-vobiz`
|
|
9
|
+
|
|
10
|
+
## Contents
|
|
11
|
+
|
|
12
|
+
- [What's included](#whats-included)
|
|
13
|
+
- [Installation](#installation)
|
|
14
|
+
- [Credentials](#credentials)
|
|
15
|
+
- [Nodes](#nodes)
|
|
16
|
+
- [Quick start: a call that speaks](#quick-start-a-call-that-speaks)
|
|
17
|
+
- [Example workflows](#example-workflows)
|
|
18
|
+
- [Good to know](#good-to-know)
|
|
19
|
+
- [Security](#security)
|
|
20
|
+
- [Troubleshooting](#troubleshooting)
|
|
21
|
+
- [Compatibility](#compatibility)
|
|
22
|
+
- [Development](#development)
|
|
23
|
+
- [Support](#support)
|
|
24
|
+
- [License](#license)
|
|
25
|
+
|
|
26
|
+
## What's included
|
|
27
|
+
|
|
28
|
+
| Node | Type | Use it to |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| **Vobiz** | Action | Make calls; get call records and summaries; get and download recordings; send WhatsApp messages |
|
|
31
|
+
| **Vobiz Trigger** | Trigger (checks every minute) | Start a workflow when any call on your account ends, or when a recording is ready |
|
|
32
|
+
| **Vobiz Call Answered Trigger** | Trigger (instant) | Tell Vobiz what to say when a call is answered, answer incoming calls on your numbers, and start a workflow the moment a call is answered or ends |
|
|
33
|
+
| **Vobiz WhatsApp Trigger** | Trigger (instant) | Start a workflow when a customer messages you on WhatsApp, or when a message you sent is delivered, read or fails |
|
|
34
|
+
|
|
35
|
+
The **Vobiz** node can also be used as a tool by n8n's AI Agent.
|
|
36
|
+
|
|
37
|
+
## Installation
|
|
38
|
+
|
|
39
|
+
### Self-hosted n8n
|
|
40
|
+
|
|
41
|
+
1. Go to **Settings → Community Nodes** and select **Install**.
|
|
42
|
+
2. Enter `@vobiz-ai/n8n-nodes-vobiz`, agree to the risks of using community nodes, and select **Install**.
|
|
43
|
+
3. Search for **Vobiz** in the nodes panel.
|
|
44
|
+
|
|
45
|
+
### Self-hosted n8n with npm (Docker, queue mode)
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
mkdir -p ~/.n8n/nodes
|
|
49
|
+
cd ~/.n8n/nodes
|
|
50
|
+
npm install @vobiz-ai/n8n-nodes-vobiz
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Restart n8n afterwards.
|
|
54
|
+
|
|
55
|
+
### n8n Cloud
|
|
56
|
+
|
|
57
|
+
Once the package is verified by n8n, the Vobiz nodes appear directly in the nodes panel.
|
|
58
|
+
|
|
59
|
+
See n8n's [community nodes installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) for more options.
|
|
60
|
+
|
|
61
|
+
## Credentials
|
|
62
|
+
|
|
63
|
+
You need a Vobiz account.
|
|
64
|
+
|
|
65
|
+
1. In the [Vobiz console](https://console.vobiz.ai), open **Settings → API** and copy your **Auth ID** (it starts with `MA_`) and your **Auth Token**.
|
|
66
|
+
2. In n8n, create a **Vobiz API** credential and paste both.
|
|
67
|
+
3. Leave **API URL** set to `https://api.vobiz.ai`.
|
|
68
|
+
4. Select **Save**. n8n checks the credential with Vobiz straight away.
|
|
69
|
+
|
|
70
|
+
## Nodes
|
|
71
|
+
|
|
72
|
+
### Vobiz
|
|
73
|
+
|
|
74
|
+
| Resource | Operation | What it does |
|
|
75
|
+
|---|---|---|
|
|
76
|
+
| Call | Make | Calls a number from one of your Vobiz numbers. Optionally say a different message on each call, hang up if voicemail answers, and set the ring timeout, time limit, caller name and keypad digits to send. |
|
|
77
|
+
| Call Record | Get | One finished call: numbers, times, duration, cost and how it ended. |
|
|
78
|
+
| Call Record | Get Many | Call records, newest first, filtered by date, direction, number, minimum duration, hangup cause or campaign. |
|
|
79
|
+
| Call Record | Get Summary | Totals for a period: calls, answered calls, answer rate, minutes and cost. |
|
|
80
|
+
| Recording | Get / Get Many | Recording details, for one call or all calls, optionally filtered by recording type. |
|
|
81
|
+
| Recording | Download | The audio file as binary data, ready for Google Drive, Slack or email. |
|
|
82
|
+
| WhatsApp Message | Send | A text, image, audio, video, document or sticker, or an approved template with its variables. |
|
|
83
|
+
|
|
84
|
+
### Vobiz Trigger
|
|
85
|
+
|
|
86
|
+
Starts a workflow when a **call ends** (incoming or outgoing) or when a **call recording is ready**.
|
|
87
|
+
|
|
88
|
+
- It checks Vobiz on n8n's schedule (every minute by default), so it needs no setup in Vobiz and never changes where your numbers point.
|
|
89
|
+
- It sees every call on your account.
|
|
90
|
+
- The first check only notes what already exists, so past calls don't all start the workflow at once.
|
|
91
|
+
- **Filters:** answered calls only, direction, a phone number, and a minimum duration.
|
|
92
|
+
- For recordings, it can attach the audio file.
|
|
93
|
+
|
|
94
|
+
### Vobiz Call Answered Trigger
|
|
95
|
+
|
|
96
|
+
Your n8n phone line. When a call is answered, Vobiz asks this trigger what to do. The trigger replies at once with a spoken message, then runs your workflow. The message can be:
|
|
97
|
+
|
|
98
|
+
- spoken in any of 16 languages, with a man's or a woman's voice;
|
|
99
|
+
- optionally followed by an audio file;
|
|
100
|
+
- or replaced entirely by your own Vobiz XML.
|
|
101
|
+
|
|
102
|
+
Settings:
|
|
103
|
+
|
|
104
|
+
- **Trigger On:** *Call Answered*, *Call Ended*, or both. *Call Ended* fires the moment the call finishes, with its duration, whether it was answered and how it ended.
|
|
105
|
+
- **Outgoing calls:** paste the trigger's **Production URL** into **Answer URL** on *Vobiz → Call → Make*.
|
|
106
|
+
- **Incoming calls:** choose numbers in **Answer Incoming Calls On**. They are connected when you publish the workflow and released when you unpublish it.
|
|
107
|
+
|
|
108
|
+
When the workflow is published, the trigger creates a Vobiz application for its address, named `n8n-call-answered-…`. It removes the application when the workflow is unpublished.
|
|
109
|
+
|
|
110
|
+
> **Your existing setups are safe.** The trigger only takes numbers that aren't linked to anything else. It refuses a number already used by another application (such as a CRM integration) or routed to a SIP trunk, and changes nothing in your account when it does. The number list labels each number **not linked**, **on a SIP trunk** or **used by …** so you can see which ones are free.
|
|
111
|
+
|
|
112
|
+
| | Vobiz Trigger | Vobiz Call Answered Trigger |
|
|
113
|
+
|---|---|---|
|
|
114
|
+
| Which calls | Every call on the account | Calls it answers: on its numbers, or made with it as the Answer URL |
|
|
115
|
+
| When it fires | Within about a minute | The moment the call is answered or ends |
|
|
116
|
+
| Changes in Vobiz | None | Its own application, and the numbers you choose |
|
|
117
|
+
|
|
118
|
+
### Vobiz WhatsApp Trigger
|
|
119
|
+
|
|
120
|
+
Starts a workflow when a customer sends you a WhatsApp message (**Message Received**), or when a message you sent is sent, delivered, read or fails (**Message Status Changed**).
|
|
121
|
+
|
|
122
|
+
- It registers itself with Vobiz when you publish the workflow, and removes itself when you unpublish it.
|
|
123
|
+
- Every event is checked against a signature made with a secret only this trigger knows. Forged events are refused.
|
|
124
|
+
- You can limit it to one WhatsApp channel.
|
|
125
|
+
|
|
126
|
+
## Quick start: a call that speaks
|
|
127
|
+
|
|
128
|
+
When a call is answered, Vobiz asks a web address what to say. The Call Answered Trigger is that address.
|
|
129
|
+
|
|
130
|
+
1. Create a workflow with a **Vobiz Call Answered Trigger**, set its **Message**, and **Publish** the workflow.
|
|
131
|
+
2. Open the trigger, select **Webhook URLs → Production URL**, and copy the address. It contains `/webhook/`, not `/webhook-test/`.
|
|
132
|
+
3. In another workflow, add **Vobiz → Call → Make**. Pick a **From Number**, enter the number to call in **To**, and paste the address into **Answer URL**.
|
|
133
|
+
4. To say something different on each call, fill in **Message** on Make a Call, for example `Hi {{ $json.name }}, your appointment is tomorrow at 10.` It replaces the trigger's message for that call.
|
|
134
|
+
5. To act once the call is over, for example to log it or send a WhatsApp follow-up, tick **Call Ended** in the trigger's **Trigger On**.
|
|
135
|
+
|
|
136
|
+
## Example workflows
|
|
137
|
+
|
|
138
|
+
- **Appointment reminders:** Google Sheets or a schedule → *Vobiz: Make a Call* with a personalised message.
|
|
139
|
+
- **Log every call:** *Vobiz Trigger (Call Ended)* → Google Sheets or your CRM.
|
|
140
|
+
- **Missed-call follow-up:** *Vobiz Call Answered Trigger (Call Ended)* → If not answered → *Vobiz: Send* a WhatsApp template.
|
|
141
|
+
- **Recordings to cloud storage:** *Vobiz Trigger (Recording Ready, Download Recording on)* → Google Drive.
|
|
142
|
+
- **WhatsApp auto-reply:** *Vobiz WhatsApp Trigger (Message Received)* → *Vobiz: Send* a WhatsApp text.
|
|
143
|
+
- **Daily call report:** Schedule → *Vobiz: Call Record → Get Summary* → Slack.
|
|
144
|
+
|
|
145
|
+
## Good to know
|
|
146
|
+
|
|
147
|
+
- **Instant triggers need a public address.** Vobiz sends events over the internet, so the Call Answered and WhatsApp triggers need n8n to be reachable over HTTPS. This works automatically on n8n Cloud. On self-hosted n8n, set `WEBHOOK_URL` to your public address.
|
|
148
|
+
- **If your public address changes**, for example with a tunnel that gets a new address on every restart, unpublish and publish your trigger workflows again so Vobiz uses the new address.
|
|
149
|
+
- **WhatsApp's 24-hour rule.** Free-form messages can only be sent within 24 hours of the customer's last message. For a first message, or outside that window, send an approved template. A free-form message sent outside the window is reported as `failed` in a *Message Status Changed* event.
|
|
150
|
+
- **Recordings are private.** Their links need your Vobiz credential, so use **Recording → Download**, or **Download Recording** on the trigger, to get the file.
|
|
151
|
+
- **Call records** appear a few seconds after a call ends.
|
|
152
|
+
- **Phone numbers** use international format with the country code, for example `+919876543210`. Spaces and dashes are removed for you.
|
|
153
|
+
- **Hang Up on Voicemail** is off by default. Voicemail detection listens for up to 5 seconds and can mistake a person who stays silent for a machine.
|
|
154
|
+
- **Avoid Retry On Fail on Make a Call.** If a request is retried, the same call can be placed twice.
|
|
155
|
+
|
|
156
|
+
## Security
|
|
157
|
+
|
|
158
|
+
- Your Auth ID and Auth Token are kept in n8n's encrypted credential store and are sent only to Vobiz.
|
|
159
|
+
- Recording downloads send your credential only to Vobiz hosts, never to any other domain.
|
|
160
|
+
- WhatsApp events are verified with HMAC-SHA256, using a secret created for each subscription. Unsigned or forged events are rejected.
|
|
161
|
+
- The package has no runtime dependencies beyond n8n itself.
|
|
162
|
+
|
|
163
|
+
## Troubleshooting
|
|
164
|
+
|
|
165
|
+
| You see | Why | Fix |
|
|
166
|
+
|---|---|---|
|
|
167
|
+
| `Vobiz did not accept the Auth ID or Auth Token` | The credential is wrong | Copy both again from **Settings → API** in the Vobiz console |
|
|
168
|
+
| `Vobiz cannot reach an Answer URL on localhost` or `Vobiz cannot reach n8n on localhost` | n8n has no public address | Set `WEBHOOK_URL` to a public HTTPS address, then use the trigger's **Production URL** |
|
|
169
|
+
| The phone rings, then there is silence | The Answer URL is the trigger's Test URL, or the trigger workflow isn't published | Publish the trigger workflow and use its **Production URL** |
|
|
170
|
+
| `… already answers calls for the Vobiz application …` | That number is used by another setup | Choose a number marked **not linked** |
|
|
171
|
+
| `Your Vobiz balance is too low for this` | Your account balance | Top up in the Vobiz console |
|
|
172
|
+
| `The template "…" is PENDING_REVIEW, not approved` | Meta hasn't approved the template yet | Wait for approval, or choose another template |
|
|
173
|
+
| `No recent call matches these filters` | No matching call yet | Make and answer a call, wait a minute, and fetch again |
|
|
174
|
+
| Triggers stop receiving events after n8n restarts | n8n's public address changed | Unpublish and publish the workflow again |
|
|
175
|
+
|
|
176
|
+
## Compatibility
|
|
177
|
+
|
|
178
|
+
Built with [`@n8n/node-cli`](https://www.npmjs.com/package/@n8n/node-cli) and tested with n8n 2.37. You need a Vobiz account; the WhatsApp features also need a WhatsApp channel on that account.
|
|
179
|
+
|
|
180
|
+
## Development
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
git clone https://github.com/vobiz-ai/Vobiz-n8n-nodes.git
|
|
184
|
+
cd Vobiz-n8n-nodes
|
|
185
|
+
npm install
|
|
186
|
+
npm run build # compile to dist/
|
|
187
|
+
npm run lint # n8n's lint rules
|
|
188
|
+
npm test # unit tests against a mock Vobiz API
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
`npm run test:e2e` runs the built nodes inside a real n8n against the mock API, so nothing is called, texted or billed. To run a local n8n with the nodes loaded and test against a real Vobiz account, see [TESTING.md](TESTING.md).
|
|
192
|
+
|
|
193
|
+
Issues and pull requests are welcome.
|
|
194
|
+
|
|
195
|
+
## Support
|
|
196
|
+
|
|
197
|
+
- **Vobiz API documentation:** [vobiz.ai/docs](https://www.vobiz.ai/docs)
|
|
198
|
+
- **Bugs and feature requests:** [GitHub Issues](https://github.com/vobiz-ai/Vobiz-n8n-nodes/issues)
|
|
199
|
+
- **Vobiz account and billing:** [support@vobiz.ai](mailto:support@vobiz.ai)
|
|
200
|
+
|
|
201
|
+
## Version history
|
|
202
|
+
|
|
203
|
+
See [CHANGELOG.md](CHANGELOG.md).
|
|
204
|
+
|
|
205
|
+
## License
|
|
206
|
+
|
|
207
|
+
[MIT](LICENSE.md) © Vobiz AI
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IAuthenticateGeneric, Icon, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class VobizApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
icon: Icon;
|
|
6
|
+
documentationUrl: string;
|
|
7
|
+
properties: INodeProperties[];
|
|
8
|
+
authenticate: IAuthenticateGeneric;
|
|
9
|
+
test: ICredentialTestRequest;
|
|
10
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VobizApi = void 0;
|
|
4
|
+
class VobizApi {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'vobizApi';
|
|
7
|
+
this.displayName = 'Vobiz API';
|
|
8
|
+
this.icon = { light: 'file:../nodes/Vobiz/vobiz.svg', dark: 'file:../nodes/Vobiz/vobiz.dark.svg' };
|
|
9
|
+
this.documentationUrl = 'https://www.vobiz.ai/docs/api-reference/authentication';
|
|
10
|
+
this.properties = [
|
|
11
|
+
{
|
|
12
|
+
displayName: 'Auth ID',
|
|
13
|
+
name: 'authId',
|
|
14
|
+
type: 'string',
|
|
15
|
+
default: '',
|
|
16
|
+
required: true,
|
|
17
|
+
placeholder: 'e.g. MA_XXXXXXXX',
|
|
18
|
+
description: 'Your account Auth ID. Find it in the Vobiz console under Settings, API.',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
displayName: 'Auth Token',
|
|
22
|
+
name: 'authToken',
|
|
23
|
+
type: 'string',
|
|
24
|
+
typeOptions: { password: true },
|
|
25
|
+
default: '',
|
|
26
|
+
required: true,
|
|
27
|
+
description: 'Your account Auth Token, shown next to the Auth ID in the Vobiz console',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
displayName: 'API URL',
|
|
31
|
+
name: 'apiUrl',
|
|
32
|
+
type: 'string',
|
|
33
|
+
default: 'https://api.vobiz.ai',
|
|
34
|
+
description: 'Leave this as it is, unless Vobiz support asks you to change it',
|
|
35
|
+
},
|
|
36
|
+
];
|
|
37
|
+
this.authenticate = {
|
|
38
|
+
type: 'generic',
|
|
39
|
+
properties: {
|
|
40
|
+
headers: {
|
|
41
|
+
'X-Auth-ID': '={{$credentials.authId.trim()}}',
|
|
42
|
+
'X-Auth-Token': '={{$credentials.authToken.trim()}}',
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
this.test = {
|
|
47
|
+
request: {
|
|
48
|
+
baseURL: '={{$credentials.apiUrl}}',
|
|
49
|
+
url: '/api/v1/auth/me',
|
|
50
|
+
method: 'GET',
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.VobizApi = VobizApi;
|
|
56
|
+
//# sourceMappingURL=VobizApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VobizApi.credentials.js","sourceRoot":"","sources":["../../credentials/VobizApi.credentials.ts"],"names":[],"mappings":";;;AAQA,MAAa,QAAQ;IAArB;QACC,SAAI,GAAG,UAAU,CAAC;QAElB,gBAAW,GAAG,WAAW,CAAC;QAE1B,SAAI,GAAS,EAAE,KAAK,EAAE,+BAA+B,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC;QAEpG,qBAAgB,GAAG,wDAAwD,CAAC;QAE5E,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,kBAAkB;gBAC/B,WAAW,EAAE,yEAAyE;aACtF;YACD;gBACC,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,yEAAyE;aACtF;YACD;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,sBAAsB;gBAC/B,WAAW,EAAE,iEAAiE;aAC9E;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,WAAW,EAAE,iCAAiC;oBAC9C,cAAc,EAAE,oCAAoC;iBACpD;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,0BAA0B;gBACnC,GAAG,EAAE,iBAAiB;gBACtB,MAAM,EAAE,KAAK;aACb;SACD,CAAC;IACH,CAAC;CAAA;AAtDD,4BAsDC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
|
|
2
|
+
import { searchNumbers } from './operations';
|
|
3
|
+
import { searchWhatsAppChannels, searchWhatsAppTemplates } from '../shared/whatsapp';
|
|
4
|
+
export declare class Vobiz implements INodeType {
|
|
5
|
+
description: INodeTypeDescription;
|
|
6
|
+
methods: {
|
|
7
|
+
listSearch: {
|
|
8
|
+
searchNumbers: typeof searchNumbers;
|
|
9
|
+
searchWhatsAppChannels: typeof searchWhatsAppChannels;
|
|
10
|
+
searchWhatsAppTemplates: typeof searchWhatsAppTemplates;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Vobiz = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const CallDescription_1 = require("./descriptions/CallDescription");
|
|
6
|
+
const CallRecordDescription_1 = require("./descriptions/CallRecordDescription");
|
|
7
|
+
const RecordingDescription_1 = require("./descriptions/RecordingDescription");
|
|
8
|
+
const WhatsAppMessageDescription_1 = require("./descriptions/WhatsAppMessageDescription");
|
|
9
|
+
const operations_1 = require("./operations");
|
|
10
|
+
const whatsapp_1 = require("../shared/whatsapp");
|
|
11
|
+
class Vobiz {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.description = {
|
|
14
|
+
displayName: 'Vobiz',
|
|
15
|
+
name: 'vobiz',
|
|
16
|
+
icon: { light: 'file:vobiz.svg', dark: 'file:vobiz.dark.svg' },
|
|
17
|
+
group: ['output'],
|
|
18
|
+
version: 1,
|
|
19
|
+
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
|
20
|
+
description: 'Make calls, get call records and recordings, and send WhatsApp messages with Vobiz',
|
|
21
|
+
defaults: {
|
|
22
|
+
name: 'Vobiz',
|
|
23
|
+
},
|
|
24
|
+
usableAsTool: true,
|
|
25
|
+
inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
26
|
+
outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
27
|
+
credentials: [
|
|
28
|
+
{
|
|
29
|
+
name: 'vobizApi',
|
|
30
|
+
required: true,
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
properties: [
|
|
34
|
+
{
|
|
35
|
+
displayName: 'Resource',
|
|
36
|
+
name: 'resource',
|
|
37
|
+
type: 'options',
|
|
38
|
+
noDataExpression: true,
|
|
39
|
+
options: [
|
|
40
|
+
{ name: 'Call', value: 'call' },
|
|
41
|
+
{ name: 'Call Record', value: 'callRecord' },
|
|
42
|
+
{ name: 'Recording', value: 'recording' },
|
|
43
|
+
{ name: 'WhatsApp Message', value: 'whatsAppMessage' },
|
|
44
|
+
],
|
|
45
|
+
default: 'call',
|
|
46
|
+
},
|
|
47
|
+
...CallDescription_1.callOperations,
|
|
48
|
+
...CallDescription_1.callFields,
|
|
49
|
+
...CallRecordDescription_1.callRecordOperations,
|
|
50
|
+
...CallRecordDescription_1.callRecordFields,
|
|
51
|
+
...RecordingDescription_1.recordingOperations,
|
|
52
|
+
...RecordingDescription_1.recordingFields,
|
|
53
|
+
...WhatsAppMessageDescription_1.whatsAppMessageOperations,
|
|
54
|
+
...WhatsAppMessageDescription_1.whatsAppMessageFields,
|
|
55
|
+
],
|
|
56
|
+
};
|
|
57
|
+
this.methods = {
|
|
58
|
+
listSearch: {
|
|
59
|
+
searchNumbers: operations_1.searchNumbers,
|
|
60
|
+
searchWhatsAppChannels: whatsapp_1.searchWhatsAppChannels,
|
|
61
|
+
searchWhatsAppTemplates: whatsapp_1.searchWhatsAppTemplates,
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
async execute() {
|
|
66
|
+
var _a;
|
|
67
|
+
var _b;
|
|
68
|
+
const items = this.getInputData();
|
|
69
|
+
const returnData = [];
|
|
70
|
+
const whatsApp = new operations_1.WhatsAppLookups(this);
|
|
71
|
+
for (let i = 0; i < items.length; i++) {
|
|
72
|
+
try {
|
|
73
|
+
const resource = this.getNodeParameter('resource', i);
|
|
74
|
+
const operation = this.getNodeParameter('operation', i);
|
|
75
|
+
if (resource === 'call' && operation === 'make') {
|
|
76
|
+
returnData.push(await operations_1.makeCall.call(this, i));
|
|
77
|
+
}
|
|
78
|
+
else if (resource === 'callRecord' && operation === 'get') {
|
|
79
|
+
returnData.push(await operations_1.getCallRecord.call(this, i));
|
|
80
|
+
}
|
|
81
|
+
else if (resource === 'callRecord' && operation === 'getAll') {
|
|
82
|
+
returnData.push(...(await operations_1.getManyCallRecords.call(this, i)));
|
|
83
|
+
}
|
|
84
|
+
else if (resource === 'callRecord' && operation === 'getSummary') {
|
|
85
|
+
returnData.push(await operations_1.getCallSummary.call(this, i));
|
|
86
|
+
}
|
|
87
|
+
else if (resource === 'recording' && operation === 'get') {
|
|
88
|
+
returnData.push({ json: await operations_1.getRecording.call(this, i), pairedItem: { item: i } });
|
|
89
|
+
}
|
|
90
|
+
else if (resource === 'recording' && operation === 'getAll') {
|
|
91
|
+
returnData.push(...(await operations_1.getManyRecordings.call(this, i)));
|
|
92
|
+
}
|
|
93
|
+
else if (resource === 'recording' && operation === 'download') {
|
|
94
|
+
returnData.push(await operations_1.downloadRecordingItem.call(this, i));
|
|
95
|
+
}
|
|
96
|
+
else if (resource === 'whatsAppMessage' && operation === 'send') {
|
|
97
|
+
returnData.push(await operations_1.sendWhatsAppMessage.call(this, i, whatsApp));
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation "${operation}" is not supported for "${resource}"`, { itemIndex: i });
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
if (this.continueOnFail()) {
|
|
105
|
+
returnData.push({
|
|
106
|
+
json: { error: error.message },
|
|
107
|
+
pairedItem: { item: i },
|
|
108
|
+
});
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (error instanceof n8n_workflow_1.NodeApiError || error instanceof n8n_workflow_1.NodeOperationError) {
|
|
112
|
+
const known = error;
|
|
113
|
+
(_a = (_b = known.context).itemIndex) !== null && _a !== void 0 ? _a : (_b.itemIndex = i);
|
|
114
|
+
throw known;
|
|
115
|
+
}
|
|
116
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), error, { itemIndex: i });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return [returnData];
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
exports.Vobiz = Vobiz;
|
|
123
|
+
//# sourceMappingURL=Vobiz.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Vobiz.node.js","sourceRoot":"","sources":["../../../nodes/Vobiz/Vobiz.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"node": "@vobiz-ai/n8n-nodes-vobiz.vobiz",
|
|
3
|
+
"nodeVersion": "1.0",
|
|
4
|
+
"codexVersion": "1.0",
|
|
5
|
+
"categories": [
|
|
6
|
+
"Communication"
|
|
7
|
+
],
|
|
8
|
+
"alias": [
|
|
9
|
+
"call",
|
|
10
|
+
"phone",
|
|
11
|
+
"voice",
|
|
12
|
+
"telephony",
|
|
13
|
+
"cdr",
|
|
14
|
+
"call record",
|
|
15
|
+
"recording",
|
|
16
|
+
"whatsapp"
|
|
17
|
+
],
|
|
18
|
+
"resources": {
|
|
19
|
+
"credentialDocumentation": [
|
|
20
|
+
{
|
|
21
|
+
"url": "https://github.com/vobiz-ai/Vobiz-n8n-nodes#credentials"
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"primaryDocumentation": [
|
|
25
|
+
{
|
|
26
|
+
"url": "https://github.com/vobiz-ai/Vobiz-n8n-nodes#readme"
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.callFields = exports.callOperations = void 0;
|
|
4
|
+
const showForMake = { show: { resource: ['call'], operation: ['make'] } };
|
|
5
|
+
exports.callOperations = [
|
|
6
|
+
{
|
|
7
|
+
displayName: 'Operation',
|
|
8
|
+
name: 'operation',
|
|
9
|
+
type: 'options',
|
|
10
|
+
noDataExpression: true,
|
|
11
|
+
displayOptions: { show: { resource: ['call'] } },
|
|
12
|
+
options: [
|
|
13
|
+
{
|
|
14
|
+
name: 'Make',
|
|
15
|
+
value: 'make',
|
|
16
|
+
description: 'Call a phone number and say a message when they answer',
|
|
17
|
+
action: 'Make a call',
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
default: 'make',
|
|
21
|
+
},
|
|
22
|
+
];
|
|
23
|
+
exports.callFields = [
|
|
24
|
+
{
|
|
25
|
+
displayName: 'From Number',
|
|
26
|
+
name: 'from',
|
|
27
|
+
type: 'resourceLocator',
|
|
28
|
+
default: { mode: 'list', value: '' },
|
|
29
|
+
required: true,
|
|
30
|
+
description: 'The Vobiz number to call from. The person sees it as the caller ID.',
|
|
31
|
+
displayOptions: showForMake,
|
|
32
|
+
modes: [
|
|
33
|
+
{
|
|
34
|
+
displayName: 'From List',
|
|
35
|
+
name: 'list',
|
|
36
|
+
type: 'list',
|
|
37
|
+
typeOptions: { searchListMethod: 'searchNumbers', searchable: true },
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
displayName: 'Number',
|
|
41
|
+
name: 'number',
|
|
42
|
+
type: 'string',
|
|
43
|
+
placeholder: 'e.g. +918012345678',
|
|
44
|
+
validation: [
|
|
45
|
+
{
|
|
46
|
+
type: 'regex',
|
|
47
|
+
properties: {
|
|
48
|
+
regex: '^\\+?[0-9][0-9 ()-]{5,19}$',
|
|
49
|
+
errorMessage: 'Enter a phone number with its country code, e.g. +918012345678',
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
displayName: 'To',
|
|
58
|
+
name: 'to',
|
|
59
|
+
type: 'string',
|
|
60
|
+
default: '',
|
|
61
|
+
required: true,
|
|
62
|
+
placeholder: 'e.g. +919876543210',
|
|
63
|
+
description: 'The phone number to call, with its country code',
|
|
64
|
+
displayOptions: showForMake,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
displayName: 'Answer URL',
|
|
68
|
+
name: 'answerUrl',
|
|
69
|
+
type: 'string',
|
|
70
|
+
default: '',
|
|
71
|
+
required: true,
|
|
72
|
+
placeholder: 'e.g. https://n8n.example.com/webhook/1a2b3c/call-answered',
|
|
73
|
+
description: 'Where Vobiz asks what to do once the call is answered. Paste the Production URL of a Vobiz Call Answered Trigger (it contains /webhook/, not /webhook-test/), or any address that returns Vobiz XML.',
|
|
74
|
+
displayOptions: showForMake,
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
displayName: 'Message',
|
|
78
|
+
name: 'message',
|
|
79
|
+
type: 'string',
|
|
80
|
+
typeOptions: { rows: 3 },
|
|
81
|
+
default: '',
|
|
82
|
+
placeholder: 'e.g. Hi Asha, your appointment is tomorrow at 10 am.',
|
|
83
|
+
description: 'What to say when the call is answered. Works when the Answer URL is a Vobiz Call Answered Trigger. Leave empty to use the message set on the trigger.',
|
|
84
|
+
displayOptions: showForMake,
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
displayName: 'Options',
|
|
88
|
+
name: 'options',
|
|
89
|
+
type: 'collection',
|
|
90
|
+
placeholder: 'Add option',
|
|
91
|
+
default: {},
|
|
92
|
+
displayOptions: showForMake,
|
|
93
|
+
options: [
|
|
94
|
+
{
|
|
95
|
+
displayName: 'Answer Method',
|
|
96
|
+
name: 'answerMethod',
|
|
97
|
+
type: 'options',
|
|
98
|
+
options: [
|
|
99
|
+
{ name: 'GET', value: 'GET' },
|
|
100
|
+
{ name: 'POST', value: 'POST' },
|
|
101
|
+
],
|
|
102
|
+
default: 'POST',
|
|
103
|
+
description: 'How Vobiz calls the Answer URL. Keep POST for a Vobiz Call Answered Trigger.',
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
displayName: 'Caller Name',
|
|
107
|
+
name: 'callerName',
|
|
108
|
+
type: 'string',
|
|
109
|
+
default: '',
|
|
110
|
+
description: 'The name shown to the person being called, where their phone supports it (up to 50 characters)',
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
displayName: 'Hang Up on Voicemail',
|
|
114
|
+
name: 'hangUpOnVoicemail',
|
|
115
|
+
type: 'boolean',
|
|
116
|
+
default: false,
|
|
117
|
+
description: 'Whether to hang up when an answering machine or voicemail picks up instead of a person. Vobiz listens for up to 5 seconds before the message plays, and can mistake a person who stays silent or talks at length for a machine.',
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
displayName: 'Hangup URL',
|
|
121
|
+
name: 'hangupUrl',
|
|
122
|
+
type: 'string',
|
|
123
|
+
default: '',
|
|
124
|
+
description: 'An address Vobiz notifies when the call ends. Leave it empty when the Answer URL is a Vobiz Call Answered Trigger: that trigger is told automatically.',
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
displayName: 'Ring Timeout (Seconds)',
|
|
128
|
+
name: 'ringTimeout',
|
|
129
|
+
type: 'number',
|
|
130
|
+
typeOptions: { minValue: 5, maxValue: 120 },
|
|
131
|
+
default: 45,
|
|
132
|
+
description: 'How long to let the phone ring before giving up',
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
displayName: 'Send Digits',
|
|
136
|
+
name: 'sendDigits',
|
|
137
|
+
type: 'string',
|
|
138
|
+
default: '',
|
|
139
|
+
placeholder: 'e.g. 1w2',
|
|
140
|
+
description: 'Keypad presses to send once the call connects, for example to reach an extension. Use w for a half-second pause and W for a one-second pause.',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
displayName: 'Time Limit (Seconds)',
|
|
144
|
+
name: 'timeLimit',
|
|
145
|
+
type: 'number',
|
|
146
|
+
typeOptions: { minValue: 10 },
|
|
147
|
+
default: 3600,
|
|
148
|
+
description: 'The longest the call may last once answered',
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
},
|
|
152
|
+
];
|
|
153
|
+
//# sourceMappingURL=CallDescription.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CallDescription.js","sourceRoot":"","sources":["../../../../nodes/Vobiz/descriptions/CallDescription.ts"],"names":[],"mappings":"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"}
|