@growsalesai/n8n-nodes-datacrazy 1.7.6 → 1.7.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 +470 -0
- package/dist/nodes/Datacrazy/handlers/lead.handler.d.ts.map +1 -1
- package/dist/nodes/Datacrazy/handlers/lead.handler.js +8 -1
- package/dist/nodes/Datacrazy/handlers/lead.handler.js.map +1 -1
- package/dist/nodes/Datacrazy/handlers/utils/leadIfCondition.handler.d.ts.map +1 -1
- package/dist/nodes/Datacrazy/handlers/utils/leadIfCondition.handler.js +15 -6
- package/dist/nodes/Datacrazy/handlers/utils/leadIfCondition.handler.js.map +1 -1
- package/dist/nodes/Datacrazy/handlers/utils/webhookParser.handler.d.ts.map +1 -1
- package/dist/nodes/Datacrazy/handlers/utils/webhookParser.handler.js +32 -21
- package/dist/nodes/Datacrazy/handlers/utils/webhookParser.handler.js.map +1 -1
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
# @growsalesai/n8n-nodes-datacrazy
|
|
2
|
+
|
|
3
|
+
[](https://badge.fury.io/js/%40growsalesai%2Fn8n-nodes-datacrazy)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
|
|
6
|
+
Nó da comunidade N8N para integração completa com a plataforma **Datacrazy CRM**, oferecendo acesso a todas as funcionalidades de CRM, automações de messaging, gestão de pipelines, leads, negócios e muito mais.
|
|
7
|
+
|
|
8
|
+
## 📋 Índice
|
|
9
|
+
|
|
10
|
+
- [Instalação](#instalação)
|
|
11
|
+
- [Configuração](#configuração)
|
|
12
|
+
- [Nós Disponíveis](#nós-disponíveis)
|
|
13
|
+
- [Módulos do CRM](#módulos-do-crm)
|
|
14
|
+
- [Nó de Automações](#nó-de-automações)
|
|
15
|
+
- [Desenvolvimento](#desenvolvimento)
|
|
16
|
+
- [Reportar Issues](#reportar-issues)
|
|
17
|
+
- [Contribuição](#contribuição)
|
|
18
|
+
- [Licença](#licença)
|
|
19
|
+
|
|
20
|
+
## 🚀 Instalação
|
|
21
|
+
|
|
22
|
+
### Via n8n Community Nodes
|
|
23
|
+
|
|
24
|
+
1. Acesse as configurações do n8n
|
|
25
|
+
2. Vá para **Community Nodes**
|
|
26
|
+
3. Instale o pacote: `@growsalesai/n8n-nodes-datacrazy`
|
|
27
|
+
|
|
28
|
+
### Via npm
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm install @growsalesai/n8n-nodes-datacrazy
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## ⚙️ Configuração
|
|
35
|
+
|
|
36
|
+
1. Crie uma nova credencial do tipo **Datacrazy API**
|
|
37
|
+
2. Configure os seguintes campos:
|
|
38
|
+
- **URL CRM**: URL base para rotas CRM (ex: `https://crm.g1.datacrazy.io`)
|
|
39
|
+
- **URL API v1**: URL base para rotas v1 — deixe em branco para usar a mesma URL CRM
|
|
40
|
+
- **Token da API**: Seu token JWT de acesso à API Datacrazy (sem o prefixo `Bearer`)
|
|
41
|
+
|
|
42
|
+
## 🧩 Nós Disponíveis
|
|
43
|
+
|
|
44
|
+
Este pacote instala **dois nós** no seu n8n:
|
|
45
|
+
|
|
46
|
+
| Nó | Descrição |
|
|
47
|
+
|---|---|
|
|
48
|
+
| **Datacrazy CRM** | Acesso completo a todos os recursos da API: leads, negócios, conversas, pipelines e mais |
|
|
49
|
+
| **Datacrazy Automações** | Utilitários de automação: parser de webhook, switch de tipo de mensagem, mover lead na pipeline, if condicional e mais |
|
|
50
|
+
|
|
51
|
+
## 📦 Módulos do CRM
|
|
52
|
+
|
|
53
|
+
### 🎯 Leads
|
|
54
|
+
|
|
55
|
+
Gerenciamento completo de leads no Datacrazy CRM.
|
|
56
|
+
|
|
57
|
+
**Operações Disponíveis:**
|
|
58
|
+
- **Listar Leads**: Lista todos os leads com paginação e busca por texto
|
|
59
|
+
- **Buscar por ID**: Recupera um lead específico
|
|
60
|
+
- **Criar Lead**: Cria um novo lead com nome, telefone, e-mail e campos extras
|
|
61
|
+
- **Criar com Campos Personalizados**: Cria lead com campos adicionais via JSON
|
|
62
|
+
- **Atualizar Lead**: Modifica dados de um lead existente
|
|
63
|
+
- **Excluir Lead**: Remove um lead do sistema
|
|
64
|
+
|
|
65
|
+
**Recursos:**
|
|
66
|
+
- Filtros por texto com paginação (skip/take)
|
|
67
|
+
- Suporte a tags, cidade, estado, endereço, empresa, CPF/CNPJ
|
|
68
|
+
- Criação com campos personalizados via JSON livre
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
### 📁 Sub-recursos do Lead
|
|
73
|
+
|
|
74
|
+
Recursos associados diretamente a um lead:
|
|
75
|
+
|
|
76
|
+
#### Negócios do Lead
|
|
77
|
+
- **Listar Negócios**: Lista todos os negócios vinculados ao lead com filtros e paginação
|
|
78
|
+
|
|
79
|
+
#### Anexos do Lead
|
|
80
|
+
- **Listar Anexos**: Lista arquivos anexados ao lead
|
|
81
|
+
- **Criar Anexo**: Adiciona um arquivo ao lead via URL
|
|
82
|
+
- **Excluir Anexo**: Remove um anexo do lead
|
|
83
|
+
|
|
84
|
+
#### Anotações do Lead
|
|
85
|
+
- **Listar Anotações**: Lista notas/comentários do lead
|
|
86
|
+
- **Criar Anotação**: Adiciona uma nova nota
|
|
87
|
+
- **Atualizar Anotação**: Edita uma nota existente
|
|
88
|
+
- **Excluir Anotação**: Remove uma nota
|
|
89
|
+
|
|
90
|
+
#### Histórico do Lead
|
|
91
|
+
- **Listar Histórico**: Recupera o histórico de alterações do lead com paginação
|
|
92
|
+
|
|
93
|
+
#### Atividades do Lead
|
|
94
|
+
- **Listar Atividades**: Lista atividades vinculadas ao lead com paginação
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### 💼 Negócios
|
|
99
|
+
|
|
100
|
+
Gestão completa do pipeline de vendas.
|
|
101
|
+
|
|
102
|
+
**Operações Disponíveis:**
|
|
103
|
+
- **Listar Negócios**: Lista todos os negócios com filtros avançados
|
|
104
|
+
- **Buscar por ID**: Recupera um negócio específico
|
|
105
|
+
- **Criar Negócio**: Cria um novo negócio vinculado a um lead e pipeline
|
|
106
|
+
- **Atualizar Negócio**: Modifica dados do negócio
|
|
107
|
+
- **Excluir Negócio**: Remove um negócio
|
|
108
|
+
- **Adicionar Produto**: Vincula um produto a um negócio
|
|
109
|
+
|
|
110
|
+
**Recursos:**
|
|
111
|
+
- Associação com leads e pipelines
|
|
112
|
+
- Definição de valor e estágio
|
|
113
|
+
- Vinculação de produtos
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
### 🎬 Ações de Negócio
|
|
118
|
+
|
|
119
|
+
Operações de transição de estado para negócios.
|
|
120
|
+
|
|
121
|
+
**Operações Disponíveis:**
|
|
122
|
+
- **Mover**: Move o negócio para outro estágio ou pipeline
|
|
123
|
+
- **Ganhar**: Marca o negócio como ganho
|
|
124
|
+
- **Perder**: Marca o negócio como perdido com motivo de perda
|
|
125
|
+
- **Restaurar**: Restaura um negócio para estado ativo
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
### ❌ Motivos de Perda
|
|
130
|
+
|
|
131
|
+
Gerenciamento dos motivos de perda de negócios.
|
|
132
|
+
|
|
133
|
+
**Operações Disponíveis:**
|
|
134
|
+
- **Listar**: Lista todos os motivos cadastrados
|
|
135
|
+
- **Buscar por ID**: Recupera um motivo específico
|
|
136
|
+
- **Criar**: Cria um novo motivo de perda
|
|
137
|
+
- **Atualizar**: Modifica um motivo existente
|
|
138
|
+
- **Excluir**: Remove um motivo
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
### 🏷️ Tags
|
|
143
|
+
|
|
144
|
+
Sistema de etiquetas para categorização de leads.
|
|
145
|
+
|
|
146
|
+
**Operações Disponíveis:**
|
|
147
|
+
- **Listar Todas**: Lista todas as tags disponíveis
|
|
148
|
+
- **Buscar por ID**: Recupera uma tag específica
|
|
149
|
+
- **Criar**: Cria nova tag
|
|
150
|
+
- **Atualizar**: Modifica tag existente
|
|
151
|
+
- **Excluir**: Remove tag do sistema
|
|
152
|
+
- **Adicionar ao Lead**: Vincula uma tag a um lead
|
|
153
|
+
- **Remover do Lead**: Desvincula uma tag de um lead
|
|
154
|
+
|
|
155
|
+
**Recursos:**
|
|
156
|
+
- Cores personalizáveis
|
|
157
|
+
- Associação direta com leads
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
### 📋 Listas
|
|
162
|
+
|
|
163
|
+
Gerenciamento de listas de segmentação.
|
|
164
|
+
|
|
165
|
+
**Operações Disponíveis:**
|
|
166
|
+
- **Listar Todas**: Lista todas as listas cadastradas
|
|
167
|
+
- **Buscar por ID**: Recupera uma lista específica
|
|
168
|
+
- **Criar**: Cria uma nova lista
|
|
169
|
+
- **Atualizar**: Modifica uma lista existente
|
|
170
|
+
- **Excluir**: Remove uma lista
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
### 📦 Produtos
|
|
175
|
+
|
|
176
|
+
Catálogo de produtos do CRM.
|
|
177
|
+
|
|
178
|
+
**Operações Disponíveis:**
|
|
179
|
+
- **Listar Todos**: Lista todos os produtos
|
|
180
|
+
- **Buscar por ID**: Recupera um produto específico
|
|
181
|
+
- **Criar**: Cadastra um novo produto
|
|
182
|
+
- **Atualizar**: Modifica um produto existente
|
|
183
|
+
- **Excluir**: Remove um produto
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
### 📅 Atividades
|
|
188
|
+
|
|
189
|
+
Gerenciamento de atividades e tarefas do CRM.
|
|
190
|
+
|
|
191
|
+
**Operações Disponíveis:**
|
|
192
|
+
- **Listar Todas**: Lista todas as atividades com paginação e busca
|
|
193
|
+
- **Buscar por ID**: Recupera uma atividade específica
|
|
194
|
+
- **Criar**: Cria uma nova atividade
|
|
195
|
+
- **Atualizar**: Modifica uma atividade existente
|
|
196
|
+
- **Excluir**: Remove uma atividade
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
### 💬 Conversas
|
|
201
|
+
|
|
202
|
+
Sistema de messaging e atendimento ao cliente.
|
|
203
|
+
|
|
204
|
+
**Operações Disponíveis:**
|
|
205
|
+
- **Listar Conversas**: Lista conversas com paginação e busca
|
|
206
|
+
- **Buscar Mensagens**: Recupera mensagens de uma conversa específica
|
|
207
|
+
- **Enviar Mensagem**: Envia mensagem em uma conversa
|
|
208
|
+
- **Finalizar Conversa**: Encerra o atendimento de uma conversa
|
|
209
|
+
|
|
210
|
+
**Recursos:**
|
|
211
|
+
- Suporte a anexos e arquivos
|
|
212
|
+
- Mensagens internas e agendadas
|
|
213
|
+
- Resposta a mensagens específicas (reply)
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
### 🖥️ Instâncias
|
|
218
|
+
|
|
219
|
+
Gerenciamento de instâncias de mensageria.
|
|
220
|
+
|
|
221
|
+
**Operações Disponíveis:**
|
|
222
|
+
- **Listar Todas**: Lista todas as instâncias disponíveis
|
|
223
|
+
- **Buscar por ID**: Recupera uma instância específica
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
### 👥 Atendentes
|
|
228
|
+
|
|
229
|
+
Gerenciamento de atendentes do CRM e do multiatendimento.
|
|
230
|
+
|
|
231
|
+
**Operações Disponíveis (Multiatendimento e CRM):**
|
|
232
|
+
- **Listar Todos**: Lista os atendentes do módulo selecionado
|
|
233
|
+
- **Buscar por ID**: Recupera um atendente específico
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
### 🔧 Pipelines
|
|
238
|
+
|
|
239
|
+
Gerenciamento de pipelines de vendas e seus estágios.
|
|
240
|
+
|
|
241
|
+
**Operações Disponíveis:**
|
|
242
|
+
- **Listar Todas**: Lista todos os pipelines
|
|
243
|
+
- **Buscar por ID**: Recupera um pipeline específico
|
|
244
|
+
- **Listar Estágios**: Lista os estágios de um pipeline
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
### ➕ Campos Personalizados
|
|
249
|
+
|
|
250
|
+
Sistema flexível de campos customizados para leads.
|
|
251
|
+
|
|
252
|
+
**Operações Disponíveis:**
|
|
253
|
+
- **Listar Todos**: Lista todos os campos cadastrados
|
|
254
|
+
- **Criar**: Cria um novo campo personalizado
|
|
255
|
+
- **Atualizar**: Modifica um campo existente
|
|
256
|
+
- **Excluir**: Remove um campo
|
|
257
|
+
- **Definir Valor no Lead**: Atribui um valor de campo personalizado a um lead específico
|
|
258
|
+
|
|
259
|
+
**Recursos:**
|
|
260
|
+
- Carregamento dinâmico de opções nos dropdowns
|
|
261
|
+
- Busca por nome ou slug
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
### 📊 Métricas de Negócios
|
|
266
|
+
|
|
267
|
+
Relatórios e métricas do CRM.
|
|
268
|
+
|
|
269
|
+
**Operações Disponíveis:**
|
|
270
|
+
- **Funil**: Dados do funil de vendas por pipeline e período
|
|
271
|
+
- **Resumo de Atendentes**: Métricas por atendente
|
|
272
|
+
- **Resumo Geral**: Visão consolidada de negócios
|
|
273
|
+
- **Listar Negócios**: Lista negócios com filtros de métricas
|
|
274
|
+
- **Resumo Diário**: Métricas agrupadas por dia
|
|
275
|
+
- **Resumo de Produtos**: Métricas por produto vendido
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
### ⚡ Flows
|
|
280
|
+
|
|
281
|
+
Gerenciamento de automações e fluxos do Datacrazy.
|
|
282
|
+
|
|
283
|
+
**Operações Disponíveis:**
|
|
284
|
+
- **Listar Todos**: Lista todos os flows com paginação
|
|
285
|
+
- **Buscar por ID**: Recupera um flow específico
|
|
286
|
+
- **Listar Grupos**: Lista grupos de flows disponíveis
|
|
287
|
+
- **Atualizar**: Modifica configurações de um flow
|
|
288
|
+
- **Excluir**: Remove um flow
|
|
289
|
+
- **Ativar**: Ativa um flow
|
|
290
|
+
- **Desativar**: Desativa um flow
|
|
291
|
+
- **Métricas de Versão**: Recupera métricas de execução de uma versão do flow
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## 🤖 Nó de Automações
|
|
296
|
+
|
|
297
|
+
O nó **Datacrazy Automações** oferece utilitários inteligentes para construir fluxos com webhooks e lógica de CRM sem precisar escrever código.
|
|
298
|
+
|
|
299
|
+
### ⚡ Analisar Webhook Datacrazy
|
|
300
|
+
Normaliza o payload recebido de um webhook do Datacrazy e extrai os campos principais: provedor, tipo de mensagem, texto, mídia, lead, token, conversa e muito mais.
|
|
301
|
+
|
|
302
|
+
- Detecção automática de provedor (WhatsApp Cloud API, Instagram API, UAZAP)
|
|
303
|
+
- Extração de `leadId`, `token_datacrazy`, `conversationId`, `contactPhone`
|
|
304
|
+
- Suporte a detecção de anúncios (referral/CTWA)
|
|
305
|
+
|
|
306
|
+
### ⚡ Switch Tipo de Mensagem
|
|
307
|
+
Roteia o item para a saída correta com base no tipo da mensagem recebida.
|
|
308
|
+
|
|
309
|
+
**Saídas:** Texto · Imagem · Vídeo · Áudio · Arquivo · Outro
|
|
310
|
+
|
|
311
|
+
### ⚡ É Mensagem Referenciada?
|
|
312
|
+
Verifica se a mensagem recebida é uma resposta (reply) a outra mensagem.
|
|
313
|
+
|
|
314
|
+
**Saídas:** Sim · Não
|
|
315
|
+
|
|
316
|
+
### ⚡ Detectar Provedor do Webhook
|
|
317
|
+
Identifica o provedor de origem do webhook.
|
|
318
|
+
|
|
319
|
+
**Provedores suportados:** WhatsApp Cloud API · Instagram API · UAZAP · Desconhecido
|
|
320
|
+
|
|
321
|
+
### ⚡ Extrair Info do Webhook
|
|
322
|
+
Estrutura todos os campos do payload em objetos aninhados e organizados: `contact`, `message`, `attachment`, `referral`, `instance`, `conversation`.
|
|
323
|
+
|
|
324
|
+
### ⚡ Contexto de Mensagem Referenciada
|
|
325
|
+
Verifica se a mensagem é um reply e, se for, busca o conteúdo da mensagem original na conversa do Datacrazy.
|
|
326
|
+
|
|
327
|
+
### ⚡ Mover Lead na Pipeline
|
|
328
|
+
Busca os negócios do lead, filtra pela pipeline desejada e move para a etapa destino.
|
|
329
|
+
|
|
330
|
+
**Recursos:**
|
|
331
|
+
- Seleção de negócio mais recente ou todos os negócios da pipeline
|
|
332
|
+
- Criação automática de anotação ao mover
|
|
333
|
+
- Dropdowns dinâmicos de pipelines e etapas
|
|
334
|
+
|
|
335
|
+
### ⚡ If Condicional do Lead
|
|
336
|
+
Verifica uma condição no lead e roteia para **Sim** ou **Não**.
|
|
337
|
+
|
|
338
|
+
**Condições suportadas:**
|
|
339
|
+
- Possui / não possui uma tag específica
|
|
340
|
+
- Campo personalizado igual a valor
|
|
341
|
+
- Campo personalizado contém valor
|
|
342
|
+
- Está em determinada pipeline
|
|
343
|
+
- Está em determinado estágio
|
|
344
|
+
- Está em pipeline **e** estágio específicos
|
|
345
|
+
|
|
346
|
+
### ⚡ Tracker do Lead
|
|
347
|
+
Define múltiplos campos personalizados em um lead de uma só vez, com controle de erro por campo.
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
## 🛠️ Desenvolvimento
|
|
352
|
+
|
|
353
|
+
### Pré-requisitos
|
|
354
|
+
|
|
355
|
+
- Node.js >= 18.10
|
|
356
|
+
- npm >= 9
|
|
357
|
+
|
|
358
|
+
### Configuração do Ambiente
|
|
359
|
+
|
|
360
|
+
```bash
|
|
361
|
+
# Clone o repositório
|
|
362
|
+
git clone https://github.com/growsalesai/n8n-nodes-datacrazy.git
|
|
363
|
+
|
|
364
|
+
# Instale as dependências
|
|
365
|
+
npm install
|
|
366
|
+
|
|
367
|
+
# Build para produção
|
|
368
|
+
npm run build
|
|
369
|
+
|
|
370
|
+
# Execute em modo de desenvolvimento (watch)
|
|
371
|
+
npm run dev
|
|
372
|
+
|
|
373
|
+
# Lint
|
|
374
|
+
npm run lint
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### Estrutura do Projeto
|
|
378
|
+
|
|
379
|
+
```
|
|
380
|
+
nodes/Datacrazy/
|
|
381
|
+
├── Datacrazy.node.ts # Nó principal CRM
|
|
382
|
+
├── DatacrazyUtils.node.ts # Nó de automações utilitárias
|
|
383
|
+
├── DatacrazyMsgSwitch.node.ts # Switch de tipo de mensagem (standalone)
|
|
384
|
+
├── DatacrazyReplyCheck.node.ts # Verificador de reply (standalone)
|
|
385
|
+
├── descriptions/ # Definições de campos e operações por recurso
|
|
386
|
+
├── handlers/ # Lógica de execução por recurso
|
|
387
|
+
│ └── utils/ # Handlers dos nós utilitários
|
|
388
|
+
├── methods/
|
|
389
|
+
│ └── loadOptions.ts # Funções de carregamento dinâmico de dropdowns
|
|
390
|
+
└── utils/
|
|
391
|
+
└── request.ts # Camada de requisições HTTP autenticadas
|
|
392
|
+
credentials/
|
|
393
|
+
└── DatacrazyApi.credentials.ts # Definição da credencial
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
## 🐛 Reportar Issues
|
|
397
|
+
|
|
398
|
+
Encontrou um bug ou tem uma sugestão? Abra uma issue no repositório!
|
|
399
|
+
|
|
400
|
+
### Como Reportar
|
|
401
|
+
|
|
402
|
+
1. **Verifique Issues Existentes**: Antes de criar uma nova, veja se o problema já foi reportado em [Issues](https://github.com/growsalesai/n8n-nodes-datacrazy/issues).
|
|
403
|
+
2. **Crie uma Nova Issue**: Se não encontrar, [crie uma nova](https://github.com/growsalesai/n8n-nodes-datacrazy/issues/new).
|
|
404
|
+
|
|
405
|
+
### Informações Necessárias
|
|
406
|
+
|
|
407
|
+
**Para Bugs:**
|
|
408
|
+
- **Descrição**: Descreva o problema claramente
|
|
409
|
+
- **Passos para Reproduzir**: Liste os passos exatos
|
|
410
|
+
- **Comportamento Esperado**: O que deveria acontecer
|
|
411
|
+
- **Comportamento Atual**: O que está acontecendo
|
|
412
|
+
- **Ambiente**:
|
|
413
|
+
- Versão do n8n
|
|
414
|
+
- Versão do `@growsalesai/n8n-nodes-datacrazy`
|
|
415
|
+
- Sistema operacional
|
|
416
|
+
- **Logs de Erro**: Inclua mensagens de erro completas
|
|
417
|
+
|
|
418
|
+
**Para Solicitações de Recursos:**
|
|
419
|
+
- **Descrição**: Descreva o recurso desejado
|
|
420
|
+
- **Justificativa**: Por que seria útil
|
|
421
|
+
- **Casos de Uso**: Exemplos práticos de uso
|
|
422
|
+
|
|
423
|
+
### Template de Issue
|
|
424
|
+
|
|
425
|
+
```markdown
|
|
426
|
+
## Tipo
|
|
427
|
+
- [ ] Bug
|
|
428
|
+
- [ ] Solicitação de Recurso
|
|
429
|
+
- [ ] Melhoria
|
|
430
|
+
- [ ] Documentação
|
|
431
|
+
|
|
432
|
+
## Descrição
|
|
433
|
+
[Descreva o problema ou recurso]
|
|
434
|
+
|
|
435
|
+
## Ambiente (para bugs)
|
|
436
|
+
- Versão do n8n:
|
|
437
|
+
- Versão do @growsalesai/n8n-nodes-datacrazy:
|
|
438
|
+
- Sistema Operacional:
|
|
439
|
+
- Node.js:
|
|
440
|
+
|
|
441
|
+
## Passos para Reproduzir (para bugs)
|
|
442
|
+
1.
|
|
443
|
+
2.
|
|
444
|
+
3.
|
|
445
|
+
|
|
446
|
+
## Comportamento Esperado
|
|
447
|
+
[O que deveria acontecer]
|
|
448
|
+
|
|
449
|
+
## Comportamento Atual
|
|
450
|
+
[O que está acontecendo]
|
|
451
|
+
|
|
452
|
+
## Logs de Erro
|
|
453
|
+
[Cole os logs aqui]
|
|
454
|
+
|
|
455
|
+
## Informações Adicionais
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
## 🤝 Contribuição
|
|
459
|
+
|
|
460
|
+
Contribuições são bem-vindas!
|
|
461
|
+
|
|
462
|
+
1. Faça um fork do repositório
|
|
463
|
+
2. Crie uma branch para sua feature: `git checkout -b feature/minha-feature`
|
|
464
|
+
3. Faça commit das suas alterações: `git commit -m 'Adiciona minha feature'`
|
|
465
|
+
4. Envie para a branch: `git push origin feature/minha-feature`
|
|
466
|
+
5. Abra um Pull Request
|
|
467
|
+
|
|
468
|
+
## 📄 Licença
|
|
469
|
+
|
|
470
|
+
Este projeto está licenciado sob a [MIT License](https://opensource.org/licenses/MIT).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lead.handler.d.ts","sourceRoot":"","sources":["../../../../nodes/Datacrazy/handlers/lead.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"lead.handler.d.ts","sourceRoot":"","sources":["../../../../nodes/Datacrazy/handlers/lead.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAsB,MAAM,cAAc,CAAC;AACrE,OAAO,EAAe,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE5D,wBAAsB,WAAW,CAC/B,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,WAAW,EACpB,CAAC,EAAE,MAAM,GACR,OAAO,CAAC,GAAG,CAAC,CAwEd"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.executeLead = executeLead;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
4
5
|
const request_1 = require("../utils/request");
|
|
5
6
|
async function executeLead(operation, baseUrl, i) {
|
|
6
7
|
if (operation === 'getAll') {
|
|
@@ -47,7 +48,13 @@ async function executeLead(operation, baseUrl, i) {
|
|
|
47
48
|
const phone = this.getNodeParameter('phone', i, '');
|
|
48
49
|
const email = this.getNodeParameter('email', i, '');
|
|
49
50
|
const leadJson = this.getNodeParameter('leadJson', i, '{}');
|
|
50
|
-
|
|
51
|
+
let parsed;
|
|
52
|
+
try {
|
|
53
|
+
parsed = typeof leadJson === 'string' ? JSON.parse(leadJson) : leadJson;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'O campo "Lead JSON" contém JSON inválido. Verifique a sintaxe.');
|
|
57
|
+
}
|
|
51
58
|
return request_1.makeRequest.call(this, baseUrl, 'POST', '/api/v1/leads/additional-fields', { name, phone, email, ...parsed });
|
|
52
59
|
}
|
|
53
60
|
if (operation === 'update') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lead.handler.js","sourceRoot":"","sources":["../../../../nodes/Datacrazy/handlers/lead.handler.ts"],"names":[],"mappings":";;AAGA,
|
|
1
|
+
{"version":3,"file":"lead.handler.js","sourceRoot":"","sources":["../../../../nodes/Datacrazy/handlers/lead.handler.ts"],"names":[],"mappings":";;AAGA,kCA6EC;AAhFD,+CAAqE;AACrE,8CAA4D;AAErD,KAAK,UAAU,WAAW,CAE/B,SAAiB,EACjB,OAAoB,EACpB,CAAS;IAET,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,CAAQ,CAAC;QACjE,MAAM,EAAE,GAAQ,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,MAAM;YAAE,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACjD,OAAO,qBAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAW,CAAC;QACpF,OAAO,qBAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAW,CAAC;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAW,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAW,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,EAAE,EAAE,CAAQ,CAAC;QACtE,MAAM,IAAI,GAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QACnD,IAAI,KAAK,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAChD,IAAI,KAAK,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvC,IAAI,KAAK,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1C,IAAI,KAAK,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAChD,IAAI,KAAK,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAChD,IAAI,KAAK,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1C,IAAI,KAAK,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,GAAI,KAAK,CAAC,MAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjH,OAAO,qBAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,SAAS,KAAK,4BAA4B,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAW,CAAC;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAW,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAW,CAAC;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,CAAW,CAAC;QACtE,IAAI,MAAW,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,gEAAgE,CAAC,CAAC;QACjH,CAAC;QACD,OAAO,qBAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,iCAAiC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IACvH,CAAC;IAED,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAW,CAAC;QACpF,MAAM,IAAI,GAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAW,CAAC;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAW,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAW,CAAC;QAC9D,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAC3B,IAAI,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAC9B,IAAI,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,EAAE,EAAE,CAAQ,CAAC;QACtE,IAAI,KAAK,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QACnD,IAAI,KAAK,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAChD,IAAI,KAAK,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvC,IAAI,KAAK,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1C,IAAI,KAAK,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAChD,IAAI,KAAK,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAChD,IAAI,KAAK,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1C,IAAI,KAAK,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,GAAI,KAAK,CAAC,MAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjH,OAAO,qBAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAW,CAAC;QACpF,OAAO,qBAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAC1E,CAAC;AAEH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"leadIfCondition.handler.d.ts","sourceRoot":"","sources":["../../../../../nodes/Datacrazy/handlers/utils/leadIfCondition.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAe,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQ/D,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,kBAAkB,EAAE,GAC1B,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"leadIfCondition.handler.d.ts","sourceRoot":"","sources":["../../../../../nodes/Datacrazy/handlers/utils/leadIfCondition.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAe,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQ/D,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,kBAAkB,EAAE,GAC1B,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAqHjC"}
|
|
@@ -11,9 +11,19 @@ function extractId(raw) {
|
|
|
11
11
|
return String(raw);
|
|
12
12
|
}
|
|
13
13
|
async function executeLeadIfCondition(baseUrl, items) {
|
|
14
|
-
var _a, _b, _c, _d, _e, _f, _g
|
|
14
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
15
15
|
const trueOutput = [];
|
|
16
16
|
const falseOutput = [];
|
|
17
|
+
// Fetched once per execution to avoid N redundant calls when processing batches
|
|
18
|
+
let fieldDefinitionsCache = null;
|
|
19
|
+
const getFieldDefinitions = async () => {
|
|
20
|
+
var _a, _b;
|
|
21
|
+
if (fieldDefinitionsCache !== null)
|
|
22
|
+
return fieldDefinitionsCache;
|
|
23
|
+
const defsRes = await request_1.makeRequest.call(this, baseUrl, 'GET', '/api/crm/additionalFields', undefined, { take: 500 });
|
|
24
|
+
fieldDefinitionsCache = (Array.isArray(defsRes) ? defsRes : ((_b = (_a = defsRes === null || defsRes === void 0 ? void 0 : defsRes.data) !== null && _a !== void 0 ? _a : defsRes === null || defsRes === void 0 ? void 0 : defsRes.items) !== null && _b !== void 0 ? _b : []));
|
|
25
|
+
return fieldDefinitionsCache;
|
|
26
|
+
};
|
|
17
27
|
for (let i = 0; i < items.length; i++) {
|
|
18
28
|
const leadId = extractId(this.getNodeParameter('leadId', i));
|
|
19
29
|
const conditionType = this.getNodeParameter('conditionType', i);
|
|
@@ -38,9 +48,8 @@ async function executeLeadIfCondition(baseUrl, items) {
|
|
|
38
48
|
if (conditionType === 'customFieldEquals' || conditionType === 'customFieldContains') {
|
|
39
49
|
const fieldName = extractId(this.getNodeParameter('customFieldName', i));
|
|
40
50
|
const expectedValue = this.getNodeParameter('customFieldValue', i).trim();
|
|
41
|
-
// Step 1: find the field definition to get its ID
|
|
42
|
-
const
|
|
43
|
-
const definitions = Array.isArray(defsRes) ? defsRes : ((_e = (_d = defsRes === null || defsRes === void 0 ? void 0 : defsRes.data) !== null && _d !== void 0 ? _d : defsRes === null || defsRes === void 0 ? void 0 : defsRes.items) !== null && _e !== void 0 ? _e : []);
|
|
51
|
+
// Step 1: find the field definition to get its ID (uses per-execution cache)
|
|
52
|
+
const definitions = await getFieldDefinitions();
|
|
44
53
|
const fn = fieldName.toLowerCase();
|
|
45
54
|
const fieldDef = definitions.find((d) => {
|
|
46
55
|
var _a, _b, _c;
|
|
@@ -53,7 +62,7 @@ async function executeLeadIfCondition(baseUrl, items) {
|
|
|
53
62
|
let fieldValue = '';
|
|
54
63
|
try {
|
|
55
64
|
const valueRes = await request_1.makeRequest.call(this, baseUrl, 'GET', `/api/crm/additional-fields/lead/${leadId}/${fieldDef.id}`);
|
|
56
|
-
fieldValue = String((
|
|
65
|
+
fieldValue = String((_e = (_d = valueRes === null || valueRes === void 0 ? void 0 : valueRes.value) !== null && _d !== void 0 ? _d : valueRes) !== null && _e !== void 0 ? _e : '').trim();
|
|
57
66
|
}
|
|
58
67
|
catch { /* field not set for this lead — value stays '' */ }
|
|
59
68
|
if (conditionType === 'customFieldEquals') {
|
|
@@ -66,7 +75,7 @@ async function executeLeadIfCondition(baseUrl, items) {
|
|
|
66
75
|
}
|
|
67
76
|
if (conditionType === 'inPipeline' || conditionType === 'inStage' || conditionType === 'inPipelineAndStage') {
|
|
68
77
|
const businessesRaw = await request_1.makeRequest.call(this, baseUrl, 'GET', `/api/v1/leads/${leadId}/businesses`);
|
|
69
|
-
const deals = (
|
|
78
|
+
const deals = (_g = (_f = businessesRaw === null || businessesRaw === void 0 ? void 0 : businessesRaw.data) !== null && _f !== void 0 ? _f : businessesRaw) !== null && _g !== void 0 ? _g : [];
|
|
70
79
|
if (conditionType === 'inPipeline') {
|
|
71
80
|
const pipelineId = extractId(this.getNodeParameter('pipelineId', i));
|
|
72
81
|
result = deals.some((d) => { var _a, _b, _c, _d, _e, _f; return String((_f = (_e = (_c = (_b = (_a = d.stage) === null || _a === void 0 ? void 0 : _a.pipeline) === null || _b === void 0 ? void 0 : _b.id) !== null && _c !== void 0 ? _c : (_d = d.pipeline) === null || _d === void 0 ? void 0 : _d.id) !== null && _e !== void 0 ? _e : d.pipelineId) !== null && _f !== void 0 ? _f : '') === pipelineId; });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"leadIfCondition.handler.js","sourceRoot":"","sources":["../../../../../nodes/Datacrazy/handlers/utils/leadIfCondition.handler.ts"],"names":[],"mappings":";;AASA,
|
|
1
|
+
{"version":3,"file":"leadIfCondition.handler.js","sourceRoot":"","sources":["../../../../../nodes/Datacrazy/handlers/utils/leadIfCondition.handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhookParser.handler.d.ts","sourceRoot":"","sources":["../../../../../nodes/Datacrazy/handlers/utils/webhookParser.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"webhookParser.handler.d.ts","sourceRoot":"","sources":["../../../../../nodes/Datacrazy/handlers/utils/webhookParser.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAsB,MAAM,cAAc,CAAC;AAErE,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,iBAAiB,EACvB,CAAC,EAAE,MAAM,GACR,OAAO,CAAC,GAAG,CAAC,CA0Hd"}
|
|
@@ -1,13 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.executeWebhookParser = executeWebhookParser;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
4
5
|
async function executeWebhookParser(i) {
|
|
5
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45
|
|
6
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45;
|
|
6
7
|
const rawPayload = this.getNodeParameter('webhookPayload', i);
|
|
7
8
|
const rawQuery = this.getNodeParameter('webhookQuery', i, '{}');
|
|
8
9
|
const providerParam = this.getNodeParameter('provider', i);
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
let payload;
|
|
11
|
+
let query;
|
|
12
|
+
try {
|
|
13
|
+
payload = typeof rawPayload === 'string' ? JSON.parse(rawPayload) : rawPayload;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'O campo "Webhook Payload" contém JSON inválido.');
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
query = typeof rawQuery === 'string' ? JSON.parse(rawQuery) : rawQuery;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'O campo "Webhook Query" contém JSON inválido.');
|
|
23
|
+
}
|
|
11
24
|
const body = Array.isArray(payload)
|
|
12
25
|
? ((_b = (_a = payload[0]) === null || _a === void 0 ? void 0 : _a.body) !== null && _b !== void 0 ? _b : payload[0])
|
|
13
26
|
: ((_c = payload.body) !== null && _c !== void 0 ? _c : payload);
|
|
@@ -86,8 +99,6 @@ async function executeWebhookParser(i) {
|
|
|
86
99
|
(_25 = (_24 = (_23 = (_22 = (_21 = (_20 = body === null || body === void 0 ? void 0 : body.reply_to) !== null && _20 !== void 0 ? _20 : body === null || body === void 0 ? void 0 : body.context_id) !== null && _21 !== void 0 ? _21 : body === null || body === void 0 ? void 0 : body.quoted_id) !== null && _22 !== void 0 ? _22 : body === null || body === void 0 ? void 0 : body.in_reply_to) !== null && _23 !== void 0 ? _23 : body === null || body === void 0 ? void 0 : body.parent_id) !== null && _24 !== void 0 ? _24 : body === null || body === void 0 ? void 0 : body.reference_id) !== null && _25 !== void 0 ? _25 : '';
|
|
87
100
|
isReferencia = !!contextId;
|
|
88
101
|
}
|
|
89
|
-
const tokenRaw = (_26 = qParams === null || qParams === void 0 ? void 0 : qParams.Token_DC) !== null && _26 !== void 0 ? _26 : '';
|
|
90
|
-
const token = tokenRaw.startsWith('Bearer ') ? tokenRaw : `Bearer ${tokenRaw}`;
|
|
91
102
|
return {
|
|
92
103
|
provider,
|
|
93
104
|
type_message: typeMessage,
|
|
@@ -97,22 +108,22 @@ async function executeWebhookParser(i) {
|
|
|
97
108
|
context_id: contextId,
|
|
98
109
|
is_referencia: isReferencia,
|
|
99
110
|
is_referral_ad: isReferralAd,
|
|
100
|
-
referral_body: (
|
|
101
|
-
referral_headline: (
|
|
102
|
-
referral_ctwa_clid: (
|
|
103
|
-
leadId: (
|
|
104
|
-
leadName: (
|
|
105
|
-
token_datacrazy:
|
|
106
|
-
conversationId: (
|
|
107
|
-
contactId: (
|
|
108
|
-
contactName: (
|
|
109
|
-
contactPhone: (
|
|
110
|
-
contactPlatform: (
|
|
111
|
-
instanceId: (
|
|
112
|
-
instanceName: (
|
|
113
|
-
timestamp: (
|
|
114
|
-
messageId: (
|
|
115
|
-
messageDataDate: (
|
|
111
|
+
referral_body: (_26 = body === null || body === void 0 ? void 0 : body.referral_body) !== null && _26 !== void 0 ? _26 : '',
|
|
112
|
+
referral_headline: (_27 = body === null || body === void 0 ? void 0 : body.referral_headline) !== null && _27 !== void 0 ? _27 : '',
|
|
113
|
+
referral_ctwa_clid: (_28 = body === null || body === void 0 ? void 0 : body.referral_ctwa_clid) !== null && _28 !== void 0 ? _28 : '',
|
|
114
|
+
leadId: (_30 = (_29 = qParams === null || qParams === void 0 ? void 0 : qParams.LeadID) !== null && _29 !== void 0 ? _29 : body === null || body === void 0 ? void 0 : body.messageData_contact_externalId) !== null && _30 !== void 0 ? _30 : '',
|
|
115
|
+
leadName: (_32 = (_31 = qParams === null || qParams === void 0 ? void 0 : qParams.LeadName) !== null && _31 !== void 0 ? _31 : body === null || body === void 0 ? void 0 : body.messageData_contact_name) !== null && _32 !== void 0 ? _32 : '',
|
|
116
|
+
token_datacrazy: (() => { var _a; const t = (_a = qParams === null || qParams === void 0 ? void 0 : qParams.Token_DC) !== null && _a !== void 0 ? _a : ''; return t.startsWith('Bearer ') ? t : `Bearer ${t}`; })(),
|
|
117
|
+
conversationId: (_33 = body === null || body === void 0 ? void 0 : body.messageData_conversationId) !== null && _33 !== void 0 ? _33 : '',
|
|
118
|
+
contactId: (_34 = body === null || body === void 0 ? void 0 : body.messageData_contact_id) !== null && _34 !== void 0 ? _34 : '',
|
|
119
|
+
contactName: (_35 = body === null || body === void 0 ? void 0 : body.messageData_contact_name) !== null && _35 !== void 0 ? _35 : '',
|
|
120
|
+
contactPhone: (_37 = (_36 = body === null || body === void 0 ? void 0 : body.messageData_contact_phoneNumber) !== null && _36 !== void 0 ? _36 : body === null || body === void 0 ? void 0 : body.messageData_contact_contactId) !== null && _37 !== void 0 ? _37 : '',
|
|
121
|
+
contactPlatform: (_38 = body === null || body === void 0 ? void 0 : body.messageData_contact_platform) !== null && _38 !== void 0 ? _38 : '',
|
|
122
|
+
instanceId: (_39 = body === null || body === void 0 ? void 0 : body.instanceData_id) !== null && _39 !== void 0 ? _39 : '',
|
|
123
|
+
instanceName: (_40 = body === null || body === void 0 ? void 0 : body.instanceData_name) !== null && _40 !== void 0 ? _40 : '',
|
|
124
|
+
timestamp: (_42 = (_41 = body === null || body === void 0 ? void 0 : body.timestamp) !== null && _41 !== void 0 ? _41 : body === null || body === void 0 ? void 0 : body.messageTimestamp) !== null && _42 !== void 0 ? _42 : '',
|
|
125
|
+
messageId: (_44 = (_43 = body === null || body === void 0 ? void 0 : body.id) !== null && _43 !== void 0 ? _43 : body === null || body === void 0 ? void 0 : body.messageid) !== null && _44 !== void 0 ? _44 : '',
|
|
126
|
+
messageDataDate: (_45 = body === null || body === void 0 ? void 0 : body.messageData_date) !== null && _45 !== void 0 ? _45 : '',
|
|
116
127
|
hasAttachments: (body === null || body === void 0 ? void 0 : body.messageData_hasAttachments) === 'true',
|
|
117
128
|
raw_body: body !== null && body !== void 0 ? body : {},
|
|
118
129
|
raw_query: qParams !== null && qParams !== void 0 ? qParams : {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhookParser.handler.js","sourceRoot":"","sources":["../../../../../nodes/Datacrazy/handlers/utils/webhookParser.handler.ts"],"names":[],"mappings":";;AAEA,
|
|
1
|
+
{"version":3,"file":"webhookParser.handler.js","sourceRoot":"","sources":["../../../../../nodes/Datacrazy/handlers/utils/webhookParser.handler.ts"],"names":[],"mappings":"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"}
|