@growsalesai/n8n-nodes-datacrazy 1.8.9 → 1.9.1

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
@@ -12,6 +12,9 @@ Nó da comunidade N8N para integração completa com a plataforma **Datacrazy CR
12
12
  - [Nós Disponíveis](#nós-disponíveis)
13
13
  - [Módulos do CRM](#módulos-do-crm)
14
14
  - [Nó de Automações](#nó-de-automações)
15
+ - [Webhook & Mensagens](#webhook--mensagens)
16
+ - [Lead & Pipeline](#lead--pipeline)
17
+ - [Utilitários Locais](#utilitários-locais)
15
18
  - [Desenvolvimento](#desenvolvimento)
16
19
  - [Reportar Issues](#reportar-issues)
17
20
  - [Contribuição](#contribuição)
@@ -324,9 +327,11 @@ Gerenciamento de automações e fluxos do Datacrazy.
324
327
 
325
328
  ## 🤖 Nó de Automações
326
329
 
327
- O nó **Datacrazy Automações** oferece utilitários inteligentes para construir fluxos com webhooks e lógica de CRM sem precisar escrever código.
330
+ O nó **Datacrazy Automações** oferece **17 utilitários inteligentes** para construir fluxos com webhooks e lógica de CRM sem precisar escrever código.
328
331
 
329
- ### Analisar Webhook Datacrazy
332
+ ### Webhook & Mensagens
333
+
334
+ #### ⚡ Analisar Webhook Datacrazy
330
335
  > `automations/webhookParser/`
331
336
 
332
337
  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.
@@ -337,7 +342,7 @@ Normaliza o payload recebido de um webhook do Datacrazy e extrai os campos princ
337
342
 
338
343
  ---
339
344
 
340
- ### ⚡ Switch Tipo de Mensagem
345
+ #### ⚡ Switch Tipo de Mensagem
341
346
  > `automations/messageTypeSwitch/`
342
347
 
343
348
  Roteia o item para a saída correta com base no tipo da mensagem recebida.
@@ -346,7 +351,7 @@ Roteia o item para a saída correta com base no tipo da mensagem recebida.
346
351
 
347
352
  ---
348
353
 
349
- ### ⚡ É Mensagem Referenciada?
354
+ #### ⚡ É Mensagem Referenciada?
350
355
  > `automations/replyChecker/`
351
356
 
352
357
  Verifica se a mensagem recebida é uma resposta (reply) a outra mensagem.
@@ -355,7 +360,7 @@ Verifica se a mensagem recebida é uma resposta (reply) a outra mensagem.
355
360
 
356
361
  ---
357
362
 
358
- ### ⚡ Detectar Provedor do Webhook
363
+ #### ⚡ Detectar Provedor do Webhook
359
364
  > `automations/providerDetector/`
360
365
 
361
366
  Identifica o provedor de origem do webhook.
@@ -364,14 +369,14 @@ Identifica o provedor de origem do webhook.
364
369
 
365
370
  ---
366
371
 
367
- ### ⚡ Extrair Info do Webhook
372
+ #### ⚡ Extrair Info do Webhook
368
373
  > `automations/webhookExtractor/`
369
374
 
370
375
  Estrutura todos os campos do payload em objetos aninhados e organizados: `contact`, `message`, `attachment`, `referral`, `instance`, `conversation`.
371
376
 
372
377
  ---
373
378
 
374
- ### ⚡ Contexto de Mensagem Referenciada
379
+ #### ⚡ Contexto de Mensagem Referenciada
375
380
  > `automations/messageContext/`
376
381
 
377
382
  Verifica se a mensagem é um reply e, se for, busca o conteúdo da mensagem original na conversa do Datacrazy.
@@ -382,7 +387,67 @@ Verifica se a mensagem é um reply e, se for, busca o conteúdo da mensagem orig
382
387
 
383
388
  ---
384
389
 
385
- ###Mover Lead na Pipeline
390
+ ####Roteador por Palavra-chave
391
+ > `automations/keywordRouter/`
392
+
393
+ Verifica o texto da mensagem contra até 4 grupos de palavras-chave configuráveis e roteia para a saída correspondente.
394
+
395
+ **Saídas:** Grupo 1 · Grupo 2 · Grupo 3 · Grupo 4 · Nenhuma
396
+
397
+ - Palavras-chave separadas por vírgula em cada grupo
398
+ - Opção de diferenciação de maiúsculas/minúsculas
399
+ - Retorna `matchedGroup` e `matchedGroupIndex` no output
400
+ - Operação puramente local — sem chamadas de API
401
+
402
+ ---
403
+
404
+ ### Lead & Pipeline
405
+
406
+ #### ⚡ Verificar se Lead Existe
407
+ > `automations/leadExistsChecker/`
408
+
409
+ Busca um lead e roteia para **Sim** (encontrado) ou **Não**.
410
+
411
+ **Métodos de busca:** WhatsApp · E-mail · Nome · CPF/CNPJ · Instagram · Campo Personalizado
412
+
413
+ | Rota usada | Método | Descrição |
414
+ |---|---|---|
415
+ | `/api/v1/leads` | `GET` | Busca com text search e varredura paginada |
416
+ | `/api/v1/conversations` | `GET` | Fallback para busca via conversas (WhatsApp) |
417
+ | `/api/crm/additional-fields/lead/:leadId/:fieldId` | `GET` | Verifica valor de campo personalizado |
418
+
419
+ ---
420
+
421
+ #### ⚡ Upsert de Lead
422
+ > `automations/leadUpsert/`
423
+
424
+ Busca o lead pelo identificador informado; se não encontrar, cria automaticamente.
425
+
426
+ **Saídas:** Criado · Já Existia
427
+
428
+ **Métodos de busca/criação:** WhatsApp · E-mail · CPF/CNPJ
429
+
430
+ - O valor de busca é automaticamente usado como `phone`, `email` ou `document` na criação
431
+ - Campo JSON opcional para incluir campos extras na criação
432
+ - Retorna os dados completos do lead em ambas as saídas
433
+
434
+ ---
435
+
436
+ #### ⚡ Verificar Duplicatas de Lead
437
+ > `automations/leadDuplicateChecker/`
438
+
439
+ Varre toda a base de leads e encontra todos que possuem o mesmo identificador.
440
+
441
+ **Saídas:** Com Duplicatas (≥2 leads) · Único (0 ou 1 lead)
442
+
443
+ **Métodos de busca:** WhatsApp · E-mail · CPF/CNPJ
444
+
445
+ - Retorna `duplicateCount` e a lista completa de leads duplicados
446
+ - Varredura paginada de até 2.000 leads
447
+
448
+ ---
449
+
450
+ #### ⚡ Mover Lead na Pipeline
386
451
  > `automations/leadMover/`
387
452
 
388
453
  Busca os negócios do lead, filtra pela pipeline desejada e move para a etapa destino.
@@ -397,7 +462,24 @@ Busca os negócios do lead, filtra pela pipeline desejada e move para a etapa de
397
462
 
398
463
  ---
399
464
 
400
- ###If Condicional do Lead
465
+ ####Criar Negócio Condicional
466
+ > `automations/businessCreator/`
467
+
468
+ Verifica se o lead já possui um negócio aberto na pipeline; se não tiver, cria automaticamente.
469
+
470
+ **Saídas:** Criado · Já Existe
471
+
472
+ | Rota usada | Método | Descrição |
473
+ |---|---|---|
474
+ | `/api/v1/leads/:leadId/businesses` | `GET` | Verifica negócios existentes |
475
+ | `/api/v1/businesses` | `POST` | Cria o negócio se não houver um aberto |
476
+
477
+ - Dropdowns dinâmicos para pipeline e etapa inicial
478
+ - Retorna dados completos do negócio em ambas as saídas
479
+
480
+ ---
481
+
482
+ #### ⚡ If Condicional do Lead
401
483
  > `automations/leadIfCondition/`
402
484
 
403
485
  Verifica uma condição no lead e roteia para **Sim** ou **Não**.
@@ -413,7 +495,7 @@ Verifica uma condição no lead e roteia para **Sim** ou **Não**.
413
495
 
414
496
  ---
415
497
 
416
- ### ⚡ Tracker do Lead
498
+ #### ⚡ Tracker do Lead
417
499
  > `automations/leadTracker/`
418
500
 
419
501
  Define múltiplos campos personalizados em um lead de uma só vez, com controle de erro por campo.
@@ -424,6 +506,50 @@ Define múltiplos campos personalizados em um lead de uma só vez, com controle
424
506
 
425
507
  ---
426
508
 
509
+ #### ⚡ Detector de Primeira Mensagem
510
+ > `automations/firstMessageDetector/`
511
+
512
+ Verifica se é o primeiro contato do lead com base no tempo de criação.
513
+
514
+ **Saídas:** Sim (primeira vez) · Não (recorrente)
515
+
516
+ | Rota usada | Método | Descrição |
517
+ |---|---|---|
518
+ | `/api/v1/leads/:leadId` | `GET` | Lê `createdAt` do lead |
519
+
520
+ - Configura um limiar em minutos (padrão: 5 min)
521
+ - Retorna `isFirstMessage` e `leadAgeMinutes` no output
522
+
523
+ ---
524
+
525
+ ### Utilitários Locais
526
+
527
+ > Estas automações operam **sem chamadas de API** — sem necessidade de credencial.
528
+
529
+ #### ⚡ Verificar Horário de Atendimento
530
+ > `automations/businessHoursChecker/`
531
+
532
+ Verifica se o momento atual está dentro do horário de atendimento configurado.
533
+
534
+ **Saídas:** Dentro do Horário · Fora do Horário
535
+
536
+ - Configuração independente para dias úteis, sábado e domingo
537
+ - Suporte a qualquer fuso horário (ex: `America/Sao_Paulo`, `America/New_York`)
538
+ - Retorna `withinBusinessHours`, `dayOfWeek` e `currentTimeMinutes`
539
+
540
+ ---
541
+
542
+ #### ⚡ Formatar Número de WhatsApp
543
+ > `automations/phoneFormatter/`
544
+
545
+ Normaliza números de telefone para o formato padrão (somente dígitos, com DDI).
546
+
547
+ - Adiciona DDI automaticamente se ausente (padrão: `55` para Brasil)
548
+ - Opção para remover o 9º dígito de celulares brasileiros
549
+ - Retorna `phoneFormatted`, `phoneOriginal` e `phoneDDI`
550
+
551
+ ---
552
+
427
553
  ## 🛠️ Desenvolvimento
428
554
 
429
555
  ### Pré-requisitos
@@ -510,32 +636,22 @@ nodes/Datacrazy/
510
636
 
511
637
  ├── automations/ # Nós utilitários de automação (cada um com description + handler)
512
638
  │ ├── webhookParser/
513
- │ │ ├── webhookParser.description.ts
514
- │ │ └── webhookParser.handler.ts
515
639
  │ ├── webhookExtractor/
516
- │ │ ├── webhookExtractor.description.ts
517
- │ │ └── webhookExtractor.handler.ts
518
640
  │ ├── providerDetector/
519
- │ │ ├── providerDetector.description.ts
520
- │ │ └── providerDetector.handler.ts
521
641
  │ ├── messageContext/
522
- │ │ ├── messageContext.description.ts
523
- │ │ └── messageContext.handler.ts
524
642
  │ ├── messageTypeSwitch/
525
- │ │ ├── messageTypeSwitch.description.ts
526
- │ │ └── messageTypeSwitch.handler.ts
527
643
  │ ├── replyChecker/
528
- ├── replyChecker.description.ts
529
- │ │ └── replyChecker.handler.ts
644
+ │ ├── keywordRouter/
530
645
  │ ├── leadMover/
531
- │ │ ├── leadMover.description.ts
532
- │ │ └── leadMover.handler.ts
533
646
  │ ├── leadIfCondition/
534
- ├── leadIfCondition.description.ts
535
- │ └── leadIfCondition.handler.ts
536
- └── leadTracker/
537
- ├── leadTracker.description.ts
538
- └── leadTracker.handler.ts
647
+ │ ├── leadTracker/
648
+ ├── leadExistsChecker/
649
+ ├── leadUpsert/
650
+ ├── leadDuplicateChecker/
651
+ ├── businessCreator/
652
+ │ ├── firstMessageDetector/
653
+ │ ├── businessHoursChecker/
654
+ │ └── phoneFormatter/
539
655
 
540
656
  ├── methods/
541
657
  │ └── loadOptions.ts # Carregamento dinâmico de dropdowns
@@ -1 +1 @@
1
- {"version":3,"file":"conversation.description.d.ts","sourceRoot":"","sources":["../../../../../nodes/Datacrazy/resources/conversations/conversation.description.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,eAAO,MAAM,sBAAsB,EAAE,eAAe,EAenD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,eAAe,EA0D/C,CAAC"}
1
+ {"version":3,"file":"conversation.description.d.ts","sourceRoot":"","sources":["../../../../../nodes/Datacrazy/resources/conversations/conversation.description.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,eAAO,MAAM,sBAAsB,EAAE,eAAe,EAenD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,eAAe,EA8J/C,CAAC"}
@@ -40,26 +40,123 @@ exports.conversationFields = [
40
40
  },
41
41
  ],
42
42
  },
43
+ {
44
+ displayName: 'Tipo de Mensagem',
45
+ name: 'messageType',
46
+ type: 'options',
47
+ noDataExpression: true,
48
+ displayOptions: { show: { resource: ['conversation'], operation: ['sendMessage'] } },
49
+ options: [
50
+ {
51
+ name: 'Texto',
52
+ value: 'text',
53
+ description: 'Enviar mensagem de texto simples',
54
+ },
55
+ {
56
+ name: 'Áudio',
57
+ value: 'audio',
58
+ description: 'Enviar arquivo de áudio (MP3, OGG, etc.)',
59
+ },
60
+ {
61
+ name: 'Vídeo',
62
+ value: 'video',
63
+ description: 'Enviar arquivo de vídeo (MP4, etc.)',
64
+ },
65
+ {
66
+ name: 'Documento',
67
+ value: 'document',
68
+ description: 'Enviar documento (PDF, Word, Excel, etc.)',
69
+ },
70
+ {
71
+ name: 'Arquivo',
72
+ value: 'file',
73
+ description: 'Enviar qualquer tipo de arquivo',
74
+ },
75
+ ],
76
+ default: 'text',
77
+ description: 'Tipo do conteúdo a ser enviado na mensagem',
78
+ },
79
+ // ── Texto ──────────────────────────────────────────────────────────────────
43
80
  {
44
81
  displayName: 'Mensagem',
45
82
  name: 'message',
46
83
  type: 'string',
47
84
  required: true,
48
85
  default: '',
49
- typeOptions: { rows: 3 },
50
- displayOptions: { show: { resource: ['conversation'], operation: ['sendMessage'] } },
51
- description: 'Conteúdo da mensagem a ser enviada',
86
+ typeOptions: { rows: 4 },
87
+ displayOptions: { show: { resource: ['conversation'], operation: ['sendMessage'], messageType: ['text'] } },
88
+ description: 'Conteúdo de texto da mensagem',
89
+ },
90
+ // ── Mídia (todos os tipos não-texto) ───────────────────────────────────────
91
+ {
92
+ displayName: 'URL da Mídia',
93
+ name: 'mediaUrl',
94
+ type: 'string',
95
+ required: true,
96
+ default: '',
97
+ placeholder: 'https://exemplo.com/arquivo.mp3',
98
+ displayOptions: {
99
+ show: {
100
+ resource: ['conversation'],
101
+ operation: ['sendMessage'],
102
+ messageType: ['audio', 'video', 'document', 'file'],
103
+ },
104
+ },
105
+ description: 'URL pública do arquivo a ser enviado',
106
+ },
107
+ {
108
+ displayName: 'Legenda',
109
+ name: 'caption',
110
+ type: 'string',
111
+ default: '',
112
+ typeOptions: { rows: 2 },
113
+ displayOptions: {
114
+ show: {
115
+ resource: ['conversation'],
116
+ operation: ['sendMessage'],
117
+ messageType: ['video', 'document', 'file'],
118
+ },
119
+ },
120
+ description: 'Texto opcional enviado junto com o arquivo',
121
+ },
122
+ {
123
+ displayName: 'Nome do Arquivo',
124
+ name: 'fileName',
125
+ type: 'string',
126
+ default: '',
127
+ placeholder: 'relatorio.pdf',
128
+ displayOptions: {
129
+ show: {
130
+ resource: ['conversation'],
131
+ operation: ['sendMessage'],
132
+ messageType: ['document', 'file'],
133
+ },
134
+ },
135
+ description: 'Nome de exibição do arquivo (opcional)',
52
136
  },
137
+ // ── Opções Avançadas ───────────────────────────────────────────────────────
53
138
  {
54
- displayName: 'Campos Adicionais da Mensagem',
139
+ displayName: 'Opções Avançadas',
55
140
  name: 'additionalFields',
56
141
  type: 'collection',
57
- placeholder: 'Adicionar Campo',
142
+ placeholder: 'Adicionar Opção',
58
143
  default: {},
59
144
  displayOptions: { show: { resource: ['conversation'], operation: ['sendMessage'] } },
60
145
  options: [
61
- { displayName: 'URL da Mídia', name: 'mediaUrl', type: 'string', default: '' },
62
- { displayName: 'Tipo de Mídia', name: 'mediaType', type: 'string', default: '' },
146
+ {
147
+ displayName: 'Mensagem Interna',
148
+ name: 'isInternal',
149
+ type: 'boolean',
150
+ default: false,
151
+ description: 'Se ativado, a mensagem será visível apenas para a equipe (nota interna)',
152
+ },
153
+ {
154
+ displayName: 'ID da Mensagem Citada',
155
+ name: 'quotedMessageId',
156
+ type: 'string',
157
+ default: '',
158
+ description: 'ID de uma mensagem anterior para responder/citar',
159
+ },
63
160
  ],
64
161
  },
65
162
  {
@@ -1 +1 @@
1
- {"version":3,"file":"conversation.description.js","sourceRoot":"","sources":["../../../../../nodes/Datacrazy/resources/conversations/conversation.description.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conversation.description.js","sourceRoot":"","sources":["../../../../../nodes/Datacrazy/resources/conversations/conversation.description.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"conversation.handler.d.ts","sourceRoot":"","sources":["../../../../../nodes/Datacrazy/resources/conversations/conversation.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAe,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE/D,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,WAAW,EACpB,CAAC,EAAE,MAAM,GACR,OAAO,CAAC,GAAG,CAAC,CA0Bd"}
1
+ {"version":3,"file":"conversation.handler.d.ts","sourceRoot":"","sources":["../../../../../nodes/Datacrazy/resources/conversations/conversation.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAe,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE/D,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,WAAW,EACpB,CAAC,EAAE,MAAM,GACR,OAAO,CAAC,GAAG,CAAC,CA+Cd"}
@@ -20,9 +20,28 @@ async function executeConversation(operation, baseUrl, i) {
20
20
  }
21
21
  if (operation === 'sendMessage') {
22
22
  const id = this.getNodeParameter('conversationId', i, '', { extractValue: true });
23
- const message = this.getNodeParameter('message', i);
23
+ const messageType = this.getNodeParameter('messageType', i, 'text');
24
24
  const extra = this.getNodeParameter('additionalFields', i, {});
25
- return request_1.makeRequest.call(this, baseUrl, 'POST', `/api/v1/conversations/${id}/messages`, { message, ...extra });
25
+ let body;
26
+ if (messageType === 'text') {
27
+ const message = this.getNodeParameter('message', i);
28
+ body = { message, mediaType: 'text' };
29
+ }
30
+ else {
31
+ const mediaUrl = this.getNodeParameter('mediaUrl', i);
32
+ body = { message: '', mediaUrl, mediaType: messageType };
33
+ if (messageType !== 'audio') {
34
+ const caption = this.getNodeParameter('caption', i, '');
35
+ if (caption)
36
+ body.message = caption;
37
+ }
38
+ if (messageType === 'document' || messageType === 'file') {
39
+ const fileName = this.getNodeParameter('fileName', i, '');
40
+ if (fileName)
41
+ body.fileName = fileName;
42
+ }
43
+ }
44
+ return request_1.makeRequest.call(this, baseUrl, 'POST', `/api/v1/conversations/${id}/messages`, { ...body, ...extra });
26
45
  }
27
46
  if (operation === 'finish') {
28
47
  const id = this.getNodeParameter('conversationId', i, '', { extractValue: true });
@@ -1 +1 @@
1
- {"version":3,"file":"conversation.handler.js","sourceRoot":"","sources":["../../../../../nodes/Datacrazy/resources/conversations/conversation.handler.ts"],"names":[],"mappings":";;AAGA,kDA+BC;AAjCD,iDAA+D;AAExD,KAAK,UAAU,mBAAmB,CAEvC,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,uBAAuB,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;QAChC,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAW,CAAC;QAC5F,OAAO,qBAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,yBAAyB,EAAE,WAAW,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;QAChC,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAW,CAAC;QAC5F,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAW,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,EAAE,EAAE,CAAQ,CAAC;QACtE,OAAO,qBAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,yBAAyB,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IAChH,CAAC;IAED,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAW,CAAC;QAC5F,OAAO,qBAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,yBAAyB,EAAE,SAAS,CAAC,CAAC;IACvF,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"conversation.handler.js","sourceRoot":"","sources":["../../../../../nodes/Datacrazy/resources/conversations/conversation.handler.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@growsalesai/n8n-nodes-datacrazy",
3
- "version": "1.8.9",
3
+ "version": "1.9.1",
4
4
  "description": "n8n community node para o Datacrazy CRM - Growsales IA",
5
5
  "keywords": [
6
6
  "n8n-community-node-package",