n8n-nodes-elfsight-ai-chatbot 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 ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Elfsight
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,115 @@
1
+ # n8n-nodes-elfsight-ai-chatbot
2
+
3
+ An [n8n](https://n8n.io/) community node for the **Elfsight AI Chatbot**.
4
+
5
+ The Elfsight AI Chatbot is a website widget that answers visitor questions from your own
6
+ knowledge base and collects leads. This package starts a workflow every time a conversation
7
+ is completed, and lets you pull recent conversations on demand.
8
+
9
+ [Installation](#installation) · [Nodes](#nodes) · [Credentials](#credentials) ·
10
+ [Usage](#usage) · [Limitations](#limitations) · [Development](#development)
11
+
12
+ ## Installation
13
+
14
+ Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/)
15
+ and install `n8n-nodes-elfsight-ai-chatbot`.
16
+
17
+ ## Nodes
18
+
19
+ ### Elfsight AI Chatbot Trigger
20
+
21
+ Fires when a chat is closed and its post-analysis has finished, so the payload already contains
22
+ the topic, summary and knowledge gaps. The node registers and removes the subscription for you
23
+ when you activate or deactivate the workflow — there is no URL to copy anywhere.
24
+
25
+ Output (one item per conversation):
26
+
27
+ | Field | Description |
28
+ |---|---|
29
+ | `threadPid`, `assistantPid`, `widgetPid` | Identifiers of the conversation, chatbot and widget |
30
+ | `timeZone`, `chatStarted`, `duration` | When the chat happened and how long it lasted |
31
+ | `sourcePage` | Page the visitor chatted from |
32
+ | `chatTopic`, `summary` | Post-analysis of the conversation |
33
+ | `leadName`, `leadEmail`, `leadPhone` | Contact details, when the visitor left them |
34
+ | `knowledgeGaps` | Questions the chatbot could not answer: `shortName`, `summary` |
35
+ | `transcript` | Full message list — see the fields below |
36
+ | `dashboardLink` | Direct link to the conversation in the Elfsight dashboard |
37
+
38
+ Each `transcript` entry:
39
+
40
+ | Field | Description |
41
+ |---|---|
42
+ | `role` | `User`, `AI Agent` or `System` |
43
+ | `message` | Message text, markup stripped |
44
+ | `dateTime` | ISO 8601 timestamp, may be `null` |
45
+ | `rating` | `good` or `bad` if the visitor rated the answer, otherwise `null` |
46
+ | `widgets` | Interactive widgets the assistant embedded in the message (empty for most messages) |
47
+ | `attachments` | Files attached to the message (empty for most messages) |
48
+
49
+ A `widgets` entry has `type` (`collectContacts`, `actionButtons` or `contactHuman`),
50
+ `fields` (list of field labels), `buttons` (list of button labels) and `caption`.
51
+
52
+ An `attachments` entry has `name`, `type` (`image` or `file`), `url` and `fileSize` in bytes.
53
+
54
+ ### Elfsight AI Chatbot
55
+
56
+ Resource **Conversation**, operation **Get Many** — returns the most recently delivered
57
+ conversations, newest first, in exactly the same shape the trigger emits. Handy for mapping
58
+ fields while building a workflow, without waiting for a live chat.
59
+
60
+ ## Credentials
61
+
62
+ 1. Open your AI Chatbot widget in the Elfsight dashboard and add the **n8n** integration.
63
+ 2. Copy the API key (`elf_…`) — it is shown **only once**.
64
+ 3. In n8n create an *Elfsight AI Chatbot API* credential and paste the key.
65
+
66
+ Leave **Base URL** at `https://widget-data.service.elfsight.com/api` unless Elfsight gave you another endpoint.
67
+ Use **Test** to confirm the key: it calls `/ai-chat/v2/integrations/me` and shows the connected
68
+ chatbot's name.
69
+
70
+ ## Usage
71
+
72
+ 1. Add **Elfsight AI Chatbot Trigger** to a workflow and select your credential.
73
+ 2. Activate the workflow — the node subscribes automatically.
74
+ 3. Have a chat on your site and close it. Once post-analysis completes, the workflow runs.
75
+
76
+ To design the workflow without waiting for a real chat, use the **Elfsight AI Chatbot** node's
77
+ *Get Many* operation to pull the last few conversations and map the fields from there.
78
+
79
+ ## Limitations
80
+
81
+ **One API key serves one workflow.** The key is bound to a single subscription, so:
82
+
83
+ - *Listen for test event* on an **already active** workflow tries to register a second
84
+ (test) URL and fails with a conflict — deactivate the workflow first;
85
+ - a second workflow on the same credential fails the same way — add another n8n integration
86
+ in the Elfsight dashboard and use the new key.
87
+
88
+ **HTTPS with a public domain is required.** Self-hosted n8n reachable only over `http://` or on
89
+ a private hostname cannot be subscribed.
90
+
91
+ **Disabling in the dashboard is respected.** If the widget owner turns the integration off in
92
+ the Elfsight dashboard, the subscription stays registered but stops delivering. The node will
93
+ not silently switch it back on — re-enable it in the dashboard.
94
+
95
+ ## Development
96
+
97
+ ```bash
98
+ npm install
99
+ npm run dev # runs n8n with this node linked
100
+ npm run lint
101
+ npm run build
102
+ ```
103
+
104
+ Because Elfsight pushes conversations to your n8n instance, local development needs a publicly
105
+ reachable URL: run a tunnel and point `WEBHOOK_URL` at it, otherwise the subscription registers
106
+ an address Elfsight cannot reach.
107
+
108
+ ## Resources
109
+
110
+ - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
111
+ - [Elfsight AI Chatbot](https://elfsight.com/ai-chatbot-widget/)
112
+
113
+ ## License
114
+
115
+ [MIT](LICENSE.md)
@@ -0,0 +1,10 @@
1
+ import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, Icon, INodeProperties } from 'n8n-workflow';
2
+ export declare class ElfsightAiChatbotApi 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,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ElfsightAiChatbotApi = void 0;
4
+ class ElfsightAiChatbotApi {
5
+ constructor() {
6
+ this.name = 'elfsightAiChatbotApi';
7
+ this.displayName = 'Elfsight AI Chatbot API';
8
+ this.icon = {
9
+ light: 'file:../nodes/ElfsightAiChatbot/elfsight.svg',
10
+ dark: 'file:../nodes/ElfsightAiChatbot/elfsight.dark.svg',
11
+ };
12
+ this.documentationUrl = 'https://github.com/elfsight/n8n-nodes-elfsight-ai-chatbot#credentials';
13
+ this.properties = [
14
+ {
15
+ displayName: 'API Key',
16
+ name: 'apiKey',
17
+ type: 'string',
18
+ typeOptions: {
19
+ password: true,
20
+ },
21
+ default: '',
22
+ required: true,
23
+ placeholder: 'elf_...',
24
+ description: 'Issued in the Elfsight dashboard when you add the n8n integration to an AI Chatbot widget. It is shown only once — copy it right away.',
25
+ },
26
+ {
27
+ displayName: 'Base URL',
28
+ name: 'baseUrl',
29
+ type: 'string',
30
+ default: 'https://widget-data.service.elfsight.com/api',
31
+ description: 'Change only if you were given a different Elfsight API endpoint',
32
+ },
33
+ ];
34
+ this.authenticate = {
35
+ type: 'generic',
36
+ properties: {
37
+ headers: {
38
+ Authorization: '=Bearer {{$credentials.apiKey}}',
39
+ },
40
+ },
41
+ };
42
+ this.test = {
43
+ request: {
44
+ baseURL: '={{$credentials.baseUrl}}',
45
+ url: '/ai-chat/v2/integrations/me',
46
+ method: 'GET',
47
+ },
48
+ };
49
+ }
50
+ }
51
+ exports.ElfsightAiChatbotApi = ElfsightAiChatbotApi;
52
+ //# sourceMappingURL=ElfsightAiChatbotApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ElfsightAiChatbotApi.credentials.js","sourceRoot":"","sources":["../../credentials/ElfsightAiChatbotApi.credentials.ts"],"names":[],"mappings":";;;AAQA,MAAa,oBAAoB;IAAjC;QACC,SAAI,GAAG,sBAAsB,CAAC;QAE9B,gBAAW,GAAG,yBAAyB,CAAC;QAExC,SAAI,GAAS;YACZ,KAAK,EAAE,8CAA8C;YACrD,IAAI,EAAE,mDAAmD;SACzD,CAAC;QAEF,qBAAgB,GAAG,uEAAuE,CAAC;QAE3F,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,SAAS;gBACtB,WAAW,EACV,wIAAwI;aACzI;YACD;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,8CAA8C;gBACvD,WAAW,EAAE,iEAAiE;aAC9E;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,iCAAiC;iBAChD;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,2BAA2B;gBACpC,GAAG,EAAE,6BAA6B;gBAClC,MAAM,EAAE,KAAK;aACb;SACD,CAAC;IACH,CAAC;CAAA;AAnDD,oDAmDC"}
@@ -0,0 +1,4 @@
1
+ import type { INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class ElfsightAiChatbot implements INodeType {
3
+ description: INodeTypeDescription;
4
+ }
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ElfsightAiChatbot = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const GenericFunctions_1 = require("./GenericFunctions");
6
+ class ElfsightAiChatbot {
7
+ constructor() {
8
+ this.description = {
9
+ displayName: 'Elfsight AI Chatbot',
10
+ name: 'elfsightAiChatbot',
11
+ icon: { light: 'file:elfsight.svg', dark: 'file:elfsight.dark.svg' },
12
+ group: ['input'],
13
+ version: 1,
14
+ subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
15
+ description: 'Read completed conversations from an Elfsight AI Chatbot widget',
16
+ defaults: {
17
+ name: 'Elfsight AI Chatbot',
18
+ },
19
+ inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
20
+ outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
21
+ usableAsTool: true,
22
+ credentials: [
23
+ {
24
+ name: 'elfsightAiChatbotApi',
25
+ required: true,
26
+ },
27
+ ],
28
+ requestDefaults: {
29
+ baseURL: '={{$credentials.baseUrl}}',
30
+ headers: {
31
+ 'Content-Type': 'application/json',
32
+ },
33
+ },
34
+ properties: [
35
+ {
36
+ displayName: 'Resource',
37
+ name: 'resource',
38
+ type: 'options',
39
+ noDataExpression: true,
40
+ default: 'conversation',
41
+ options: [
42
+ {
43
+ name: 'Conversation',
44
+ value: 'conversation',
45
+ },
46
+ ],
47
+ },
48
+ {
49
+ displayName: 'Operation',
50
+ name: 'operation',
51
+ type: 'options',
52
+ noDataExpression: true,
53
+ default: 'getMany',
54
+ displayOptions: {
55
+ show: {
56
+ resource: ['conversation'],
57
+ },
58
+ },
59
+ options: [
60
+ {
61
+ name: 'Get Many',
62
+ value: 'getMany',
63
+ description: 'Get the most recently delivered conversations, newest first, in the same shape the trigger emits',
64
+ action: 'Get many conversations',
65
+ routing: {
66
+ request: {
67
+ method: 'GET',
68
+ url: `/ai-chat/v2/integrations/${GenericFunctions_1.PROVIDER}/deliveries`,
69
+ },
70
+ output: {
71
+ postReceive: [
72
+ {
73
+ type: 'rootProperty',
74
+ properties: {
75
+ property: 'payload',
76
+ },
77
+ },
78
+ ],
79
+ },
80
+ },
81
+ },
82
+ ],
83
+ },
84
+ {
85
+ displayName: 'Limit',
86
+ name: 'limit',
87
+ type: 'number',
88
+ typeOptions: {
89
+ minValue: 1,
90
+ maxValue: 25,
91
+ },
92
+ default: 3,
93
+ description: 'Max number of results to return',
94
+ displayOptions: {
95
+ show: {
96
+ resource: ['conversation'],
97
+ operation: ['getMany'],
98
+ },
99
+ },
100
+ routing: {
101
+ send: {
102
+ type: 'query',
103
+ property: 'limit',
104
+ },
105
+ },
106
+ },
107
+ ],
108
+ };
109
+ }
110
+ }
111
+ exports.ElfsightAiChatbot = ElfsightAiChatbot;
112
+ //# sourceMappingURL=ElfsightAiChatbot.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ElfsightAiChatbot.node.js","sourceRoot":"","sources":["../../../nodes/ElfsightAiChatbot/ElfsightAiChatbot.node.ts"],"names":[],"mappings":";;;AACA,+CAAmD;AAEnD,yDAA8C;AAM9C,MAAa,iBAAiB;IAA9B;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,qBAAqB;YAClC,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,wBAAwB,EAAE;YACpE,KAAK,EAAE,CAAC,OAAO,CAAC;YAChB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,8DAA8D;YACxE,WAAW,EAAE,iEAAiE;YAC9E,QAAQ,EAAE;gBACT,IAAI,EAAE,qBAAqB;aAC3B;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,sBAAsB;oBAC5B,QAAQ,EAAE,IAAI;iBACd;aACD;YACD,eAAe,EAAE;gBAChB,OAAO,EAAE,2BAA2B;gBACpC,OAAO,EAAE;oBACR,cAAc,EAAE,kBAAkB;iBAClC;aACD;YACD,UAAU,EAAE;gBACX;oBACC,WAAW,EAAE,UAAU;oBACvB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE,cAAc;oBACvB,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,cAAc;4BACpB,KAAK,EAAE,cAAc;yBACrB;qBACD;iBACD;gBACD;oBACC,WAAW,EAAE,WAAW;oBACxB,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE,SAAS;oBAClB,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,QAAQ,EAAE,CAAC,cAAc,CAAC;yBAC1B;qBACD;oBACD,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,UAAU;4BAChB,KAAK,EAAE,SAAS;4BAChB,WAAW,EACV,kGAAkG;4BACnG,MAAM,EAAE,wBAAwB;4BAChC,OAAO,EAAE;gCACR,OAAO,EAAE;oCACR,MAAM,EAAE,KAAK;oCACb,GAAG,EAAE,4BAA4B,2BAAQ,aAAa;iCACtD;gCACD,MAAM,EAAE;oCACP,WAAW,EAAE;wCACZ;4CACC,IAAI,EAAE,cAAc;4CACpB,UAAU,EAAE;gDACX,QAAQ,EAAE,SAAS;6CACnB;yCACD;qCACD;iCACD;6BACD;yBACD;qBACD;iBACD;gBACD;oBACC,WAAW,EAAE,OAAO;oBACpB,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE;wBACZ,QAAQ,EAAE,CAAC;wBACX,QAAQ,EAAE,EAAE;qBACZ;oBAID,OAAO,EAAE,CAAC;oBACV,WAAW,EAAE,iCAAiC;oBAC9C,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,QAAQ,EAAE,CAAC,cAAc,CAAC;4BAC1B,SAAS,EAAE,CAAC,SAAS,CAAC;yBACtB;qBACD;oBACD,OAAO,EAAE;wBACR,IAAI,EAAE;4BACL,IAAI,EAAE,OAAO;4BACb,QAAQ,EAAE,OAAO;yBACjB;qBACD;iBACD;aACD;SACD,CAAC;IACH,CAAC;CAAA;AA1GD,8CA0GC"}
@@ -0,0 +1,18 @@
1
+ {
2
+ "node": "n8n-nodes-elfsight-ai-chatbot",
3
+ "nodeVersion": "1.0",
4
+ "codexVersion": "1.0",
5
+ "categories": ["Marketing & Content", "Communication"],
6
+ "resources": {
7
+ "credentialDocumentation": [
8
+ {
9
+ "url": "https://github.com/elfsight/n8n-nodes-elfsight-ai-chatbot?tab=readme-ov-file#credentials"
10
+ }
11
+ ],
12
+ "primaryDocumentation": [
13
+ {
14
+ "url": "https://github.com/elfsight/n8n-nodes-elfsight-ai-chatbot?tab=readme-ov-file"
15
+ }
16
+ ]
17
+ }
18
+ }
@@ -0,0 +1,12 @@
1
+ import type { IHookFunctions, INodeType, INodeTypeDescription, IWebhookFunctions, IWebhookResponseData } from 'n8n-workflow';
2
+ export declare class ElfsightAiChatbotTrigger 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,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ElfsightAiChatbotTrigger = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const GenericFunctions_1 = require("./GenericFunctions");
6
+ const HTTP_NOT_FOUND = 404;
7
+ const HTTP_CONFLICT = 409;
8
+ class ElfsightAiChatbotTrigger {
9
+ constructor() {
10
+ this.description = {
11
+ displayName: 'Elfsight AI Chatbot Trigger',
12
+ name: 'elfsightAiChatbotTrigger',
13
+ icon: { light: 'file:elfsight.svg', dark: 'file:elfsight.dark.svg' },
14
+ group: ['trigger'],
15
+ version: 1,
16
+ subtitle: '={{$parameter["event"]}}',
17
+ description: 'Starts the workflow when an Elfsight AI Chatbot conversation is completed',
18
+ defaults: {
19
+ name: 'Elfsight AI Chatbot Trigger',
20
+ },
21
+ inputs: [],
22
+ outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
23
+ credentials: [
24
+ {
25
+ name: 'elfsightAiChatbotApi',
26
+ required: true,
27
+ },
28
+ ],
29
+ webhooks: [
30
+ {
31
+ name: 'default',
32
+ httpMethod: 'POST',
33
+ responseMode: 'onReceived',
34
+ path: 'webhook',
35
+ },
36
+ ],
37
+ properties: [
38
+ {
39
+ displayName: 'Event',
40
+ name: 'event',
41
+ type: 'options',
42
+ noDataExpression: true,
43
+ required: true,
44
+ default: 'conversationCompleted',
45
+ description: 'Which chatbot event starts this workflow',
46
+ options: [
47
+ {
48
+ name: 'Conversation Completed',
49
+ value: 'conversationCompleted',
50
+ description: 'A chat was closed and post-analysis finished, so the topic, summary and knowledge gaps are filled in',
51
+ },
52
+ ],
53
+ },
54
+ ],
55
+ };
56
+ this.webhookMethods = {
57
+ default: {
58
+ async checkExists() {
59
+ const staticData = this.getWorkflowStaticData('node');
60
+ const subscriptionId = staticData.subscriptionId;
61
+ if (subscriptionId === undefined) {
62
+ return false;
63
+ }
64
+ try {
65
+ await GenericFunctions_1.elfsightApiRequest.call(this, 'GET', `/ai-chat/v2/integrations/${GenericFunctions_1.PROVIDER}/subscriptions/${subscriptionId}`);
66
+ return true;
67
+ }
68
+ catch (error) {
69
+ if ((0, GenericFunctions_1.statusCodeOf)(error) === HTTP_NOT_FOUND) {
70
+ delete staticData.subscriptionId;
71
+ return false;
72
+ }
73
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), error);
74
+ }
75
+ },
76
+ async create() {
77
+ const staticData = this.getWorkflowStaticData('node');
78
+ try {
79
+ const subscription = (await GenericFunctions_1.elfsightApiRequest.call(this, 'POST', `/ai-chat/v2/integrations/${GenericFunctions_1.PROVIDER}/subscribe`, { targetUrl: this.getNodeWebhookUrl('default') }));
80
+ staticData.subscriptionId = subscription.pid;
81
+ return true;
82
+ }
83
+ catch (error) {
84
+ if ((0, GenericFunctions_1.statusCodeOf)(error) === HTTP_CONFLICT) {
85
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'This Elfsight API key is already subscribed to another URL', {
86
+ description: 'One API key serves one webhook URL. To listen for a test event, deactivate the workflow first. To run a second workflow, add another n8n integration in the Elfsight dashboard and use its new API key.',
87
+ });
88
+ }
89
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), error);
90
+ }
91
+ },
92
+ async delete() {
93
+ const staticData = this.getWorkflowStaticData('node');
94
+ const subscriptionId = staticData.subscriptionId;
95
+ if (subscriptionId === undefined) {
96
+ return true;
97
+ }
98
+ try {
99
+ await GenericFunctions_1.elfsightApiRequest.call(this, 'DELETE', `/ai-chat/v2/integrations/${GenericFunctions_1.PROVIDER}/unsubscribe/${subscriptionId}`);
100
+ }
101
+ catch (error) {
102
+ if ((0, GenericFunctions_1.statusCodeOf)(error) !== HTTP_NOT_FOUND) {
103
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), error);
104
+ }
105
+ }
106
+ delete staticData.subscriptionId;
107
+ return true;
108
+ },
109
+ },
110
+ };
111
+ }
112
+ async webhook() {
113
+ return {
114
+ workflowData: [this.helpers.returnJsonArray(this.getBodyData())],
115
+ };
116
+ }
117
+ }
118
+ exports.ElfsightAiChatbotTrigger = ElfsightAiChatbotTrigger;
119
+ //# sourceMappingURL=ElfsightAiChatbotTrigger.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ElfsightAiChatbotTrigger.node.js","sourceRoot":"","sources":["../../../nodes/ElfsightAiChatbot/ElfsightAiChatbotTrigger.node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ {
2
+ "node": "n8n-nodes-elfsight-ai-chatbot",
3
+ "nodeVersion": "1.0",
4
+ "codexVersion": "1.0",
5
+ "categories": ["Marketing & Content", "Communication"],
6
+ "resources": {
7
+ "credentialDocumentation": [
8
+ {
9
+ "url": "https://github.com/elfsight/n8n-nodes-elfsight-ai-chatbot?tab=readme-ov-file#credentials"
10
+ }
11
+ ],
12
+ "primaryDocumentation": [
13
+ {
14
+ "url": "https://github.com/elfsight/n8n-nodes-elfsight-ai-chatbot?tab=readme-ov-file"
15
+ }
16
+ ]
17
+ }
18
+ }
@@ -0,0 +1,7 @@
1
+ import type { IDataObject, IExecuteFunctions, IHookFunctions, IHttpRequestMethods, ILoadOptionsFunctions } from 'n8n-workflow';
2
+ export declare const CREDENTIALS_NAME = "elfsightAiChatbotApi";
3
+ export declare const PROVIDER = "n8n";
4
+ type ElfsightContext = IHookFunctions | IExecuteFunctions | ILoadOptionsFunctions;
5
+ export declare function statusCodeOf(error: unknown): number | undefined;
6
+ export declare function elfsightApiRequest(this: ElfsightContext, method: IHttpRequestMethods, endpoint: string, body?: IDataObject, qs?: IDataObject): Promise<unknown>;
7
+ export {};
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PROVIDER = exports.CREDENTIALS_NAME = void 0;
4
+ exports.statusCodeOf = statusCodeOf;
5
+ exports.elfsightApiRequest = elfsightApiRequest;
6
+ exports.CREDENTIALS_NAME = 'elfsightAiChatbotApi';
7
+ exports.PROVIDER = 'n8n';
8
+ const DEFAULT_BASE_URL = 'https://widget-data.service.elfsight.com/api';
9
+ function unwrapEnvelope(response) {
10
+ if (response !== null && typeof response === 'object' && 'payload' in response) {
11
+ return response.payload;
12
+ }
13
+ return response;
14
+ }
15
+ function statusCodeOf(error) {
16
+ var _a, _b, _c, _d, _e;
17
+ if (error === null || typeof error !== 'object') {
18
+ return undefined;
19
+ }
20
+ const candidate = error;
21
+ const raw = (_d = (_b = (_a = candidate.httpCode) !== null && _a !== void 0 ? _a : candidate.statusCode) !== null && _b !== void 0 ? _b : (_c = candidate.response) === null || _c === void 0 ? void 0 : _c.status) !== null && _d !== void 0 ? _d : (_e = candidate.response) === null || _e === void 0 ? void 0 : _e.statusCode;
22
+ const parsed = typeof raw === 'string' ? Number.parseInt(raw, 10) : raw;
23
+ return Number.isNaN(parsed) ? undefined : parsed;
24
+ }
25
+ async function elfsightApiRequest(method, endpoint, body, qs) {
26
+ const credentials = await this.getCredentials(exports.CREDENTIALS_NAME);
27
+ const baseUrl = (credentials.baseUrl || DEFAULT_BASE_URL).replace(/\/+$/, '');
28
+ const options = {
29
+ method,
30
+ url: `${baseUrl}${endpoint}`,
31
+ headers: { 'Content-Type': 'application/json' },
32
+ json: true,
33
+ };
34
+ if (body !== undefined && Object.keys(body).length > 0) {
35
+ options.body = body;
36
+ }
37
+ if (qs !== undefined && Object.keys(qs).length > 0) {
38
+ options.qs = qs;
39
+ }
40
+ const response = await this.helpers.httpRequestWithAuthentication.call(this, exports.CREDENTIALS_NAME, options);
41
+ return unwrapEnvelope(response);
42
+ }
43
+ //# sourceMappingURL=GenericFunctions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenericFunctions.js","sourceRoot":"","sources":["../../../nodes/ElfsightAiChatbot/GenericFunctions.ts"],"names":[],"mappings":";;;AAoCA,oCAoBC;AAED,gDAgCC;AAhFY,QAAA,gBAAgB,GAAG,sBAAsB,CAAC;AAG1C,QAAA,QAAQ,GAAG,KAAK,CAAC;AAE9B,MAAM,gBAAgB,GAAG,8CAA8C,CAAC;AAYxE,SAAS,cAAc,CAAC,QAAiB;IACxC,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;QAChF,OAAQ,QAAwB,CAAC,OAAO,CAAC;IAC1C,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC;AAGD,SAAgB,YAAY,CAAC,KAAc;;IAC1C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACjD,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,KAIjB,CAAC;IAEF,MAAM,GAAG,GACR,MAAA,MAAA,MAAA,SAAS,CAAC,QAAQ,mCAClB,SAAS,CAAC,UAAU,mCACpB,MAAA,SAAS,CAAC,QAAQ,0CAAE,MAAM,mCAC1B,MAAA,SAAS,CAAC,QAAQ,0CAAE,UAAU,CAAC;IAEhC,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAExE,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;AAClD,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAEvC,MAA2B,EAC3B,QAAgB,EAChB,IAAkB,EAClB,EAAgB;IAEhB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,wBAAgB,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,CAAE,WAAW,CAAC,OAAkB,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAE1F,MAAM,OAAO,GAAwB;QACpC,MAAM;QACN,GAAG,EAAE,GAAG,OAAO,GAAG,QAAQ,EAAE;QAC5B,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI;KACV,CAAC;IAEF,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,EAAE,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,IAAI,CACrE,IAAI,EACJ,wBAAgB,EAChB,OAAO,CACP,CAAC;IAEF,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,3 @@
1
+ <svg width="256" height="256" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M132.55 9.91907C197.416 12.1929 248.346 67.0117 246.081 132.124C243.816 197.235 189.2 248.355 124.335 246.081C59.467 243.807 8.53598 188.988 10.8013 123.877C10.9102 120.739 11.0655 117.638 11.429 114.572C11.614 113.012 14.0397 101.189 24.6258 102.599C32.5617 103.656 35.0732 110.625 34.4868 115.936C34.374 116.956 34.1439 119.656 34.1439 119.656C33.9983 121.32 33.8952 122.996 33.8359 124.685C32.014 177.046 72.9731 221.132 125.138 222.961C177.302 224.789 221.225 183.678 223.047 131.317C224.868 78.9539 183.909 34.8681 131.746 33.0393C126.821 32.8668 121.969 33.0798 117.22 33.6474L114.383 34.0304C114.383 34.0304 100.737 36.2983 97.6975 27.0485C94.7561 18.0983 101.627 12.9206 106.279 11.9496C114.764 10.3188 123.558 9.60339 132.55 9.91907ZM6.03351 22.0734C7.13426 22.0734 8.16348 22.3768 9.0522 22.8981L133.221 86.7863C133.59 86.9688 133.955 87.1583 134.317 87.3504L134.785 87.5911L134.779 87.5975L136.043 88.3165C146.435 94.4673 153.221 104.576 153.221 116.011C153.221 116.096 153.214 116.179 153.213 116.265L153.221 116.256L153.222 159.193C153.223 159.559 153.223 159.913 153.223 160.256L153.228 167.01C153.228 167.172 153.229 167.323 153.229 167.466L153.231 169.073C153.233 169.123 153.238 169.173 153.238 169.224C153.238 172.6 150.537 175.335 147.203 175.335C146.178 175.335 145.214 175.074 144.369 174.618L115.522 160.056L115.56 160.012C103.863 154.569 95.9362 144.24 95.8234 132.363C95.8157 123.454 94.4107 113.11 80.2111 100.833C71.362 93.1844 60.7899 84.0003 50.3195 74.8857L47.0185 72.0115C25.6122 53.3691 5.4436 35.7311 2.29302 32.9753L1.94823 32.6739C1.89474 32.6266 1.85865 32.5956 1.85865 32.5956L1.39712 32.0894C0.526044 31.0305 0 29.6705 0 28.1845C0 24.8084 2.70161 22.0734 6.03351 22.0734Z" fill="#F93262"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="256" height="256" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M132.55 9.91907C197.416 12.1929 248.346 67.0117 246.081 132.124C243.816 197.235 189.2 248.355 124.335 246.081C59.467 243.807 8.53598 188.988 10.8013 123.877C10.9102 120.739 11.0655 117.638 11.429 114.572C11.614 113.012 14.0397 101.189 24.6258 102.599C32.5617 103.656 35.0732 110.625 34.4868 115.936C34.374 116.956 34.1439 119.656 34.1439 119.656C33.9983 121.32 33.8952 122.996 33.8359 124.685C32.014 177.046 72.9731 221.132 125.138 222.961C177.302 224.789 221.225 183.678 223.047 131.317C224.868 78.9539 183.909 34.8681 131.746 33.0393C126.821 32.8668 121.969 33.0798 117.22 33.6474L114.383 34.0304C114.383 34.0304 100.737 36.2983 97.6975 27.0485C94.7561 18.0983 101.627 12.9206 106.279 11.9496C114.764 10.3188 123.558 9.60339 132.55 9.91907ZM6.03351 22.0734C7.13426 22.0734 8.16348 22.3768 9.0522 22.8981L133.221 86.7863C133.59 86.9688 133.955 87.1583 134.317 87.3504L134.785 87.5911L134.779 87.5975L136.043 88.3165C146.435 94.4673 153.221 104.576 153.221 116.011C153.221 116.096 153.214 116.179 153.213 116.265L153.221 116.256L153.222 159.193C153.223 159.559 153.223 159.913 153.223 160.256L153.228 167.01C153.228 167.172 153.229 167.323 153.229 167.466L153.231 169.073C153.233 169.123 153.238 169.173 153.238 169.224C153.238 172.6 150.537 175.335 147.203 175.335C146.178 175.335 145.214 175.074 144.369 174.618L115.522 160.056L115.56 160.012C103.863 154.569 95.9362 144.24 95.8234 132.363C95.8157 123.454 94.4107 113.11 80.2111 100.833C71.362 93.1844 60.7899 84.0003 50.3195 74.8857L47.0185 72.0115C25.6122 53.3691 5.4436 35.7311 2.29302 32.9753L1.94823 32.6739C1.89474 32.6266 1.85865 32.5956 1.85865 32.5956L1.39712 32.0894C0.526044 31.0305 0 29.6705 0 28.1845C0 24.8084 2.70161 22.0734 6.03351 22.0734Z" fill="#F93262"/>
3
+ </svg>
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "n8n-nodes-elfsight-ai-chatbot",
3
+ "version": "0.1.0",
4
+ "description": "n8n community node for the Elfsight AI Chatbot: trigger on completed conversations and fetch recent ones",
5
+ "license": "MIT",
6
+ "homepage": "https://github.com/elfsight/n8n-nodes-elfsight-ai-chatbot",
7
+ "keywords": [
8
+ "n8n-community-node-package",
9
+ "n8n",
10
+ "elfsight",
11
+ "ai-chatbot",
12
+ "chatbot",
13
+ "conversations"
14
+ ],
15
+ "author": {
16
+ "name": "Elfsight",
17
+ "email": "help@elfsight.com"
18
+ },
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/elfsight/n8n-nodes-elfsight-ai-chatbot.git"
22
+ },
23
+ "scripts": {
24
+ "build": "n8n-node build",
25
+ "build:watch": "tsc --watch",
26
+ "dev": "n8n-node dev",
27
+ "lint": "n8n-node lint",
28
+ "lint:fix": "n8n-node lint --fix",
29
+ "release": "n8n-node release",
30
+ "prepublishOnly": "n8n-node prerelease"
31
+ },
32
+ "files": [
33
+ "dist"
34
+ ],
35
+ "n8n": {
36
+ "n8nNodesApiVersion": 1,
37
+ "strict": true,
38
+ "credentials": [
39
+ "dist/credentials/ElfsightAiChatbotApi.credentials.js"
40
+ ],
41
+ "nodes": [
42
+ "dist/nodes/ElfsightAiChatbot/ElfsightAiChatbot.node.js",
43
+ "dist/nodes/ElfsightAiChatbot/ElfsightAiChatbotTrigger.node.js"
44
+ ]
45
+ },
46
+ "devDependencies": {
47
+ "@n8n/node-cli": "*",
48
+ "eslint": "9.32.0",
49
+ "prettier": "3.6.2",
50
+ "release-it": "^19.0.4",
51
+ "typescript": "5.9.2"
52
+ },
53
+ "peerDependencies": {
54
+ "n8n-workflow": "*"
55
+ },
56
+ "bugs": {
57
+ "url": "https://github.com/elfsight/n8n-nodes-elfsight-ai-chatbot/issues"
58
+ }
59
+ }