n8n-nodes-digitalsac 0.2.5 → 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 +137 -0
- package/dist/nodes/Digitalsac/Digitalsac.node.js +171 -9
- package/nodes/Digitalsac/Digitalsac.node.ts +174 -9
- package/package.json +1 -1
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,17 +58,89 @@ 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
|
+
},
|
|
73
|
+
{
|
|
74
|
+
displayName: 'Corpo da Mensagem',
|
|
75
|
+
name: 'messageBody',
|
|
76
|
+
type: 'string',
|
|
77
|
+
default: 'Mensagem de teste',
|
|
78
|
+
displayOptions: {
|
|
79
|
+
show: {
|
|
80
|
+
operation: ['sendMessage'],
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
description: 'Texto da mensagem a ser enviada',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
displayName: 'Número de Telefone',
|
|
87
|
+
name: 'phoneNumber',
|
|
88
|
+
type: 'string',
|
|
89
|
+
default: '5511999999999',
|
|
90
|
+
displayOptions: {
|
|
91
|
+
show: {
|
|
92
|
+
operation: ['sendMessage'],
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
description: 'Número de telefone no formato DDI+DDD+Número (ex: 5511999999999)',
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
displayName: 'Chave Externa',
|
|
99
|
+
name: 'externalKey',
|
|
100
|
+
type: 'string',
|
|
101
|
+
default: 'Digitalsac123',
|
|
102
|
+
displayOptions: {
|
|
103
|
+
show: {
|
|
104
|
+
operation: ['sendMessage'],
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
description: 'Identificador único opcional para a mensagem',
|
|
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
|
+
},
|
|
54
133
|
{
|
|
55
134
|
displayName: 'Dados (JSON)',
|
|
56
135
|
name: 'bodyData',
|
|
57
136
|
type: 'json',
|
|
58
|
-
default: '{"
|
|
137
|
+
default: '{"ticketId": 123, "queueId": 1}',
|
|
59
138
|
displayOptions: {
|
|
60
139
|
show: {
|
|
61
|
-
operation: ['validateDate', 'transferQueue', 'transferAgent', 'closeTicket', '
|
|
140
|
+
operation: ['validateDate', 'transferQueue', 'transferAgent', 'closeTicket', 'linkTag', 'linkKanban', 'linkCarteira'],
|
|
62
141
|
},
|
|
63
142
|
},
|
|
64
|
-
description: 'Dados no formato JSON',
|
|
143
|
+
description: 'Dados no formato JSON conforme a operação selecionada',
|
|
65
144
|
},
|
|
66
145
|
],
|
|
67
146
|
};
|
|
@@ -172,12 +251,74 @@ class Digitalsac {
|
|
|
172
251
|
case 'sendMessage':
|
|
173
252
|
url = `/v1/api/external/${param}`;
|
|
174
253
|
method = 'POST';
|
|
254
|
+
// Usar campos separados em vez de JSON
|
|
255
|
+
const messageBody = this.getNodeParameter('messageBody', i);
|
|
256
|
+
const phoneNumber = this.getNodeParameter('phoneNumber', i);
|
|
257
|
+
const externalKey = this.getNodeParameter('externalKey', i);
|
|
258
|
+
// Criar o objeto diretamente
|
|
259
|
+
body = {
|
|
260
|
+
body: messageBody,
|
|
261
|
+
number: phoneNumber,
|
|
262
|
+
externalKey: externalKey
|
|
263
|
+
};
|
|
264
|
+
headers['Content-Type'] = 'application/json';
|
|
265
|
+
options = {
|
|
266
|
+
method,
|
|
267
|
+
headers,
|
|
268
|
+
body,
|
|
269
|
+
uri: `${baseUrl}${url}`,
|
|
270
|
+
json: true,
|
|
271
|
+
};
|
|
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';
|
|
175
320
|
try {
|
|
176
|
-
|
|
177
|
-
const bodyDataStr = this.getNodeParameter('bodyData', i);
|
|
178
|
-
// Remover espaços extras e quebras de linha
|
|
179
|
-
const cleanJson = bodyDataStr.replace(/\s+/g, ' ').trim();
|
|
180
|
-
body = JSON.parse(cleanJson);
|
|
321
|
+
body = JSON.parse(this.getNodeParameter('bodyData', i));
|
|
181
322
|
}
|
|
182
323
|
catch (e) {
|
|
183
324
|
throw new Error('Formato de JSON inválido para Dados (JSON)');
|
|
@@ -186,7 +327,28 @@ class Digitalsac {
|
|
|
186
327
|
options = {
|
|
187
328
|
method,
|
|
188
329
|
headers,
|
|
189
|
-
body,
|
|
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,
|
|
190
352
|
uri: `${baseUrl}${url}`,
|
|
191
353
|
json: true,
|
|
192
354
|
};
|
|
@@ -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,17 +63,89 @@ 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
|
+
},
|
|
78
|
+
{
|
|
79
|
+
displayName: 'Corpo da Mensagem',
|
|
80
|
+
name: 'messageBody',
|
|
81
|
+
type: 'string',
|
|
82
|
+
default: 'Mensagem de teste',
|
|
83
|
+
displayOptions: {
|
|
84
|
+
show: {
|
|
85
|
+
operation: ['sendMessage'],
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
description: 'Texto da mensagem a ser enviada',
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
displayName: 'Número de Telefone',
|
|
92
|
+
name: 'phoneNumber',
|
|
93
|
+
type: 'string',
|
|
94
|
+
default: '5511999999999',
|
|
95
|
+
displayOptions: {
|
|
96
|
+
show: {
|
|
97
|
+
operation: ['sendMessage'],
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
description: 'Número de telefone no formato DDI+DDD+Número (ex: 5511999999999)',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
displayName: 'Chave Externa',
|
|
104
|
+
name: 'externalKey',
|
|
105
|
+
type: 'string',
|
|
106
|
+
default: 'Digitalsac123',
|
|
107
|
+
displayOptions: {
|
|
108
|
+
show: {
|
|
109
|
+
operation: ['sendMessage'],
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
description: 'Identificador único opcional para a mensagem',
|
|
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
|
+
},
|
|
59
138
|
{
|
|
60
139
|
displayName: 'Dados (JSON)',
|
|
61
140
|
name: 'bodyData',
|
|
62
141
|
type: 'json',
|
|
63
|
-
default: '{"
|
|
142
|
+
default: '{"ticketId": 123, "queueId": 1}',
|
|
64
143
|
displayOptions: {
|
|
65
144
|
show: {
|
|
66
|
-
operation: ['validateDate', 'transferQueue', 'transferAgent', 'closeTicket', '
|
|
145
|
+
operation: ['validateDate', 'transferQueue', 'transferAgent', 'closeTicket', 'linkTag', 'linkKanban', 'linkCarteira'],
|
|
67
146
|
},
|
|
68
147
|
},
|
|
69
|
-
description: 'Dados no formato JSON',
|
|
148
|
+
description: 'Dados no formato JSON conforme a operação selecionada',
|
|
70
149
|
},
|
|
71
150
|
],
|
|
72
151
|
};
|
|
@@ -178,21 +257,107 @@ export class Digitalsac implements INodeType {
|
|
|
178
257
|
case 'sendMessage':
|
|
179
258
|
url = `/v1/api/external/${param}`;
|
|
180
259
|
method = 'POST';
|
|
260
|
+
|
|
261
|
+
// Usar campos separados em vez de JSON
|
|
262
|
+
const messageBody = this.getNodeParameter('messageBody', i) as string;
|
|
263
|
+
const phoneNumber = this.getNodeParameter('phoneNumber', i) as string;
|
|
264
|
+
const externalKey = this.getNodeParameter('externalKey', i) as string;
|
|
265
|
+
|
|
266
|
+
// Criar o objeto diretamente
|
|
267
|
+
body = {
|
|
268
|
+
body: messageBody,
|
|
269
|
+
number: phoneNumber,
|
|
270
|
+
externalKey: externalKey
|
|
271
|
+
};
|
|
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';
|
|
181
288
|
try {
|
|
182
|
-
|
|
183
|
-
const bodyDataStr = this.getNodeParameter('bodyData', i) as string;
|
|
184
|
-
// Remover espaços extras e quebras de linha
|
|
185
|
-
const cleanJson = bodyDataStr.replace(/\s+/g, ' ').trim();
|
|
186
|
-
body = JSON.parse(cleanJson);
|
|
289
|
+
body = JSON.parse(this.getNodeParameter('bodyData', i) as string);
|
|
187
290
|
} catch (e) {
|
|
188
291
|
throw new Error('Formato de JSON inválido para Dados (JSON)');
|
|
189
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
|
+
};
|
|
190
314
|
|
|
191
315
|
headers['Content-Type'] = 'application/json';
|
|
192
316
|
options = {
|
|
193
317
|
method,
|
|
194
318
|
headers,
|
|
195
|
-
body,
|
|
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
|
+
}
|
|
356
|
+
headers['Content-Type'] = 'application/json';
|
|
357
|
+
options = {
|
|
358
|
+
method,
|
|
359
|
+
headers,
|
|
360
|
+
body,
|
|
196
361
|
uri: `${baseUrl}${url}`,
|
|
197
362
|
json: true,
|
|
198
363
|
};
|