n8n-nodes-nashir 0.6.0 → 0.7.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 +8 -0
- package/dist/nodes/NashirContact/NashirContact.node.d.ts.map +1 -1
- package/dist/nodes/NashirContact/NashirContact.node.js +31 -3
- package/dist/nodes/NashirContact/NashirContact.node.js.map +1 -1
- package/nodes/NashirContact/NashirContact.node.ts +34 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -101,6 +101,14 @@ This workflow fetches the last 10 messages for an inbound WhatsApp number and pa
|
|
|
101
101
|
|
|
102
102
|
## Changelog
|
|
103
103
|
|
|
104
|
+
### 0.6.1 — Apr 2026
|
|
105
|
+
|
|
106
|
+
**Fix: `Nashir Contact` is now wireable as an AI Agent tool**
|
|
107
|
+
|
|
108
|
+
- Added `usableAsTool: true` to `Nashir Contact`'s node description. n8n requires this flag on community nodes for `ai_tool` connections to survive workflow import. Without it, dropping `Nashir Contact → Search Knowledge Base` into an Agent's tools input was silently rejected on re-import (the connection lived in the JSON but the n8n UI rendered the agent disconnected).
|
|
109
|
+
- Symptom this fixes: importing the **AI Auto Reply v2** template with 0.6.0 left the four KB nodes floating, agents showed no Tool / Chat Model / Memory wiring. Update to 0.6.1, re-import the template, wiring renders correctly.
|
|
110
|
+
- No API change — workflows and credentials migrate cleanly. Operation surface is unchanged from 0.6.0.
|
|
111
|
+
|
|
104
112
|
### 0.6.0 — Apr 2026
|
|
105
113
|
|
|
106
114
|
**New operation: Search Knowledge Base on `Nashir Contact`**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NashirContact.node.d.ts","sourceRoot":"","sources":["../../../nodes/NashirContact/NashirContact.node.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EACpB,MAAM,cAAc,CAAC;AAItB,qBAAa,aAAc,YAAW,SAAS;IAC9C,WAAW,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"NashirContact.node.d.ts","sourceRoot":"","sources":["../../../nodes/NashirContact/NashirContact.node.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EACpB,MAAM,cAAc,CAAC;AAItB,qBAAa,aAAc,YAAW,SAAS;IAC9C,WAAW,EAAE,oBAAoB,CAgI/B;IAEI,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;CA8EvE"}
|
|
@@ -13,6 +13,10 @@ class NashirContact {
|
|
|
13
13
|
subtitle: '={{$parameter["operation"]}}',
|
|
14
14
|
description: 'Manage contacts and retrieve knowledge from nashir.ai',
|
|
15
15
|
defaults: { name: 'Nashir Contact', color: '#6366f1' },
|
|
16
|
+
// Required for n8n's AI Agent to accept this node as a tool source.
|
|
17
|
+
// Without it, ai_tool connections from this node are rejected on
|
|
18
|
+
// import (e.g. Search Knowledge Base wired into an agent's tools input).
|
|
19
|
+
usableAsTool: true,
|
|
16
20
|
inputs: ['main'],
|
|
17
21
|
outputs: ['main'],
|
|
18
22
|
credentials: [{ name: 'nashirApi', required: true }],
|
|
@@ -86,8 +90,10 @@ class NashirContact {
|
|
|
86
90
|
},
|
|
87
91
|
// ── Search Knowledge Base fields ─────────────────────────────────────────
|
|
88
92
|
// Server-side: nashir.ai embeds the query (text-embedding-3-small) and
|
|
89
|
-
// runs vector similarity against the team's knowledge_chunks
|
|
90
|
-
// is derived from the API key
|
|
93
|
+
// runs vector similarity against the team's knowledge_chunks, scoped
|
|
94
|
+
// to the business. team_id is derived from the API key; business_id
|
|
95
|
+
// is supplied per-call so a team with multiple businesses doesn't
|
|
96
|
+
// leak knowledge across them.
|
|
91
97
|
{
|
|
92
98
|
displayName: 'Query',
|
|
93
99
|
name: 'query',
|
|
@@ -98,6 +104,16 @@ class NashirContact {
|
|
|
98
104
|
description: "The customer's question or topic to search for in the knowledge base. Plain text — no embedding step required on your side.",
|
|
99
105
|
displayOptions: { show: { operation: ['searchKnowledge'] } },
|
|
100
106
|
},
|
|
107
|
+
{
|
|
108
|
+
displayName: 'Business ID',
|
|
109
|
+
name: 'businessId',
|
|
110
|
+
type: 'string',
|
|
111
|
+
default: '',
|
|
112
|
+
required: true,
|
|
113
|
+
placeholder: "={{ $('Webhook').first().json.body.business_id }}",
|
|
114
|
+
description: 'Business to scope the search to. The webhook payload includes business_id — wire it through with an expression. Leaving this empty is supported only against legacy backends; the current /api/v1/knowledge/search rejects requests without it.',
|
|
115
|
+
displayOptions: { show: { operation: ['searchKnowledge'] } },
|
|
116
|
+
},
|
|
101
117
|
{
|
|
102
118
|
displayName: 'Limit',
|
|
103
119
|
name: 'kbLimit',
|
|
@@ -141,7 +157,19 @@ class NashirContact {
|
|
|
141
157
|
throw new Error('Search Knowledge Base: query is required');
|
|
142
158
|
}
|
|
143
159
|
const limit = this.getNodeParameter('kbLimit', i, 4);
|
|
144
|
-
|
|
160
|
+
const businessIdRaw = this.getNodeParameter('businessId', i, '').trim();
|
|
161
|
+
const body = { query, limit };
|
|
162
|
+
if (businessIdRaw) {
|
|
163
|
+
const businessId = parseInt(businessIdRaw, 10);
|
|
164
|
+
if (!Number.isFinite(businessId) || businessId <= 0) {
|
|
165
|
+
throw new Error(`Search Knowledge Base: businessId must be a positive integer, got "${businessIdRaw}"`);
|
|
166
|
+
}
|
|
167
|
+
body.business_id = businessId;
|
|
168
|
+
}
|
|
169
|
+
// If businessId is empty, omit it — old backends still accept the
|
|
170
|
+
// request. Once /api/v1/knowledge/search starts requiring business_id
|
|
171
|
+
// (S49 task 1), the absence here surfaces as a 400 from nashir.ai.
|
|
172
|
+
responseData = await (0, api_1.nashirApiRequest)(this, 'POST', `/knowledge/search`, body);
|
|
145
173
|
}
|
|
146
174
|
else {
|
|
147
175
|
throw new Error(`Unknown operation: ${operation}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NashirContact.node.js","sourceRoot":"","sources":["../../../nodes/NashirContact/NashirContact.node.ts"],"names":[],"mappings":";;;AAQA,uCAAiD;AAEjD,MAAa,aAAa;IAA1B;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,gBAAgB;YAC7B,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,8BAA8B;YACxC,WAAW,EAAE,uDAAuD;YACpE,QAAQ,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE;YACtD,MAAM,EAAE,CAAC,MAAM,CAAC;YAChB,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YACpD,UAAU,EAAE;gBACX;oBACC,WAAW,EAAE,WAAW;oBACxB,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE;wBACR,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,qBAAqB,EAAE;wBAC3E,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,uBAAuB,EAAE;wBACrF;4BACC,IAAI,EAAE,0BAA0B;4BAChC,KAAK,EAAE,wBAAwB;4BAC/B,MAAM,EAAE,2DAA2D;yBACnE;wBACD;4BACC,IAAI,EAAE,uBAAuB;4BAC7B,KAAK,EAAE,iBAAiB;4BACxB,MAAM,EAAE,iFAAiF;4BACzF,WAAW,EACV,iFAAiF;yBAClF;qBACD;oBACD,OAAO,EAAE,YAAY;iBACrB;gBAED,4EAA4E;gBAC5E;oBACC,WAAW,EAAE,cAAc;oBAC3B,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,aAAa;oBAC1B,WAAW,EAAE,qDAAqD;oBAClE,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,EAAE;iBACrE;gBAED,4EAA4E;gBAC5E;oBACC,WAAW,EAAE,MAAM;oBACnB,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,mBAAmB;oBAChC,WAAW,EAAE,mEAAmE;oBAChF,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE;iBACvD;gBAED,4EAA4E;gBAC5E,2EAA2E;gBAC3E,uEAAuE;gBACvE,sDAAsD;gBACtD;oBACC,WAAW,EAAE,WAAW;oBACxB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,6BAA6B;oBAC1C,WAAW,EACV,mIAAmI;oBACpI,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,wBAAwB,CAAC,EAAE,EAAE;iBACnE;gBACD;oBACC,WAAW,EAAE,OAAO;oBACpB,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;oBAC1C,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,iFAAiF;oBAC9F,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,wBAAwB,CAAC,EAAE,EAAE;iBACnE;gBAED,4EAA4E;gBAC5E,uEAAuE;gBACvE,
|
|
1
|
+
{"version":3,"file":"NashirContact.node.js","sourceRoot":"","sources":["../../../nodes/NashirContact/NashirContact.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,10 @@ export class NashirContact implements INodeType {
|
|
|
18
18
|
subtitle: '={{$parameter["operation"]}}',
|
|
19
19
|
description: 'Manage contacts and retrieve knowledge from nashir.ai',
|
|
20
20
|
defaults: { name: 'Nashir Contact', color: '#6366f1' },
|
|
21
|
+
// Required for n8n's AI Agent to accept this node as a tool source.
|
|
22
|
+
// Without it, ai_tool connections from this node are rejected on
|
|
23
|
+
// import (e.g. Search Knowledge Base wired into an agent's tools input).
|
|
24
|
+
usableAsTool: true,
|
|
21
25
|
inputs: ['main'],
|
|
22
26
|
outputs: ['main'],
|
|
23
27
|
credentials: [{ name: 'nashirApi', required: true }],
|
|
@@ -97,8 +101,10 @@ export class NashirContact implements INodeType {
|
|
|
97
101
|
|
|
98
102
|
// ── Search Knowledge Base fields ─────────────────────────────────────────
|
|
99
103
|
// Server-side: nashir.ai embeds the query (text-embedding-3-small) and
|
|
100
|
-
// runs vector similarity against the team's knowledge_chunks
|
|
101
|
-
// is derived from the API key
|
|
104
|
+
// runs vector similarity against the team's knowledge_chunks, scoped
|
|
105
|
+
// to the business. team_id is derived from the API key; business_id
|
|
106
|
+
// is supplied per-call so a team with multiple businesses doesn't
|
|
107
|
+
// leak knowledge across them.
|
|
102
108
|
{
|
|
103
109
|
displayName: 'Query',
|
|
104
110
|
name: 'query',
|
|
@@ -110,6 +116,17 @@ export class NashirContact implements INodeType {
|
|
|
110
116
|
"The customer's question or topic to search for in the knowledge base. Plain text — no embedding step required on your side.",
|
|
111
117
|
displayOptions: { show: { operation: ['searchKnowledge'] } },
|
|
112
118
|
},
|
|
119
|
+
{
|
|
120
|
+
displayName: 'Business ID',
|
|
121
|
+
name: 'businessId',
|
|
122
|
+
type: 'string',
|
|
123
|
+
default: '',
|
|
124
|
+
required: true,
|
|
125
|
+
placeholder: "={{ $('Webhook').first().json.body.business_id }}",
|
|
126
|
+
description:
|
|
127
|
+
'Business to scope the search to. The webhook payload includes business_id — wire it through with an expression. Leaving this empty is supported only against legacy backends; the current /api/v1/knowledge/search rejects requests without it.',
|
|
128
|
+
displayOptions: { show: { operation: ['searchKnowledge'] } },
|
|
129
|
+
},
|
|
113
130
|
{
|
|
114
131
|
displayName: 'Limit',
|
|
115
132
|
name: 'kbLimit',
|
|
@@ -161,11 +178,25 @@ export class NashirContact implements INodeType {
|
|
|
161
178
|
throw new Error('Search Knowledge Base: query is required');
|
|
162
179
|
}
|
|
163
180
|
const limit = this.getNodeParameter('kbLimit', i, 4) as number;
|
|
181
|
+
const businessIdRaw = (this.getNodeParameter('businessId', i, '') as string).trim();
|
|
182
|
+
const body: IDataObject = { query, limit };
|
|
183
|
+
if (businessIdRaw) {
|
|
184
|
+
const businessId = parseInt(businessIdRaw, 10);
|
|
185
|
+
if (!Number.isFinite(businessId) || businessId <= 0) {
|
|
186
|
+
throw new Error(
|
|
187
|
+
`Search Knowledge Base: businessId must be a positive integer, got "${businessIdRaw}"`,
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
body.business_id = businessId;
|
|
191
|
+
}
|
|
192
|
+
// If businessId is empty, omit it — old backends still accept the
|
|
193
|
+
// request. Once /api/v1/knowledge/search starts requiring business_id
|
|
194
|
+
// (S49 task 1), the absence here surfaces as a 400 from nashir.ai.
|
|
164
195
|
responseData = await nashirApiRequest(
|
|
165
196
|
this,
|
|
166
197
|
'POST',
|
|
167
198
|
`/knowledge/search`,
|
|
168
|
-
|
|
199
|
+
body,
|
|
169
200
|
);
|
|
170
201
|
|
|
171
202
|
} else {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "n8n-nodes-nashir",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "n8n community nodes for nashir.ai — publish to Facebook, Instagram, TikTok, LinkedIn, YouTube, WhatsApp and Telegram, plus AI conversation management",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"n8n-community-node-package",
|