n8n-nodes-digitalsac 0.2.7 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,6 +13,13 @@ Este pacote adiciona um nó personalizado ao n8n para interagir com a API do Dig
13
13
  - Transferir para Atendente
14
14
  - Fechar Ticket
15
15
  - Enviar Mensagem (texto e arquivos)
16
+ - Listar Tags
17
+ - Vincular Tag
18
+ - Criar Tag
19
+ - Listar Kanbans
20
+ - Vincular Kanban
21
+ - Listar Carteiras
22
+ - Vincular Carteira
16
23
 
17
24
  ## Instalação
18
25
 
@@ -128,6 +135,64 @@ Onde:
128
135
  ```
129
136
  Onde `data` é o nome da propriedade binária que contém o arquivo.
130
137
 
138
+ ### Listar Tags
139
+ 1. Selecione a operação **Listar Tags**
140
+ 2. Não é necessário configurar parâmetros adicionais
141
+
142
+ ### Vincular Tag
143
+ 1. Selecione a operação **Vincular Tag**
144
+ 2. No campo **Dados (JSON)**, insira os dados no formato:
145
+ ```json
146
+ {
147
+ "ticketId": 123,
148
+ "tagId": 456
149
+ }
150
+ ```
151
+ Onde:
152
+ - `ticketId`: ID do ticket
153
+ - `tagId`: ID da tag a ser vinculada
154
+
155
+ ### Criar Tag
156
+ 1. Selecione a operação **Criar Tag**
157
+ 2. No campo **Nome da Tag**, insira o nome da tag
158
+ 3. No campo **Cor da Tag**, insira a cor em formato hexadecimal (ex: #FF5733, #2196F3, #4CAF50)
159
+
160
+ ### Listar Kanbans
161
+ 1. Selecione a operação **Listar Kanbans**
162
+ 2. No campo **User ID**, insira o ID do usuário
163
+
164
+ ### Vincular Kanban
165
+ 1. Selecione a operação **Vincular Kanban**
166
+ 2. No campo **Dados (JSON)**, insira os dados no formato:
167
+ ```json
168
+ {
169
+ "ticketId": 123,
170
+ "kanbanId": 456,
171
+ "userId": 789
172
+ }
173
+ ```
174
+ Onde:
175
+ - `ticketId`: ID do ticket
176
+ - `kanbanId`: ID do kanban a ser vinculado
177
+ - `userId`: ID do usuário
178
+
179
+ ### Listar Carteiras
180
+ 1. Selecione a operação **Listar Carteiras**
181
+ 2. Não é necessário configurar parâmetros adicionais
182
+
183
+ ### Vincular Carteira
184
+ 1. Selecione a operação **Vincular Carteira**
185
+ 2. No campo **Dados (JSON)**, insira os dados no formato:
186
+ ```json
187
+ {
188
+ "ticketId": 123,
189
+ "userId": 456
190
+ }
191
+ ```
192
+ Onde:
193
+ - `ticketId`: ID do ticket
194
+ - `userId`: ID do usuário da carteira
195
+
131
196
  ## Exemplos de Respostas da API
132
197
 
133
198
  ### Transferir para Fila
@@ -160,6 +225,37 @@ Onde `data` é o nome da propriedade binária que contém o arquivo.
160
225
  }
161
226
  ```
162
227
 
228
+ ### Criar Tag
229
+ **Resposta de sucesso (tag criada):**
230
+ ```json
231
+ {
232
+ "status": 1,
233
+ "tagId": 456
234
+ }
235
+ ```
236
+
237
+ **Resposta quando tag já existe:**
238
+ ```json
239
+ {
240
+ "status": 2
241
+ }
242
+ ```
243
+
244
+ **Resposta de erro:**
245
+ ```json
246
+ {
247
+ "status": 0
248
+ }
249
+ ```
250
+
251
+ ### Vincular Tag/Kanban/Carteira
252
+ **Resposta de sucesso:**
253
+ ```json
254
+ {
255
+ "status": 0
256
+ }
257
+ ```
258
+
163
259
  ## Exemplo de Fluxo
164
260
 
165
261
  ### Enviar PDF para um contato
@@ -199,6 +295,47 @@ Onde `data` é o nome da propriedade binária que contém o arquivo.
199
295
  }
200
296
  ```
201
297
 
298
+ ### Criar uma tag e vincular a um ticket
299
+ 1. Adicione um nó **Digitalsac**
300
+ - Operação: **Criar Tag**
301
+ - Nome da Tag: `Suporte Técnico`
302
+ - Cor da Tag: `#2196F3`
303
+ 2. Conecte a outro nó **Digitalsac**
304
+ - Operação: **Vincular Tag**
305
+ - Dados (JSON):
306
+ ```json
307
+ {
308
+ "ticketId": 123,
309
+ "tagId": "{{$json.tagId}}"
310
+ }
311
+ ```
312
+
313
+ ### Listar kanbans de um usuário e vincular a um ticket
314
+ 1. Adicione um nó **Digitalsac**
315
+ - Operação: **Listar Kanbans**
316
+ - User ID: `10`
317
+ 2. Conecte a outro nó **Digitalsac**
318
+ - Operação: **Vincular Kanban**
319
+ - Dados (JSON):
320
+ ```json
321
+ {
322
+ "ticketId": 123,
323
+ "kanbanId": 5,
324
+ "userId": 10
325
+ }
326
+ ```
327
+
328
+ ### Vincular carteira a um ticket
329
+ 1. Adicione um nó **Digitalsac**
330
+ - Operação: **Vincular Carteira**
331
+ - Dados (JSON):
332
+ ```json
333
+ {
334
+ "ticketId": 123,
335
+ "userId": 15
336
+ }
337
+ ```
338
+
202
339
  ## Suporte
203
340
 
204
341
  Para suporte, entre em contato com [contato@digitalsac.io](mailto:contato@digitalsac.io).
@@ -36,6 +36,13 @@ class Digitalsac {
36
36
  { name: 'Transferir para Atendente', value: 'transferAgent' },
37
37
  { name: 'Fechar Ticket', value: 'closeTicket' },
38
38
  { name: 'Enviar Mensagem', value: 'sendMessage' },
39
+ { name: 'Listar Tags', value: 'listTags' },
40
+ { name: 'Vincular Tag', value: 'linkTag' },
41
+ { name: 'Criar Tag', value: 'createTag' },
42
+ { name: 'Listar Kanbans', value: 'listKanbans' },
43
+ { name: 'Vincular Kanban', value: 'linkKanban' },
44
+ { name: 'Listar Carteiras', value: 'listCarteiras' },
45
+ { name: 'Vincular Carteira', value: 'linkCarteira' },
39
46
  ],
40
47
  default: 'validateWhatsapp',
41
48
  },
@@ -51,6 +58,18 @@ class Digitalsac {
51
58
  },
52
59
  description: 'Número, CPF ou UUID da mensagem (conforme operação)',
53
60
  },
61
+ {
62
+ displayName: 'User ID',
63
+ name: 'userId',
64
+ type: 'number',
65
+ default: 1,
66
+ displayOptions: {
67
+ show: {
68
+ operation: ['listKanbans'],
69
+ },
70
+ },
71
+ description: 'ID do usuário para listar kanbans',
72
+ },
54
73
  {
55
74
  displayName: 'Corpo da Mensagem',
56
75
  name: 'messageBody',
@@ -87,17 +106,41 @@ class Digitalsac {
87
106
  },
88
107
  description: 'Identificador único opcional para a mensagem',
89
108
  },
109
+ {
110
+ displayName: 'Nome da Tag',
111
+ name: 'tagName',
112
+ type: 'string',
113
+ default: 'Nova Tag',
114
+ displayOptions: {
115
+ show: {
116
+ operation: ['createTag'],
117
+ },
118
+ },
119
+ description: 'Nome da tag a ser criada',
120
+ },
121
+ {
122
+ displayName: 'Cor da Tag',
123
+ name: 'tagColor',
124
+ type: 'string',
125
+ default: '#2196F3',
126
+ displayOptions: {
127
+ show: {
128
+ operation: ['createTag'],
129
+ },
130
+ },
131
+ description: 'Cor da tag em formato hexadecimal (ex: #FF5733, #2196F3, #4CAF50)',
132
+ },
90
133
  {
91
134
  displayName: 'Dados (JSON)',
92
135
  name: 'bodyData',
93
136
  type: 'json',
94
- default: '{"body": "Mensagem de teste", "number": "5511999999999", "externalKey": "chave123"}',
137
+ default: '{"ticketId": 123, "queueId": 1}',
95
138
  displayOptions: {
96
139
  show: {
97
- operation: ['validateDate', 'transferQueue', 'transferAgent', 'closeTicket'],
140
+ operation: ['validateDate', 'transferQueue', 'transferAgent', 'closeTicket', 'linkTag', 'linkKanban', 'linkCarteira'],
98
141
  },
99
142
  },
100
- description: 'Dados no formato JSON',
143
+ description: 'Dados no formato JSON conforme a operação selecionada',
101
144
  },
102
145
  ],
103
146
  };
@@ -227,6 +270,89 @@ class Digitalsac {
227
270
  json: true,
228
271
  };
229
272
  break;
273
+ case 'listTags':
274
+ url = '/typebot/listar_tags';
275
+ break;
276
+ case 'linkTag':
277
+ url = '/typebot/vincular_tag';
278
+ method = 'POST';
279
+ try {
280
+ body = JSON.parse(this.getNodeParameter('bodyData', i));
281
+ }
282
+ catch (e) {
283
+ throw new Error('Formato de JSON inválido para Dados (JSON)');
284
+ }
285
+ headers['Content-Type'] = 'application/json';
286
+ options = {
287
+ method,
288
+ headers,
289
+ body,
290
+ uri: `${baseUrl}${url}`,
291
+ json: true,
292
+ };
293
+ break;
294
+ case 'createTag':
295
+ url = '/typebot/criar_tag';
296
+ method = 'POST';
297
+ // Usar campos separados para criar tag
298
+ const tagName = this.getNodeParameter('tagName', i);
299
+ const tagColor = this.getNodeParameter('tagColor', i);
300
+ body = {
301
+ tag: tagName,
302
+ color: tagColor
303
+ };
304
+ headers['Content-Type'] = 'application/json';
305
+ options = {
306
+ method,
307
+ headers,
308
+ body,
309
+ uri: `${baseUrl}${url}`,
310
+ json: true,
311
+ };
312
+ break;
313
+ case 'listKanbans':
314
+ const userId = this.getNodeParameter('userId', i);
315
+ url = `/typebot/listar_kanbans?userId=${userId}`;
316
+ break;
317
+ case 'linkKanban':
318
+ url = '/typebot/vincular_kanban';
319
+ method = 'POST';
320
+ try {
321
+ body = JSON.parse(this.getNodeParameter('bodyData', i));
322
+ }
323
+ catch (e) {
324
+ throw new Error('Formato de JSON inválido para Dados (JSON)');
325
+ }
326
+ headers['Content-Type'] = 'application/json';
327
+ options = {
328
+ method,
329
+ headers,
330
+ body,
331
+ uri: `${baseUrl}${url}`,
332
+ json: true,
333
+ };
334
+ break;
335
+ case 'listCarteiras':
336
+ url = '/typebot/listar_carteiras';
337
+ break;
338
+ case 'linkCarteira':
339
+ url = '/typebot/vincular_carteira';
340
+ method = 'POST';
341
+ try {
342
+ body = JSON.parse(this.getNodeParameter('bodyData', i));
343
+ }
344
+ catch (e) {
345
+ throw new Error('Formato de JSON inválido para Dados (JSON)');
346
+ }
347
+ headers['Content-Type'] = 'application/json';
348
+ options = {
349
+ method,
350
+ headers,
351
+ body,
352
+ uri: `${baseUrl}${url}`,
353
+ json: true,
354
+ };
355
+ break;
230
356
  }
231
357
  // Se as opções não foram definidas no switch, defina-as aqui para operações GET
232
358
  if (!options.method) {
@@ -41,6 +41,13 @@ export class Digitalsac implements INodeType {
41
41
  { name: 'Transferir para Atendente', value: 'transferAgent' },
42
42
  { name: 'Fechar Ticket', value: 'closeTicket' },
43
43
  { name: 'Enviar Mensagem', value: 'sendMessage' },
44
+ { name: 'Listar Tags', value: 'listTags' },
45
+ { name: 'Vincular Tag', value: 'linkTag' },
46
+ { name: 'Criar Tag', value: 'createTag' },
47
+ { name: 'Listar Kanbans', value: 'listKanbans' },
48
+ { name: 'Vincular Kanban', value: 'linkKanban' },
49
+ { name: 'Listar Carteiras', value: 'listCarteiras' },
50
+ { name: 'Vincular Carteira', value: 'linkCarteira' },
44
51
  ],
45
52
  default: 'validateWhatsapp',
46
53
  },
@@ -56,6 +63,18 @@ export class Digitalsac implements INodeType {
56
63
  },
57
64
  description: 'Número, CPF ou UUID da mensagem (conforme operação)',
58
65
  },
66
+ {
67
+ displayName: 'User ID',
68
+ name: 'userId',
69
+ type: 'number',
70
+ default: 1,
71
+ displayOptions: {
72
+ show: {
73
+ operation: ['listKanbans'],
74
+ },
75
+ },
76
+ description: 'ID do usuário para listar kanbans',
77
+ },
59
78
  {
60
79
  displayName: 'Corpo da Mensagem',
61
80
  name: 'messageBody',
@@ -92,17 +111,41 @@ export class Digitalsac implements INodeType {
92
111
  },
93
112
  description: 'Identificador único opcional para a mensagem',
94
113
  },
114
+ {
115
+ displayName: 'Nome da Tag',
116
+ name: 'tagName',
117
+ type: 'string',
118
+ default: 'Nova Tag',
119
+ displayOptions: {
120
+ show: {
121
+ operation: ['createTag'],
122
+ },
123
+ },
124
+ description: 'Nome da tag a ser criada',
125
+ },
126
+ {
127
+ displayName: 'Cor da Tag',
128
+ name: 'tagColor',
129
+ type: 'string',
130
+ default: '#2196F3',
131
+ displayOptions: {
132
+ show: {
133
+ operation: ['createTag'],
134
+ },
135
+ },
136
+ description: 'Cor da tag em formato hexadecimal (ex: #FF5733, #2196F3, #4CAF50)',
137
+ },
95
138
  {
96
139
  displayName: 'Dados (JSON)',
97
140
  name: 'bodyData',
98
141
  type: 'json',
99
- default: '{"body": "Mensagem de teste", "number": "5511999999999", "externalKey": "chave123"}',
142
+ default: '{"ticketId": 123, "queueId": 1}',
100
143
  displayOptions: {
101
144
  show: {
102
- operation: ['validateDate', 'transferQueue', 'transferAgent', 'closeTicket'],
145
+ operation: ['validateDate', 'transferQueue', 'transferAgent', 'closeTicket', 'linkTag', 'linkKanban', 'linkCarteira'],
103
146
  },
104
147
  },
105
- description: 'Dados no formato JSON',
148
+ description: 'Dados no formato JSON conforme a operação selecionada',
106
149
  },
107
150
  ],
108
151
  };
@@ -227,6 +270,89 @@ export class Digitalsac implements INodeType {
227
270
  externalKey: externalKey
228
271
  };
229
272
 
273
+ headers['Content-Type'] = 'application/json';
274
+ options = {
275
+ method,
276
+ headers,
277
+ body,
278
+ uri: `${baseUrl}${url}`,
279
+ json: true,
280
+ };
281
+ break;
282
+ case 'listTags':
283
+ url = '/typebot/listar_tags';
284
+ break;
285
+ case 'linkTag':
286
+ url = '/typebot/vincular_tag';
287
+ method = 'POST';
288
+ try {
289
+ body = JSON.parse(this.getNodeParameter('bodyData', i) as string);
290
+ } catch (e) {
291
+ throw new Error('Formato de JSON inválido para Dados (JSON)');
292
+ }
293
+ headers['Content-Type'] = 'application/json';
294
+ options = {
295
+ method,
296
+ headers,
297
+ body,
298
+ uri: `${baseUrl}${url}`,
299
+ json: true,
300
+ };
301
+ break;
302
+ case 'createTag':
303
+ url = '/typebot/criar_tag';
304
+ method = 'POST';
305
+
306
+ // Usar campos separados para criar tag
307
+ const tagName = this.getNodeParameter('tagName', i) as string;
308
+ const tagColor = this.getNodeParameter('tagColor', i) as string;
309
+
310
+ body = {
311
+ tag: tagName,
312
+ color: tagColor
313
+ };
314
+
315
+ headers['Content-Type'] = 'application/json';
316
+ options = {
317
+ method,
318
+ headers,
319
+ body,
320
+ uri: `${baseUrl}${url}`,
321
+ json: true,
322
+ };
323
+ break;
324
+ case 'listKanbans':
325
+ const userId = this.getNodeParameter('userId', i) as number;
326
+ url = `/typebot/listar_kanbans?userId=${userId}`;
327
+ break;
328
+ case 'linkKanban':
329
+ url = '/typebot/vincular_kanban';
330
+ method = 'POST';
331
+ try {
332
+ body = JSON.parse(this.getNodeParameter('bodyData', i) as string);
333
+ } catch (e) {
334
+ throw new Error('Formato de JSON inválido para Dados (JSON)');
335
+ }
336
+ headers['Content-Type'] = 'application/json';
337
+ options = {
338
+ method,
339
+ headers,
340
+ body,
341
+ uri: `${baseUrl}${url}`,
342
+ json: true,
343
+ };
344
+ break;
345
+ case 'listCarteiras':
346
+ url = '/typebot/listar_carteiras';
347
+ break;
348
+ case 'linkCarteira':
349
+ url = '/typebot/vincular_carteira';
350
+ method = 'POST';
351
+ try {
352
+ body = JSON.parse(this.getNodeParameter('bodyData', i) as string);
353
+ } catch (e) {
354
+ throw new Error('Formato de JSON inválido para Dados (JSON)');
355
+ }
230
356
  headers['Content-Type'] = 'application/json';
231
357
  options = {
232
358
  method,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n-nodes-digitalsac",
3
- "version": "0.2.7",
3
+ "version": "0.2.8",
4
4
  "description": "Izing Pro Digitalsac",
5
5
  "keywords": [
6
6
  "n8n",