@replyio/n8n-nodes-reply 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/README.md +46 -0
- package/dist/credentials/ReplyApi.credentials.d.ts +20 -0
- package/dist/credentials/ReplyApi.credentials.js +36 -0
- package/dist/credentials/ReplyApi.credentials.js.map +1 -0
- package/dist/icons/reply.dark.svg +58 -0
- package/dist/icons/reply.svg +1 -0
- package/dist/nodes/Reply/Reply.node.d.ts +5 -0
- package/dist/nodes/Reply/Reply.node.js +64 -0
- package/dist/nodes/Reply/Reply.node.js.map +1 -0
- package/dist/nodes/Reply/Reply.node.json +19 -0
- package/dist/nodes/Reply/ReplyTrigger.node.d.ts +12 -0
- package/dist/nodes/Reply/ReplyTrigger.node.js +308 -0
- package/dist/nodes/Reply/ReplyTrigger.node.js.map +1 -0
- package/dist/nodes/Reply/actions/contact/create.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/contact/create.operation.js +29 -0
- package/dist/nodes/Reply/actions/contact/create.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/contact/delete.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/contact/delete.operation.js +26 -0
- package/dist/nodes/Reply/actions/contact/delete.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/contact/getAll.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/contact/getAll.operation.js +15 -0
- package/dist/nodes/Reply/actions/contact/getAll.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/contact/getByEmail.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/contact/getByEmail.operation.js +23 -0
- package/dist/nodes/Reply/actions/contact/getByEmail.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/contact/getById.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/contact/getById.operation.js +20 -0
- package/dist/nodes/Reply/actions/contact/getById.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/contact/index.d.ts +16 -0
- package/dist/nodes/Reply/actions/contact/index.js +429 -0
- package/dist/nodes/Reply/actions/contact/index.js.map +1 -0
- package/dist/nodes/Reply/actions/contact/update.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/contact/update.operation.js +54 -0
- package/dist/nodes/Reply/actions/contact/update.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/contactStatus/index.d.ts +24 -0
- package/dist/nodes/Reply/actions/contactStatus/index.js +191 -0
- package/dist/nodes/Reply/actions/contactStatus/index.js.map +1 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsActive.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsActive.operation.js +8 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsActive.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsBounced.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsBounced.operation.js +8 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsBounced.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsCalled.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsCalled.operation.js +8 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsCalled.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsFinished.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsFinished.operation.js +8 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsFinished.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsMeetingBooked.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsMeetingBooked.operation.js +8 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsMeetingBooked.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsOptedOut.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsOptedOut.operation.js +8 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsOptedOut.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsOutOfOffice.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsOutOfOffice.operation.js +8 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsOutOfOffice.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsPaused.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsPaused.operation.js +8 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsPaused.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsReplied.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsReplied.operation.js +8 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsReplied.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsToCall.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsToCall.operation.js +8 -0
- package/dist/nodes/Reply/actions/contactStatus/markAsToCall.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/contactStatus/statusHelper.d.ts +3 -0
- package/dist/nodes/Reply/actions/contactStatus/statusHelper.js +68 -0
- package/dist/nodes/Reply/actions/contactStatus/statusHelper.js.map +1 -0
- package/dist/nodes/Reply/actions/router.d.ts +2 -0
- package/dist/nodes/Reply/actions/router.js +45 -0
- package/dist/nodes/Reply/actions/router.js.map +1 -0
- package/dist/nodes/Reply/actions/sequence/addContact.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/sequence/addContact.operation.js +55 -0
- package/dist/nodes/Reply/actions/sequence/addContact.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/sequence/archive.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/sequence/archive.operation.js +26 -0
- package/dist/nodes/Reply/actions/sequence/archive.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/sequence/getAll.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/sequence/getAll.operation.js +15 -0
- package/dist/nodes/Reply/actions/sequence/getAll.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/sequence/getById.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/sequence/getById.operation.js +20 -0
- package/dist/nodes/Reply/actions/sequence/getById.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/sequence/getContacts.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/sequence/getContacts.operation.js +26 -0
- package/dist/nodes/Reply/actions/sequence/getContacts.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/sequence/index.d.ts +18 -0
- package/dist/nodes/Reply/actions/sequence/index.js +388 -0
- package/dist/nodes/Reply/actions/sequence/index.js.map +1 -0
- package/dist/nodes/Reply/actions/sequence/pause.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/sequence/pause.operation.js +26 -0
- package/dist/nodes/Reply/actions/sequence/pause.operation.js.map +1 -0
- package/dist/nodes/Reply/actions/sequence/start.operation.d.ts +2 -0
- package/dist/nodes/Reply/actions/sequence/start.operation.js +26 -0
- package/dist/nodes/Reply/actions/sequence/start.operation.js.map +1 -0
- package/dist/nodes/Reply/triggers/filters.d.ts +6 -0
- package/dist/nodes/Reply/triggers/filters.js +53 -0
- package/dist/nodes/Reply/triggers/filters.js.map +1 -0
- package/dist/nodes/Reply/utils/GenericFunctions.d.ts +4 -0
- package/dist/nodes/Reply/utils/GenericFunctions.js +62 -0
- package/dist/nodes/Reply/utils/GenericFunctions.js.map +1 -0
- package/dist/nodes/Reply/utils/constants.d.ts +61 -0
- package/dist/nodes/Reply/utils/constants.js +44 -0
- package/dist/nodes/Reply/utils/constants.js.map +1 -0
- package/dist/nodes/Reply/utils/mappings.d.ts +11 -0
- package/dist/nodes/Reply/utils/mappings.js +18 -0
- package/dist/nodes/Reply/utils/mappings.js.map +1 -0
- package/dist/nodes/Reply/utils/validation.d.ts +51 -0
- package/dist/nodes/Reply/utils/validation.js +220 -0
- package/dist/nodes/Reply/utils/validation.js.map +1 -0
- package/dist/package.json +58 -0
- package/dist/publicUrls.d.ts +3 -0
- package/dist/publicUrls.js +7 -0
- package/dist/publicUrls.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +58 -0
package/README.md
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# @replyio/n8n-nodes-reply
|
|
2
|
+
|
|
3
|
+
This is an n8n community node. It lets you use _app/service name_ in your n8n workflows.
|
|
4
|
+
|
|
5
|
+
_App/service name_ is _one or two sentences describing the service this node integrates with_.
|
|
6
|
+
|
|
7
|
+
[n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/sustainable-use-license/) workflow automation platform.
|
|
8
|
+
|
|
9
|
+
[Installation](#installation)
|
|
10
|
+
[Operations](#operations)
|
|
11
|
+
[Credentials](#credentials)
|
|
12
|
+
[Compatibility](#compatibility)
|
|
13
|
+
[Usage](#usage)
|
|
14
|
+
[Resources](#resources)
|
|
15
|
+
[Version history](#version-history)
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.
|
|
20
|
+
|
|
21
|
+
## Operations
|
|
22
|
+
|
|
23
|
+
_List the operations supported by your node._
|
|
24
|
+
|
|
25
|
+
## Credentials
|
|
26
|
+
|
|
27
|
+
_If users need to authenticate with the app/service, provide details here. You should include prerequisites (such as signing up with the service), available authentication methods, and how to set them up._
|
|
28
|
+
|
|
29
|
+
## Compatibility
|
|
30
|
+
|
|
31
|
+
_State the minimum n8n version, as well as which versions you test against. You can also include any known version incompatibility issues._
|
|
32
|
+
|
|
33
|
+
## Usage
|
|
34
|
+
|
|
35
|
+
_This is an optional section. Use it to help users with any difficult or confusing aspects of the node._
|
|
36
|
+
|
|
37
|
+
_By the time users are looking for community nodes, they probably already know n8n basics. But if you expect new users, you can link to the [Try it out](https://docs.n8n.io/try-it-out/) documentation to help them get started._
|
|
38
|
+
|
|
39
|
+
## Resources
|
|
40
|
+
|
|
41
|
+
* [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
|
|
42
|
+
* _Link to app/service documentation._
|
|
43
|
+
|
|
44
|
+
## Version history
|
|
45
|
+
|
|
46
|
+
_This is another optional section. If your node has multiple versions, include a short description of available versions and what changed, as well as any compatibility impact._
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class ReplyApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
icon: "file:../icons/reply.svg";
|
|
6
|
+
documentationUrl: string;
|
|
7
|
+
properties: INodeProperties[];
|
|
8
|
+
test: {
|
|
9
|
+
request: {
|
|
10
|
+
baseURL: string;
|
|
11
|
+
url: string;
|
|
12
|
+
qs: {
|
|
13
|
+
top: number;
|
|
14
|
+
};
|
|
15
|
+
headers: {
|
|
16
|
+
'X-Api-Key': string;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReplyApi = void 0;
|
|
4
|
+
const publicUrls_1 = require("../publicUrls");
|
|
5
|
+
class ReplyApi {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.name = 'replyApi';
|
|
8
|
+
this.displayName = 'Reply API';
|
|
9
|
+
this.icon = 'file:../icons/reply.svg';
|
|
10
|
+
this.documentationUrl = 'https://apidocs.reply.io/';
|
|
11
|
+
this.properties = [
|
|
12
|
+
{
|
|
13
|
+
displayName: 'API Key',
|
|
14
|
+
name: 'apiKey',
|
|
15
|
+
type: 'string',
|
|
16
|
+
typeOptions: { password: true },
|
|
17
|
+
default: '',
|
|
18
|
+
required: true,
|
|
19
|
+
},
|
|
20
|
+
];
|
|
21
|
+
this.test = {
|
|
22
|
+
request: {
|
|
23
|
+
baseURL: `${publicUrls_1.publicUrls.Reply2Api}/v3`,
|
|
24
|
+
url: '/sequences',
|
|
25
|
+
qs: {
|
|
26
|
+
top: 1,
|
|
27
|
+
},
|
|
28
|
+
headers: {
|
|
29
|
+
'X-Api-Key': '={{$credentials.apiKey}}',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.ReplyApi = ReplyApi;
|
|
36
|
+
//# sourceMappingURL=ReplyApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReplyApi.credentials.js","sourceRoot":"","sources":["../../credentials/ReplyApi.credentials.ts"],"names":[],"mappings":";;;AAEA,8CAA2C;AAE3C,MAAa,QAAQ;IAArB;QACC,SAAI,GAAG,UAAU,CAAC;QAElB,gBAAW,GAAG,WAAW,CAAC;QAE1B,SAAI,GAAG,yBAAkC,CAAC;QAE1C,qBAAgB,GAAG,2BAA2B,CAAC;QAE/C,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;aACd;SACD,CAAC;QAEF,SAAI,GAAG;YACN,OAAO,EAAE;gBACR,OAAO,EAAE,GAAG,uBAAU,CAAC,SAAS,KAAK;gBACrC,GAAG,EAAE,YAAY;gBACjB,EAAE,EAAE;oBACH,GAAG,EAAE,CAAC;iBACN;gBACD,OAAO,EAAE;oBACR,WAAW,EAAE,0BAA0B;iBACvC;aACD;SACD,CAAC;IACH,CAAC;CAAA;AAhCD,4BAgCC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="100%" viewBox="0 0 250 250" enable-background="new 0 0 250 259" xml:space="preserve">
|
|
2
|
+
|
|
3
|
+
<path fill="#F6B802" opacity="1.000000" stroke="none" d="
|
|
4
|
+
M1.000000,112.468658
|
|
5
|
+
C1.665502,111.184738 2.824452,110.424423 2.922284,109.545944
|
|
6
|
+
C4.327447,96.928238 6.352731,84.468773 10.823570,72.495628
|
|
7
|
+
C19.145967,50.207809 35.127312,36.479786 57.756878,29.992420
|
|
8
|
+
C83.093742,22.728933 109.055229,22.519073 135.079193,23.038803
|
|
9
|
+
C138.674545,23.110607 142.259705,23.692116 146.250488,24.377464
|
|
10
|
+
C136.024780,36.042267 129.309662,49.296135 129.247742,64.946373
|
|
11
|
+
C129.147614,90.247345 140.469559,109.358910 163.574417,119.891380
|
|
12
|
+
C186.237259,130.222351 207.655655,126.464676 226.855118,110.504654
|
|
13
|
+
C228.102081,109.468102 229.504303,108.618317 230.834305,107.681648
|
|
14
|
+
C231.222961,121.768639 232.527786,135.904205 231.783905,149.931137
|
|
15
|
+
C230.689346,170.569992 228.729614,191.389359 219.714706,210.385925
|
|
16
|
+
C210.254364,230.321121 193.689774,242.007263 172.375900,246.960052
|
|
17
|
+
C156.392700,250.674133 140.262756,253.371445 123.743469,253.033920
|
|
18
|
+
C114.559074,252.846237 105.308968,253.664673 96.191963,252.858841
|
|
19
|
+
C78.385262,251.284958 60.337048,249.778946 44.100933,241.444733
|
|
20
|
+
C23.407598,230.822556 10.663095,213.950851 6.990419,190.668182
|
|
21
|
+
C5.645378,182.141403 4.309156,173.613083 2.904418,165.096115
|
|
22
|
+
C2.811500,164.532730 2.168468,164.060104 1.390655,163.772629
|
|
23
|
+
C1.000000,146.979111 1.000000,129.958206 1.000000,112.468658
|
|
24
|
+
z" data-index="0" style="opacity: 1; visibility: visible;"></path>
|
|
25
|
+
<path fill="#0C043F" opacity="1.000000" stroke="none" d="
|
|
26
|
+
M821.000000,114.666664
|
|
27
|
+
C819.775269,116.822899 818.171326,118.496284 817.384521,120.491875
|
|
28
|
+
C809.525085,140.424286 801.835144,160.423431 794.026672,180.376083
|
|
29
|
+
C787.488708,197.082352 781.505371,214.046432 774.095764,230.360107
|
|
30
|
+
C765.588684,249.090134 742.281860,256.086792 724.019043,246.578827
|
|
31
|
+
C721.428223,245.230011 720.610168,243.862122 721.910461,241.088730
|
|
32
|
+
C723.739990,237.186295 725.289856,233.150787 726.902222,229.149200
|
|
33
|
+
C727.965088,226.511459 729.346008,225.698715 732.255554,227.035172
|
|
34
|
+
C743.240051,232.080765 750.814087,227.654755 756.330322,216.822662
|
|
35
|
+
C759.289978,211.010895 758.987732,206.332932 756.408875,200.492264
|
|
36
|
+
C743.859497,172.070114 731.784973,143.438309 719.558289,114.873901
|
|
37
|
+
C719.442688,114.603889 719.543884,114.241089 719.543884,113.093552
|
|
38
|
+
C728.111877,113.093552 736.672974,112.974762 745.221863,113.244766
|
|
39
|
+
C746.283630,113.278313 747.765564,115.205864 748.234314,116.542740
|
|
40
|
+
C755.322144,136.759521 762.268066,157.026031 769.275635,177.271042
|
|
41
|
+
C769.524353,177.989700 770.065125,178.607224 770.791321,179.799820
|
|
42
|
+
C771.638977,178.195892 772.421448,177.137344 772.792603,175.950195
|
|
43
|
+
C778.932617,156.308502 785.032227,136.654160 791.108826,116.992714
|
|
44
|
+
C792.036743,113.990097 793.918213,112.875397 797.068420,112.947968
|
|
45
|
+
C804.729980,113.124504 812.397888,113.025566 820.531616,113.018799
|
|
46
|
+
C821.000000,113.444443 821.000000,113.888893 821.000000,114.666664
|
|
47
|
+
z" data-index="1" style="visibility: visible; opacity: 1; fill: rgb(255, 255, 255);"></path>
|
|
48
|
+
<path fill="#015AFE" opacity="1.000000" stroke="none" d="
|
|
49
|
+
M231.037750,107.420792
|
|
50
|
+
C229.504303,108.618317 228.102081,109.468102 226.855118,110.504654
|
|
51
|
+
C207.655655,126.464676 186.237259,130.222351 163.574417,119.891380
|
|
52
|
+
C140.469559,109.358910 129.147614,90.247345 129.247742,64.946373
|
|
53
|
+
C129.309662,49.296135 136.024780,36.042267 146.687698,24.393597
|
|
54
|
+
C164.236313,6.850682 191.235580,3.082598 212.219406,12.885426
|
|
55
|
+
C231.331161,21.813702 242.916183,36.989494 246.106995,58.388718
|
|
56
|
+
C248.908691,77.178520 243.488693,93.126305 231.037750,107.420792
|
|
57
|
+
z" data-index="2" style="opacity: 1; visibility: visible;"></path>
|
|
58
|
+
</svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg width="670" height="660" version="1.1" xmlns="http://www.w3.org/2000/svg" desc="Created with imagetracer.js version 1.2.6" ><path fill="rgb(0,90,255)" stroke="rgb(0,90,255)" stroke-width="1" opacity="1" d="M 461.5 0 L 552.5 0 Q 597.5 14.5 625 46.5 Q 645.7 69.3 657 101.5 L 664 133.5 L 665 159.5 L 664 160.5 L 664 170.5 L 663 171.5 L 662 183.5 Q 657.7 203.2 650 219.5 Q 635.6 249.2 612.5 270 Q 591.9 288.9 563.5 300 L 535.5 308 L 520.5 309 L 519.5 310 L 493.5 310 L 461.5 304 L 442.5 297 Q 412.9 283.6 392 261.5 Q 370.3 239.2 358 207.5 L 350 177.5 L 349 160.5 L 348 159.5 L 348 143.5 L 349 142.5 L 349 132.5 L 352 115.5 L 361 88.5 Q 374.9 57.4 398.5 36 Q 423.8 11.8 461.5 0 Z " />d="M 914.5 174 L 1036 174.5 L 914.5 175 L 914.5 174 Z " /><path fill="rgb(128,173,253)" stroke="rgb(128,173,253)" stroke-width="1" opacity="1" d="M 287.5 34 L 345.5 34 L 346.5 35 L 363.5 35 L 364.5 36 L 375.5 36 L 376.5 37 L 396 38.5 Q 370.3 62.3 357 98.5 L 350 125.5 L 349 142.5 L 348 143.5 L 348 159.5 L 349 160.5 L 349 170.5 L 350 171.5 L 351 183.5 Q 355.3 203.2 363 219.5 Q 375.7 245.8 395.5 265 Q 418.7 288.3 452.5 301 L 484.5 309 L 492.5 309 L 493.5 310 L 519.5 310 L 520.5 309 L 528.5 309 L 544.5 306 L 568.5 298 Q 599.3 284.8 620.5 262 L 622 287.5 L 623 288.5 L 623 303.5 L 624 304.5 L 625 350.5 L 624 351.5 L 624 382.5 L 623 383.5 L 623 395.5 L 622 396.5 L 620 424.5 L 619 425.5 L 618 439.5 L 613 463.5 L 613 468.5 L 605 504.5 Q 588.8 559.3 551.5 593 Q 519.9 622.4 472.5 636 L 431.5 645 L 401.5 649 L 400.5 650 L 393.5 650 L 392.5 651 L 384.5 651 L 374.5 653 L 363.5 653 L 362.5 654 L 348.5 654 L 347.5 655 L 316.5 655 L 315.5 656 L 305.5 656 L 304.5 655 L 273.5 655 L 272.5 654 L 237.5 652 L 236.5 651 L 229.5 651 L 228.5 650 L 221.5 650 L 207.5 647 L 195.5 646 L 153.5 637 Q 95.9 619.1 61 578.5 Q 32.7 547.8 21 500.5 L 12 454.5 L 12 448.5 L 7 419.5 L 6 401.5 L 5 400.5 L 4 370.5 L 3 369.5 L 3 317.5 L 4 316.5 L 5 286.5 L 6 285.5 L 6 277.5 L 7 276.5 L 7 268.5 L 8 267.5 L 10 246.5 L 18 203.5 L 26 173.5 Q 42.9 125.4 77.5 95 Q 108 67.5 152.5 54 L 181.5 47 L 220.5 40 L 245.5 38 L 246.5 37 L 255.5 37 L 256.5 36 L 268.5 36 L 269.5 35 L 286.5 35 L 287.5 34 Z " /></svg>
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Reply = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const router_1 = require("./actions/router");
|
|
6
|
+
const contact_1 = require("./actions/contact");
|
|
7
|
+
const contactStatus_1 = require("./actions/contactStatus");
|
|
8
|
+
const sequence_1 = require("./actions/sequence");
|
|
9
|
+
class Reply {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.description = {
|
|
12
|
+
displayName: 'Reply',
|
|
13
|
+
name: 'reply',
|
|
14
|
+
icon: { light: 'file:../../icons/reply.svg', dark: 'file:../../icons/reply.dark.svg' },
|
|
15
|
+
group: ['transform'],
|
|
16
|
+
version: 1,
|
|
17
|
+
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
|
18
|
+
description: 'Interact with Reply.io API',
|
|
19
|
+
defaults: {
|
|
20
|
+
name: 'Reply',
|
|
21
|
+
},
|
|
22
|
+
inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
23
|
+
outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
24
|
+
usableAsTool: true,
|
|
25
|
+
credentials: [
|
|
26
|
+
{
|
|
27
|
+
name: 'replyApi',
|
|
28
|
+
required: true,
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
properties: [
|
|
32
|
+
{
|
|
33
|
+
displayName: 'Resource',
|
|
34
|
+
name: 'resource',
|
|
35
|
+
type: 'options',
|
|
36
|
+
noDataExpression: true,
|
|
37
|
+
options: [
|
|
38
|
+
{
|
|
39
|
+
name: 'Contact',
|
|
40
|
+
value: 'contact',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Contact Status',
|
|
44
|
+
value: 'contactStatus',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'Sequence',
|
|
48
|
+
value: 'sequence',
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
default: 'contact',
|
|
52
|
+
},
|
|
53
|
+
...contact_1.description,
|
|
54
|
+
...contactStatus_1.description,
|
|
55
|
+
...sequence_1.description,
|
|
56
|
+
],
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async execute() {
|
|
60
|
+
return router_1.router.call(this);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.Reply = Reply;
|
|
64
|
+
//# sourceMappingURL=Reply.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Reply.node.js","sourceRoot":"","sources":["../../../nodes/Reply/Reply.node.ts"],"names":[],"mappings":";;;AAMA,+CAAmD;AAEnD,6CAA0C;AAC1C,+CAAsE;AACtE,2DAAkF;AAClF,iDAAwE;AAExE,MAAa,KAAK;IAAlB;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,OAAO;YACpB,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,IAAI,EAAE,iCAAiC,EAAE;YACtF,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,8DAA8D;YACxE,WAAW,EAAE,4BAA4B;YACzC,QAAQ,EAAE;gBACT,IAAI,EAAE,OAAO;aACb;YACD,MAAM,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YAClC,OAAO,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YACnC,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE;gBACZ;oBACC,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,IAAI;iBACd;aACD;YACD,UAAU,EAAE;gBACX;oBACC,WAAW,EAAE,UAAU;oBACvB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,SAAS;4BACf,KAAK,EAAE,SAAS;yBAChB;wBACD;4BACC,IAAI,EAAE,gBAAgB;4BACtB,KAAK,EAAE,eAAe;yBACtB;wBACD;4BACC,IAAI,EAAE,UAAU;4BAChB,KAAK,EAAE,UAAU;yBACjB;qBACD;oBACD,OAAO,EAAE,SAAS;iBAClB;gBACD,GAAG,qBAAkB;gBACrB,GAAG,2BAAwB;gBAC3B,GAAG,sBAAmB;aACtB;SACD,CAAC;IAKH,CAAC;IAHA,KAAK,CAAC,OAAO;QACZ,OAAO,eAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACD;AApDD,sBAoDC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"node": "@replyio/n8n-nodes-reply.reply",
|
|
3
|
+
"nodeVersion": "1.0",
|
|
4
|
+
"categories": ["Sales & CRM", "Communication", "Marketing"],
|
|
5
|
+
"resources": {
|
|
6
|
+
"primaryDocumentation": [
|
|
7
|
+
{
|
|
8
|
+
"url": "https://docs.reply.io/"
|
|
9
|
+
}
|
|
10
|
+
],
|
|
11
|
+
"generic": [
|
|
12
|
+
{
|
|
13
|
+
"label": "Sales engagement automation with Reply.io",
|
|
14
|
+
"icon": "📧",
|
|
15
|
+
"url": "https://reply.io/blog/"
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IWebhookFunctions, IHookFunctions, INodeType, INodeTypeDescription, IWebhookResponseData } from 'n8n-workflow';
|
|
2
|
+
export declare class ReplyTrigger implements INodeType {
|
|
3
|
+
description: INodeTypeDescription;
|
|
4
|
+
webhookMethods: {
|
|
5
|
+
default: {
|
|
6
|
+
checkExists(this: IHookFunctions): Promise<boolean>;
|
|
7
|
+
create(this: IHookFunctions): Promise<boolean>;
|
|
8
|
+
delete(this: IHookFunctions): Promise<boolean>;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
webhook(this: IWebhookFunctions): Promise<IWebhookResponseData>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReplyTrigger = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const filters_1 = require("./triggers/filters");
|
|
6
|
+
const GenericFunctions_1 = require("./utils/GenericFunctions");
|
|
7
|
+
const validation_1 = require("./utils/validation");
|
|
8
|
+
const constants_1 = require("./utils/constants");
|
|
9
|
+
class ReplyTrigger {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.description = {
|
|
12
|
+
displayName: 'Reply Trigger',
|
|
13
|
+
name: 'replyTrigger',
|
|
14
|
+
icon: { light: 'file:../../icons/reply.svg', dark: 'file:../../icons/reply.dark.svg' },
|
|
15
|
+
group: ['trigger'],
|
|
16
|
+
version: 1,
|
|
17
|
+
subtitle: '={{$parameter["events"].join(", ")}}',
|
|
18
|
+
description: 'Triggers when Reply.io events occur. All events include contact_fields and sequence_fields. See https://apidocs.reply.io for full payload details.',
|
|
19
|
+
defaults: {
|
|
20
|
+
name: 'Reply Trigger',
|
|
21
|
+
},
|
|
22
|
+
inputs: [],
|
|
23
|
+
outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
24
|
+
usableAsTool: true,
|
|
25
|
+
credentials: [
|
|
26
|
+
{
|
|
27
|
+
name: 'replyApi',
|
|
28
|
+
required: true,
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
webhooks: [
|
|
32
|
+
{
|
|
33
|
+
name: 'default',
|
|
34
|
+
httpMethod: 'POST',
|
|
35
|
+
responseMode: 'onReceived',
|
|
36
|
+
path: 'webhook',
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
properties: [
|
|
40
|
+
{
|
|
41
|
+
displayName: 'Payload Structure',
|
|
42
|
+
name: 'payloadNotice',
|
|
43
|
+
type: 'notice',
|
|
44
|
+
default: '',
|
|
45
|
+
description: 'All events include contact_fields (ID, email, name, company) and sequence_fields (ID, step_number). Event-specific fields are listed in each option description below.',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
displayName: 'Events',
|
|
49
|
+
name: 'events',
|
|
50
|
+
type: 'multiOptions',
|
|
51
|
+
required: true,
|
|
52
|
+
default: [constants_1.EMAIL_EVENTS.REPLIED],
|
|
53
|
+
description: 'The events to listen for',
|
|
54
|
+
options: [
|
|
55
|
+
{
|
|
56
|
+
name: 'Contact Called',
|
|
57
|
+
value: constants_1.CONTACT_EVENTS.CALLED,
|
|
58
|
+
description: 'Cloud call made or logged. Fields: from_number, duration, recording_url, disposition, resolution.',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'Contact Finished',
|
|
62
|
+
value: constants_1.CONTACT_EVENTS.FINISHED,
|
|
63
|
+
description: 'Prospect finishes sequence. Fields: finished_date, finish_reason (0=Replied, 1=Bounced, 2=Manual, 5=Called, 6=Opt-out, 7=Meeting).',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: 'Contact Opted Out',
|
|
67
|
+
value: constants_1.CONTACT_EVENTS.OPTED_OUT,
|
|
68
|
+
description: 'Person opts out of communication',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: 'Email Account Connection Lost',
|
|
72
|
+
value: constants_1.ACCOUNT_HEALTH_EVENTS.EMAIL_CONNECTION_LOST,
|
|
73
|
+
description: 'Email account connection lost. Fields: email_account_id, email_from.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: 'Email Account Error',
|
|
77
|
+
value: constants_1.ACCOUNT_HEALTH_EVENTS.EMAIL_ERROR,
|
|
78
|
+
description: 'Email provider error. Fields: email_account_id, email_account_error.',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'Email Bounced',
|
|
82
|
+
value: constants_1.EMAIL_EVENTS.BOUNCED,
|
|
83
|
+
description: 'Email delivery failed. Fields: bounce_type (Hard/Soft), bounce_date, sent_email_id.',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: 'Email Link Clicked',
|
|
87
|
+
value: constants_1.EMAIL_EVENTS.LINK_CLICKED,
|
|
88
|
+
description: 'Link clicked in email',
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: 'Email Opened',
|
|
92
|
+
value: constants_1.EMAIL_EVENTS.OPENED,
|
|
93
|
+
description: 'Email opened. Fields: email_open_date, sent_email_id, opens_count.',
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: 'Email Replied',
|
|
97
|
+
value: constants_1.EMAIL_EVENTS.REPLIED,
|
|
98
|
+
description: 'First reply or status set to Replied. Fields: reply_message_id, reply_date, reason (1=Email, 2=Manual).',
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: 'Email Sent',
|
|
102
|
+
value: constants_1.EMAIL_EVENTS.SENT,
|
|
103
|
+
description: 'Email sent. Fields: sent_email_date, sent_email_id, email_account_id, sent_message_url.',
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
name: 'LinkedIn Connection Request Accepted',
|
|
107
|
+
value: constants_1.LINKEDIN_EVENTS.CONNECTION_REQUEST_ACCEPTED,
|
|
108
|
+
description: 'Connection request accepted. Fields: sender_linkedin_account_id.',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: 'LinkedIn Connection Request Sent',
|
|
112
|
+
value: constants_1.LINKEDIN_EVENTS.CONNECTION_REQUEST_SENT,
|
|
113
|
+
description: 'Connection request sent. Fields: sender_linkedin_account_id, initial_message.',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'LinkedIn Message Replied',
|
|
117
|
+
value: constants_1.LINKEDIN_EVENTS.MESSAGE_REPLIED,
|
|
118
|
+
description: 'First LinkedIn reply. Fields: sender_linkedin_account_id, sequence_name, linkedin_message_id.',
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
name: 'LinkedIn Message Sent',
|
|
122
|
+
value: constants_1.LINKEDIN_EVENTS.MESSAGE_SENT,
|
|
123
|
+
description: 'LinkedIn message sent. Fields: is_inmail (true/false), sender_linkedin_account_id, initial_message.',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
name: 'LinkedIn Reply Categorized',
|
|
127
|
+
value: constants_1.LINKEDIN_EVENTS.REPLY_CATEGORIZED,
|
|
128
|
+
description: 'LinkedIn reply categorized with inbox category',
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
name: 'Reply Categorized',
|
|
132
|
+
value: constants_1.REPLY_EVENTS.CATEGORIZED,
|
|
133
|
+
description: 'Email reply categorized (not for Uncategorized). Note: sequence_fields.ID empty after first reply.',
|
|
134
|
+
},
|
|
135
|
+
],
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
displayName: 'Include Email URL',
|
|
139
|
+
name: 'includeEmailUrl',
|
|
140
|
+
type: 'boolean',
|
|
141
|
+
default: false,
|
|
142
|
+
description: 'Whether to include the email URL in the webhook payload',
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
displayName: 'Include Prospect Custom Fields',
|
|
146
|
+
name: 'includeProspectCustomFields',
|
|
147
|
+
type: 'boolean',
|
|
148
|
+
default: false,
|
|
149
|
+
description: 'Whether to include prospect custom fields in the webhook payload',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
displayName: 'Sequence IDs',
|
|
153
|
+
name: 'sequenceIds',
|
|
154
|
+
type: 'string',
|
|
155
|
+
default: '',
|
|
156
|
+
description: 'Filter events by sequence IDs (comma-separated). Leave empty to receive events from all sequences.',
|
|
157
|
+
placeholder: 'e.g., 123, 456, 789',
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
displayName: 'Email Accounts',
|
|
161
|
+
name: 'emailAccounts',
|
|
162
|
+
type: 'string',
|
|
163
|
+
default: '',
|
|
164
|
+
description: 'Filter events by email accounts (comma-separated). Leave empty to monitor all accounts.',
|
|
165
|
+
placeholder: 'e.g., sales@company.com, outreach@company.com',
|
|
166
|
+
},
|
|
167
|
+
],
|
|
168
|
+
};
|
|
169
|
+
this.webhookMethods = {
|
|
170
|
+
default: {
|
|
171
|
+
async checkExists() {
|
|
172
|
+
const webhookData = this.getWorkflowStaticData('node');
|
|
173
|
+
const webhookUrl = this.getNodeWebhookUrl('default');
|
|
174
|
+
const events = this.getNodeParameter('events', []);
|
|
175
|
+
const registeredEvents = webhookData.registeredEvents || [];
|
|
176
|
+
const registeredWebhookIds = webhookData.webhookIds || [];
|
|
177
|
+
const allRegistered = events.every((e) => registeredEvents.includes(e));
|
|
178
|
+
if (allRegistered && registeredEvents.length === events.length && registeredWebhookIds.length > 0) {
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
let existingWebhooks = [];
|
|
182
|
+
try {
|
|
183
|
+
const response = await GenericFunctions_1.replyApiRequest.call(this, 'GET', '/v2/webhooks');
|
|
184
|
+
existingWebhooks = (response === null || response === void 0 ? void 0 : response.items) || response || [];
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
}
|
|
188
|
+
const existingWebhookMap = new Map();
|
|
189
|
+
for (const wh of existingWebhooks) {
|
|
190
|
+
if (wh.url === webhookUrl && wh.event && wh.id) {
|
|
191
|
+
existingWebhookMap.set(String(wh.event), String(wh.id));
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
const eventsToRemove = registeredEvents.filter((e) => !events.includes(e));
|
|
195
|
+
for (const event of eventsToRemove) {
|
|
196
|
+
const webhookId = existingWebhookMap.get(event);
|
|
197
|
+
if (webhookId) {
|
|
198
|
+
try {
|
|
199
|
+
await GenericFunctions_1.replyApiRequest.call(this, 'DELETE', `/v2/webhooks/${webhookId}`);
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
const includeEmailUrl = this.getNodeParameter('includeEmailUrl', false);
|
|
206
|
+
const includeProspectCustomFields = this.getNodeParameter('includeProspectCustomFields', false);
|
|
207
|
+
const newWebhookIds = [];
|
|
208
|
+
const newRegisteredEvents = [];
|
|
209
|
+
for (const event of events) {
|
|
210
|
+
const existingId = existingWebhookMap.get(event);
|
|
211
|
+
if (existingId) {
|
|
212
|
+
newWebhookIds.push(existingId);
|
|
213
|
+
newRegisteredEvents.push(event);
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
const body = {
|
|
217
|
+
event,
|
|
218
|
+
url: webhookUrl,
|
|
219
|
+
};
|
|
220
|
+
if (includeEmailUrl || includeProspectCustomFields) {
|
|
221
|
+
body.includeEmailUrl = includeEmailUrl;
|
|
222
|
+
body.includeProspectCustomFields = includeProspectCustomFields;
|
|
223
|
+
}
|
|
224
|
+
try {
|
|
225
|
+
const response = await GenericFunctions_1.replyApiRequest.call(this, 'POST', '/v2/webhooks', body);
|
|
226
|
+
const webhookId = response === null || response === void 0 ? void 0 : response.id;
|
|
227
|
+
if (webhookId) {
|
|
228
|
+
newWebhookIds.push(String(webhookId));
|
|
229
|
+
}
|
|
230
|
+
newRegisteredEvents.push(event);
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
const errorMessage = error.message || '';
|
|
234
|
+
if (errorMessage.includes('already') || errorMessage.includes('exists')) {
|
|
235
|
+
const foundId = existingWebhookMap.get(event);
|
|
236
|
+
if (foundId) {
|
|
237
|
+
newWebhookIds.push(foundId);
|
|
238
|
+
}
|
|
239
|
+
newRegisteredEvents.push(event);
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
throw error;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
webhookData.webhookIds = newWebhookIds;
|
|
246
|
+
webhookData.registeredEvents = newRegisteredEvents;
|
|
247
|
+
for (const id of newWebhookIds) {
|
|
248
|
+
try {
|
|
249
|
+
await GenericFunctions_1.replyApiRequest.call(this, 'POST', `/v2/webhooks/${id}/test`);
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return true;
|
|
255
|
+
},
|
|
256
|
+
async create() {
|
|
257
|
+
return true;
|
|
258
|
+
},
|
|
259
|
+
async delete() {
|
|
260
|
+
const webhookData = this.getWorkflowStaticData('node');
|
|
261
|
+
const webhookIds = webhookData.webhookIds || [];
|
|
262
|
+
for (const id of webhookIds) {
|
|
263
|
+
try {
|
|
264
|
+
await GenericFunctions_1.replyApiRequest.call(this, 'DELETE', `/v2/webhooks/${id}`);
|
|
265
|
+
}
|
|
266
|
+
catch {
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
delete webhookData.webhookIds;
|
|
270
|
+
delete webhookData.registeredEvents;
|
|
271
|
+
return true;
|
|
272
|
+
},
|
|
273
|
+
},
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
async webhook() {
|
|
277
|
+
var _a;
|
|
278
|
+
const bodyData = this.getBodyData();
|
|
279
|
+
const selectedEvents = this.getNodeParameter('events', []);
|
|
280
|
+
const sequenceIdsRaw = this.getNodeParameter('sequenceIds', '');
|
|
281
|
+
const emailAccountsRaw = this.getNodeParameter('emailAccounts', '');
|
|
282
|
+
const eventType = ((_a = bodyData.event) === null || _a === void 0 ? void 0 : _a.type) || bodyData.eventType || '';
|
|
283
|
+
if (selectedEvents.length > 0 && !selectedEvents.includes(eventType)) {
|
|
284
|
+
return {
|
|
285
|
+
noWebhookResponse: true,
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
const sequenceIds = sequenceIdsRaw
|
|
289
|
+
.split(',')
|
|
290
|
+
.map((s) => parseInt(s.trim(), 10))
|
|
291
|
+
.filter((n) => !isNaN(n));
|
|
292
|
+
const emailAccounts = emailAccountsRaw
|
|
293
|
+
.split(',')
|
|
294
|
+
.map((s) => s.trim())
|
|
295
|
+
.filter((s) => s.length > 0);
|
|
296
|
+
const filters = (0, validation_1.validateTriggerFilters)({ sequenceIds, emailAccounts });
|
|
297
|
+
if (!(0, filters_1.matchesTriggerFilters)(bodyData, filters)) {
|
|
298
|
+
return {
|
|
299
|
+
noWebhookResponse: true,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
return {
|
|
303
|
+
workflowData: [[{ json: bodyData }]],
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
exports.ReplyTrigger = ReplyTrigger;
|
|
308
|
+
//# sourceMappingURL=ReplyTrigger.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReplyTrigger.node.js","sourceRoot":"","sources":["../../../nodes/Reply/ReplyTrigger.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.execute = execute;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const GenericFunctions_1 = require("../../utils/GenericFunctions");
|
|
6
|
+
const validation_1 = require("../../utils/validation");
|
|
7
|
+
async function execute(i) {
|
|
8
|
+
const firstName = this.getNodeParameter('firstName', i);
|
|
9
|
+
const additionalFields = this.getNodeParameter('additionalFields', i);
|
|
10
|
+
if (!firstName || firstName.trim() === '') {
|
|
11
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'First name is required', {
|
|
12
|
+
itemIndex: i,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
const body = { firstName: firstName.trim(), ...additionalFields };
|
|
16
|
+
if (body.email) {
|
|
17
|
+
try {
|
|
18
|
+
(0, validation_1.validateEmail)(body.email);
|
|
19
|
+
}
|
|
20
|
+
catch (validationError) {
|
|
21
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), validationError.message, {
|
|
22
|
+
itemIndex: i,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const response = await GenericFunctions_1.replyApiRequest.call(this, 'POST', '/v3/contacts', body);
|
|
27
|
+
return [{ json: response }];
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=create.operation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.operation.js","sourceRoot":"","sources":["../../../../../nodes/Reply/actions/contact/create.operation.ts"],"names":[],"mappings":";;AAMA,0BA2BC;AAhCD,+CAAkD;AAElD,mEAA+D;AAC/D,uDAAuD;AAEhD,KAAK,UAAU,OAAO,CAE5B,CAAS;IAET,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAW,CAAC;IAClE,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,CAAgB,CAAC;IAErF,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,wBAAwB,EAAE;YACtE,SAAS,EAAE,CAAC;SACZ,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAgB,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAE/E,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC;YACJ,IAAA,0BAAa,EAAC,IAAI,CAAC,KAAe,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,eAAe,EAAE,CAAC;YAC1B,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAG,eAAyB,CAAC,OAAO,EAAE;gBAChF,SAAS,EAAE,CAAC;aACZ,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,kCAAe,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;IAChF,OAAO,CAAC,EAAE,IAAI,EAAE,QAAuB,EAAE,CAAC,CAAC;AAC5C,CAAC"}
|