@growsalesai/n8n-nodes-datacrazy 1.8.8 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +145 -29
  2. package/dist/nodes/Datacrazy/DatacrazyUtils.node.d.ts.map +1 -1
  3. package/dist/nodes/Datacrazy/DatacrazyUtils.node.js +123 -24
  4. package/dist/nodes/Datacrazy/DatacrazyUtils.node.js.map +1 -1
  5. package/dist/nodes/Datacrazy/automations/businessCreator/businessCreator.description.d.ts +4 -0
  6. package/dist/nodes/Datacrazy/automations/businessCreator/businessCreator.description.d.ts.map +1 -0
  7. package/dist/nodes/Datacrazy/automations/businessCreator/businessCreator.description.js +100 -0
  8. package/dist/nodes/Datacrazy/automations/businessCreator/businessCreator.description.js.map +1 -0
  9. package/dist/nodes/Datacrazy/automations/businessCreator/businessCreator.handler.d.ts +4 -0
  10. package/dist/nodes/Datacrazy/automations/businessCreator/businessCreator.handler.d.ts.map +1 -0
  11. package/dist/nodes/Datacrazy/automations/businessCreator/businessCreator.handler.js +61 -0
  12. package/dist/nodes/Datacrazy/automations/businessCreator/businessCreator.handler.js.map +1 -0
  13. package/dist/nodes/Datacrazy/automations/businessHoursChecker/businessHoursChecker.description.d.ts +4 -0
  14. package/dist/nodes/Datacrazy/automations/businessHoursChecker/businessHoursChecker.description.d.ts.map +1 -0
  15. package/dist/nodes/Datacrazy/automations/businessHoursChecker/businessHoursChecker.description.js +104 -0
  16. package/dist/nodes/Datacrazy/automations/businessHoursChecker/businessHoursChecker.description.js.map +1 -0
  17. package/dist/nodes/Datacrazy/automations/businessHoursChecker/businessHoursChecker.handler.d.ts +3 -0
  18. package/dist/nodes/Datacrazy/automations/businessHoursChecker/businessHoursChecker.handler.d.ts.map +1 -0
  19. package/dist/nodes/Datacrazy/automations/businessHoursChecker/businessHoursChecker.handler.js +67 -0
  20. package/dist/nodes/Datacrazy/automations/businessHoursChecker/businessHoursChecker.handler.js.map +1 -0
  21. package/dist/nodes/Datacrazy/automations/firstMessageDetector/firstMessageDetector.description.d.ts +4 -0
  22. package/dist/nodes/Datacrazy/automations/firstMessageDetector/firstMessageDetector.description.d.ts.map +1 -0
  23. package/dist/nodes/Datacrazy/automations/firstMessageDetector/firstMessageDetector.description.js +54 -0
  24. package/dist/nodes/Datacrazy/automations/firstMessageDetector/firstMessageDetector.description.js.map +1 -0
  25. package/dist/nodes/Datacrazy/automations/firstMessageDetector/firstMessageDetector.handler.d.ts +4 -0
  26. package/dist/nodes/Datacrazy/automations/firstMessageDetector/firstMessageDetector.handler.d.ts.map +1 -0
  27. package/dist/nodes/Datacrazy/automations/firstMessageDetector/firstMessageDetector.handler.js +48 -0
  28. package/dist/nodes/Datacrazy/automations/firstMessageDetector/firstMessageDetector.handler.js.map +1 -0
  29. package/dist/nodes/Datacrazy/automations/keywordRouter/keywordRouter.description.d.ts +3 -0
  30. package/dist/nodes/Datacrazy/automations/keywordRouter/keywordRouter.description.d.ts.map +1 -0
  31. package/dist/nodes/Datacrazy/automations/keywordRouter/keywordRouter.description.js +59 -0
  32. package/dist/nodes/Datacrazy/automations/keywordRouter/keywordRouter.description.js.map +1 -0
  33. package/dist/nodes/Datacrazy/automations/keywordRouter/keywordRouter.handler.d.ts +3 -0
  34. package/dist/nodes/Datacrazy/automations/keywordRouter/keywordRouter.handler.d.ts.map +1 -0
  35. package/dist/nodes/Datacrazy/automations/keywordRouter/keywordRouter.handler.js +40 -0
  36. package/dist/nodes/Datacrazy/automations/keywordRouter/keywordRouter.handler.js.map +1 -0
  37. package/dist/nodes/Datacrazy/automations/leadDuplicateChecker/leadDuplicateChecker.description.d.ts +4 -0
  38. package/dist/nodes/Datacrazy/automations/leadDuplicateChecker/leadDuplicateChecker.description.d.ts.map +1 -0
  39. package/dist/nodes/Datacrazy/automations/leadDuplicateChecker/leadDuplicateChecker.description.js +63 -0
  40. package/dist/nodes/Datacrazy/automations/leadDuplicateChecker/leadDuplicateChecker.description.js.map +1 -0
  41. package/dist/nodes/Datacrazy/automations/leadDuplicateChecker/leadDuplicateChecker.handler.d.ts +4 -0
  42. package/dist/nodes/Datacrazy/automations/leadDuplicateChecker/leadDuplicateChecker.handler.d.ts.map +1 -0
  43. package/dist/nodes/Datacrazy/automations/leadDuplicateChecker/leadDuplicateChecker.handler.js +92 -0
  44. package/dist/nodes/Datacrazy/automations/leadDuplicateChecker/leadDuplicateChecker.handler.js.map +1 -0
  45. package/dist/nodes/Datacrazy/automations/leadUpsert/leadUpsert.description.d.ts +4 -0
  46. package/dist/nodes/Datacrazy/automations/leadUpsert/leadUpsert.description.d.ts.map +1 -0
  47. package/dist/nodes/Datacrazy/automations/leadUpsert/leadUpsert.description.js +62 -0
  48. package/dist/nodes/Datacrazy/automations/leadUpsert/leadUpsert.description.js.map +1 -0
  49. package/dist/nodes/Datacrazy/automations/leadUpsert/leadUpsert.handler.d.ts +4 -0
  50. package/dist/nodes/Datacrazy/automations/leadUpsert/leadUpsert.handler.d.ts.map +1 -0
  51. package/dist/nodes/Datacrazy/automations/leadUpsert/leadUpsert.handler.js +116 -0
  52. package/dist/nodes/Datacrazy/automations/leadUpsert/leadUpsert.handler.js.map +1 -0
  53. package/dist/nodes/Datacrazy/automations/phoneFormatter/phoneFormatter.description.d.ts +4 -0
  54. package/dist/nodes/Datacrazy/automations/phoneFormatter/phoneFormatter.description.d.ts.map +1 -0
  55. package/dist/nodes/Datacrazy/automations/phoneFormatter/phoneFormatter.description.js +49 -0
  56. package/dist/nodes/Datacrazy/automations/phoneFormatter/phoneFormatter.description.js.map +1 -0
  57. package/dist/nodes/Datacrazy/automations/phoneFormatter/phoneFormatter.handler.d.ts +3 -0
  58. package/dist/nodes/Datacrazy/automations/phoneFormatter/phoneFormatter.handler.d.ts.map +1 -0
  59. package/dist/nodes/Datacrazy/automations/phoneFormatter/phoneFormatter.handler.js +30 -0
  60. package/dist/nodes/Datacrazy/automations/phoneFormatter/phoneFormatter.handler.js.map +1 -0
  61. package/package.json +1 -1
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":"DatacrazyUtils.node.d.ts","sourceRoot":"","sources":["../../../nodes/Datacrazy/DatacrazyUtils.node.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,SAAS,EACT,oBAAoB,EAErB,MAAM,cAAc,CAAC;AA0BtB,qBAAa,cAAe,YAAW,SAAS;IAC9C,WAAW,EAAE,oBAAoB,CAyG/B;IAEF,OAAO;oBAQA,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;MACrG;IAEI,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;CAuFxE"}
1
+ {"version":3,"file":"DatacrazyUtils.node.d.ts","sourceRoot":"","sources":["../../../nodes/Datacrazy/DatacrazyUtils.node.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,SAAS,EACT,oBAAoB,EAErB,MAAM,cAAc,CAAC;AAwCtB,qBAAa,cAAe,YAAW,SAAS;IAC9C,WAAW,EAAE,oBAAoB,CA2K/B;IAEF,OAAO;oBAQA,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;MACrG;IAEI,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;CAgGxE"}
@@ -45,6 +45,13 @@ const replyChecker_description_1 = require("./automations/replyChecker/replyChec
45
45
  const leadIfCondition_description_1 = require("./automations/leadIfCondition/leadIfCondition.description");
46
46
  const leadTracker_description_1 = require("./automations/leadTracker/leadTracker.description");
47
47
  const leadExistsChecker_description_1 = require("./automations/leadExistsChecker/leadExistsChecker.description");
48
+ const phoneFormatter_description_1 = require("./automations/phoneFormatter/phoneFormatter.description");
49
+ const businessHoursChecker_description_1 = require("./automations/businessHoursChecker/businessHoursChecker.description");
50
+ const keywordRouter_description_1 = require("./automations/keywordRouter/keywordRouter.description");
51
+ const firstMessageDetector_description_1 = require("./automations/firstMessageDetector/firstMessageDetector.description");
52
+ const leadDuplicateChecker_description_1 = require("./automations/leadDuplicateChecker/leadDuplicateChecker.description");
53
+ const businessCreator_description_1 = require("./automations/businessCreator/businessCreator.description");
54
+ const leadUpsert_description_1 = require("./automations/leadUpsert/leadUpsert.description");
48
55
  const webhookParser_handler_1 = require("./automations/webhookParser/webhookParser.handler");
49
56
  const webhookExtractor_handler_1 = require("./automations/webhookExtractor/webhookExtractor.handler");
50
57
  const providerDetector_handler_1 = require("./automations/providerDetector/providerDetector.handler");
@@ -55,6 +62,13 @@ const replyChecker_handler_1 = require("./automations/replyChecker/replyChecker.
55
62
  const leadIfCondition_handler_1 = require("./automations/leadIfCondition/leadIfCondition.handler");
56
63
  const leadTracker_handler_1 = require("./automations/leadTracker/leadTracker.handler");
57
64
  const leadExistsChecker_handler_1 = require("./automations/leadExistsChecker/leadExistsChecker.handler");
65
+ const phoneFormatter_handler_1 = require("./automations/phoneFormatter/phoneFormatter.handler");
66
+ const businessHoursChecker_handler_1 = require("./automations/businessHoursChecker/businessHoursChecker.handler");
67
+ const keywordRouter_handler_1 = require("./automations/keywordRouter/keywordRouter.handler");
68
+ const firstMessageDetector_handler_1 = require("./automations/firstMessageDetector/firstMessageDetector.handler");
69
+ const leadDuplicateChecker_handler_1 = require("./automations/leadDuplicateChecker/leadDuplicateChecker.handler");
70
+ const businessCreator_handler_1 = require("./automations/businessCreator/businessCreator.handler");
71
+ const leadUpsert_handler_1 = require("./automations/leadUpsert/leadUpsert.handler");
58
72
  const loadOptions = __importStar(require("./methods/loadOptions"));
59
73
  const request_1 = require("./utils/request");
60
74
  class DatacrazyUtils {
@@ -66,19 +80,37 @@ class DatacrazyUtils {
66
80
  group: ['transform'],
67
81
  version: 1,
68
82
  subtitle: '={{$parameter["resource"]}}',
69
- description: 'Utilitários de automação para fluxos com o Datacrazy CRM (análise de webhook, switch de tipo, verificação de reply, detecção de provedor, contexto de mensagem, movimentação de lead)',
83
+ description: 'Utilitários de automação para fluxos com o Datacrazy CRM',
70
84
  defaults: { name: 'Datacrazy Automações' },
71
85
  inputs: ['main'],
72
- // Dynamic outputs: display names are embedded inside INodeOutputConfiguration objects
73
- // because outputNames only accepts static string[], not expression strings.
74
- outputs: `={{$parameter['resource'] === 'messageTypeSwitch' ? [{type:'main',displayName:'Texto'},{type:'main',displayName:'Imagem'},{type:'main',displayName:'Vídeo'},{type:'main',displayName:'Áudio'},{type:'main',displayName:'Arquivo'},{type:'main',displayName:'Outro'}] : ($parameter['resource'] === 'replyChecker' || $parameter['resource'] === 'leadIfCondition' || $parameter['resource'] === 'leadExistsChecker') ? [{type:'main',displayName:'Sim'},{type:'main',displayName:'Não'}] : ['main']}}`,
86
+ outputs: `={{
87
+ $parameter['resource'] === 'messageTypeSwitch'
88
+ ? [{type:'main',displayName:'Texto'},{type:'main',displayName:'Imagem'},{type:'main',displayName:'Vídeo'},{type:'main',displayName:'Áudio'},{type:'main',displayName:'Arquivo'},{type:'main',displayName:'Outro'}]
89
+ : $parameter['resource'] === 'keywordRouter'
90
+ ? [{type:'main',displayName:'Grupo 1'},{type:'main',displayName:'Grupo 2'},{type:'main',displayName:'Grupo 3'},{type:'main',displayName:'Grupo 4'},{type:'main',displayName:'Nenhuma'}]
91
+ : ($parameter['resource'] === 'replyChecker' || $parameter['resource'] === 'leadIfCondition' || $parameter['resource'] === 'leadExistsChecker' || $parameter['resource'] === 'firstMessageDetector')
92
+ ? [{type:'main',displayName:'Sim'},{type:'main',displayName:'Não'}]
93
+ : $parameter['resource'] === 'businessHoursChecker'
94
+ ? [{type:'main',displayName:'Dentro do Horário'},{type:'main',displayName:'Fora do Horário'}]
95
+ : $parameter['resource'] === 'leadUpsert'
96
+ ? [{type:'main',displayName:'Criado'},{type:'main',displayName:'Já Existia'}]
97
+ : $parameter['resource'] === 'leadDuplicateChecker'
98
+ ? [{type:'main',displayName:'Com Duplicatas'},{type:'main',displayName:'Único'}]
99
+ : $parameter['resource'] === 'businessCreator'
100
+ ? [{type:'main',displayName:'Criado'},{type:'main',displayName:'Já Existe'}]
101
+ : ['main']
102
+ }}`,
75
103
  credentials: [
76
104
  {
77
105
  name: 'datacrazyApi',
78
106
  required: false,
79
107
  displayOptions: {
80
108
  show: {
81
- resource: ['messageContext', 'leadMover', 'leadIfCondition', 'leadTracker', 'leadExistsChecker'],
109
+ resource: [
110
+ 'messageContext', 'leadMover', 'leadIfCondition', 'leadTracker',
111
+ 'leadExistsChecker', 'firstMessageDetector', 'leadDuplicateChecker',
112
+ 'businessCreator', 'leadUpsert',
113
+ ],
82
114
  },
83
115
  },
84
116
  },
@@ -138,7 +170,42 @@ class DatacrazyUtils {
138
170
  {
139
171
  name: '⚡ Verificar se Lead Existe',
140
172
  value: 'leadExistsChecker',
141
- description: 'Busca o lead por número de WhatsApp ou valor de campo personalizado — roteia para Sim (encontrado) ou Não',
173
+ description: 'Busca o lead por WhatsApp, e-mail, nome, CPF/CNPJ ou Instagram — roteia para Sim ou Não',
174
+ },
175
+ {
176
+ name: '⚡ Upsert de Lead',
177
+ value: 'leadUpsert',
178
+ description: 'Busca o lead; se não existir, cria automaticamente — saída "Criado" ou "Já Existia"',
179
+ },
180
+ {
181
+ name: '⚡ Verificar Duplicatas de Lead',
182
+ value: 'leadDuplicateChecker',
183
+ description: 'Encontra todos os leads com o mesmo WhatsApp, e-mail ou CPF/CNPJ — saída "Com Duplicatas" ou "Único"',
184
+ },
185
+ {
186
+ name: '⚡ Criar Negócio Condicional',
187
+ value: 'businessCreator',
188
+ description: 'Cria um negócio para o lead na pipeline se ainda não houver um aberto — saída "Criado" ou "Já Existe"',
189
+ },
190
+ {
191
+ name: '⚡ Verificar Horário de Atendimento',
192
+ value: 'businessHoursChecker',
193
+ description: 'Verifica se o momento atual está dentro do horário configurado — saída "Dentro" ou "Fora"',
194
+ },
195
+ {
196
+ name: '⚡ Roteador por Palavra-chave',
197
+ value: 'keywordRouter',
198
+ description: 'Roteia a mensagem para até 4 saídas baseadas em palavras-chave configuradas, ou "Nenhuma"',
199
+ },
200
+ {
201
+ name: '⚡ Detector de Primeira Mensagem',
202
+ value: 'firstMessageDetector',
203
+ description: 'Verifica se é o primeiro contato do lead (lead criado recentemente) — saída "Sim" ou "Não"',
204
+ },
205
+ {
206
+ name: '⚡ Formatar Número de WhatsApp',
207
+ value: 'phoneFormatter',
208
+ description: 'Normaliza números de telefone para o formato padrão (somente dígitos, com DDI)',
142
209
  },
143
210
  ],
144
211
  default: 'webhookParser',
@@ -151,6 +218,12 @@ class DatacrazyUtils {
151
218
  ...leadIfCondition_description_1.leadIfConditionOperations,
152
219
  ...leadTracker_description_1.leadTrackerOperations,
153
220
  ...leadExistsChecker_description_1.leadExistsCheckerOperations,
221
+ ...phoneFormatter_description_1.phoneFormatterOperations,
222
+ ...businessHoursChecker_description_1.businessHoursCheckerOperations,
223
+ ...firstMessageDetector_description_1.firstMessageDetectorOperations,
224
+ ...leadDuplicateChecker_description_1.leadDuplicateCheckerOperations,
225
+ ...businessCreator_description_1.businessCreatorOperations,
226
+ ...leadUpsert_description_1.leadUpsertOperations,
154
227
  ...webhookParser_description_1.webhookParserFields,
155
228
  ...webhookExtractor_description_1.webhookExtractorFields,
156
229
  ...providerDetector_description_1.providerDetectorFields,
@@ -161,6 +234,13 @@ class DatacrazyUtils {
161
234
  ...leadIfCondition_description_1.leadIfConditionFields,
162
235
  ...leadTracker_description_1.leadTrackerFields,
163
236
  ...leadExistsChecker_description_1.leadExistsCheckerFields,
237
+ ...phoneFormatter_description_1.phoneFormatterFields,
238
+ ...businessHoursChecker_description_1.businessHoursCheckerFields,
239
+ ...keywordRouter_description_1.keywordRouterFields,
240
+ ...firstMessageDetector_description_1.firstMessageDetectorFields,
241
+ ...leadDuplicateChecker_description_1.leadDuplicateCheckerFields,
242
+ ...businessCreator_description_1.businessCreatorFields,
243
+ ...leadUpsert_description_1.leadUpsertFields,
164
244
  ],
165
245
  };
166
246
  this.methods = {
@@ -177,24 +257,46 @@ class DatacrazyUtils {
177
257
  async execute() {
178
258
  const items = this.getInputData();
179
259
  const resource = this.getNodeParameter('resource', 0);
180
- // Multi-output resources bypass the single-output loop
260
+ // --- Multi-output: no loop ---
181
261
  if (resource === 'messageTypeSwitch') {
182
262
  return messageTypeSwitch_handler_1.executeMessageTypeSwitch.call(this, items);
183
263
  }
184
264
  if (resource === 'replyChecker') {
185
265
  return replyChecker_handler_1.executeReplyChecker.call(this, items);
186
266
  }
267
+ if (resource === 'keywordRouter') {
268
+ return keywordRouter_handler_1.executeKeywordRouter.call(this, items);
269
+ }
270
+ if (resource === 'businessHoursChecker') {
271
+ return businessHoursChecker_handler_1.executeBusinessHoursChecker.call(this, items);
272
+ }
273
+ if (resource === 'phoneFormatter') {
274
+ return phoneFormatter_handler_1.executePhoneFormatter.call(this, items);
275
+ }
276
+ // --- Multi-output: need credentials ---
277
+ const getUrl = async () => {
278
+ const creds = await this.getCredentials('datacrazyApi');
279
+ return (0, request_1.getBaseUrls)(creds);
280
+ };
187
281
  if (resource === 'leadIfCondition') {
188
- const credentials = await this.getCredentials('datacrazyApi');
189
- const url = (0, request_1.getBaseUrls)(credentials);
190
- return leadIfCondition_handler_1.executeLeadIfCondition.call(this, url, items);
282
+ return leadIfCondition_handler_1.executeLeadIfCondition.call(this, await getUrl(), items);
191
283
  }
192
284
  if (resource === 'leadExistsChecker') {
193
- const credentials = await this.getCredentials('datacrazyApi');
194
- const url = (0, request_1.getBaseUrls)(credentials);
195
- return leadExistsChecker_handler_1.executeLeadExistsChecker.call(this, url, items);
285
+ return leadExistsChecker_handler_1.executeLeadExistsChecker.call(this, await getUrl(), items);
286
+ }
287
+ if (resource === 'firstMessageDetector') {
288
+ return firstMessageDetector_handler_1.executeFirstMessageDetector.call(this, await getUrl(), items);
289
+ }
290
+ if (resource === 'leadDuplicateChecker') {
291
+ return leadDuplicateChecker_handler_1.executeLeadDuplicateChecker.call(this, await getUrl(), items);
292
+ }
293
+ if (resource === 'businessCreator') {
294
+ return businessCreator_handler_1.executeBusinessCreator.call(this, await getUrl(), items);
295
+ }
296
+ if (resource === 'leadUpsert') {
297
+ return leadUpsert_handler_1.executeLeadUpsert.call(this, await getUrl(), items);
196
298
  }
197
- // Single-output resources
299
+ // --- Single-output loop ---
198
300
  const returnData = [];
199
301
  let baseUrl = { crm: '', v1: '' };
200
302
  try {
@@ -202,7 +304,7 @@ class DatacrazyUtils {
202
304
  baseUrl = (0, request_1.getBaseUrls)(credentials);
203
305
  }
204
306
  catch {
205
- // Credentials are optional; required only for messageContext and leadMover
307
+ // Credentials optional for webhook/local resources
206
308
  }
207
309
  for (let i = 0; i < items.length; i++) {
208
310
  let responseData;
@@ -217,21 +319,18 @@ class DatacrazyUtils {
217
319
  responseData = await providerDetector_handler_1.executeProviderDetector.call(this, i);
218
320
  }
219
321
  else if (resource === 'messageContext') {
220
- if (typeof baseUrl === 'object' && !baseUrl.crm) {
221
- throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Credenciais do Datacrazy são necessárias para o recurso "Contexto de Mensagem Referenciada".');
222
- }
322
+ if (typeof baseUrl === 'object' && !baseUrl.crm)
323
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Credenciais do Datacrazy são necessárias para "Contexto de Mensagem Referenciada".');
223
324
  responseData = await messageContext_handler_1.executeMessageContext.call(this, baseUrl, i);
224
325
  }
225
326
  else if (resource === 'leadMover') {
226
- if (typeof baseUrl === 'object' && !baseUrl.crm) {
227
- throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Credenciais do Datacrazy são necessárias para o recurso "Mover Lead na Pipeline".');
228
- }
327
+ if (typeof baseUrl === 'object' && !baseUrl.crm)
328
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Credenciais do Datacrazy são necessárias para "Mover Lead na Pipeline".');
229
329
  responseData = await leadMover_handler_1.executeLeadMover.call(this, baseUrl, i);
230
330
  }
231
331
  else if (resource === 'leadTracker') {
232
- if (typeof baseUrl === 'object' && !baseUrl.crm) {
233
- throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Credenciais do Datacrazy são necessárias para o recurso "Tracker do Lead".');
234
- }
332
+ if (typeof baseUrl === 'object' && !baseUrl.crm)
333
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Credenciais do Datacrazy são necessárias para "Tracker do Lead".');
235
334
  responseData = await leadTracker_handler_1.executeLeadTracker.call(this, baseUrl, i);
236
335
  }
237
336
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"DatacrazyUtils.node.js","sourceRoot":"","sources":["../../../nodes/Datacrazy/DatacrazyUtils.node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DatacrazyUtils.node.js","sourceRoot":"","sources":["../../../nodes/Datacrazy/DatacrazyUtils.node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAQsB;AAEtB,qGAAqH;AACrH,8GAAiI;AACjI,8GAAiI;AACjI,wGAAyH;AACzH,yFAAqG;AACrG,iHAAwG;AACxG,kGAAyF;AACzF,2GAA6H;AAC7H,+FAA6G;AAC7G,iHAAqI;AACrI,wGAAyH;AACzH,0HAAiJ;AACjJ,qGAA4F;AAC5F,0HAAiJ;AACjJ,0HAAiJ;AACjJ,2GAA6H;AAC7H,4FAAyG;AAEzG,6FAAyF;AACzF,sGAAkG;AAClG,sGAAkG;AAClG,gGAA4F;AAC5F,iFAA6E;AAC7E,yGAAqG;AACrG,0FAAsF;AACtF,mGAA+F;AAC/F,uFAAmF;AACnF,yGAAqG;AACrG,gGAA4F;AAC5F,kHAA8G;AAC9G,6FAAyF;AACzF,kHAA8G;AAC9G,kHAA8G;AAC9G,mGAA+F;AAC/F,oFAAgF;AAChF,mEAAqD;AACrD,6CAA2D;AAE3D,MAAa,cAAc;IAA3B;QACE,gBAAW,GAAyB;YAClC,WAAW,EAAE,sBAAsB;YACnC,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,0BAA0B;YAChC,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,6BAA6B;YACvC,WAAW,EAAE,0DAA0D;YACvE,QAAQ,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE;YAC1C,MAAM,EAAE,CAAC,MAAM,CAAC;YAChB,OAAO,EAAE;;;;;;;;;;;;;;;;OAgBC;YACV,WAAW,EAAE;gBACX;oBACE,IAAI,EAAE,cAAc;oBACpB,QAAQ,EAAE,KAAK;oBACf,cAAc,EAAE;wBACd,IAAI,EAAE;4BACJ,QAAQ,EAAE;gCACR,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa;gCAC/D,mBAAmB,EAAE,sBAAsB,EAAE,sBAAsB;gCACnE,iBAAiB,EAAE,YAAY;6BAChC;yBACF;qBACF;iBACF;aACF;YACD,UAAU,EAAE;gBACV;oBACE,WAAW,EAAE,SAAS;oBACtB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,8BAA8B;4BACpC,KAAK,EAAE,eAAe;4BACtB,WAAW,EAAE,yFAAyF;yBACvG;wBACD;4BACE,IAAI,EAAE,2BAA2B;4BACjC,KAAK,EAAE,mBAAmB;4BAC1B,WAAW,EAAE,uGAAuG;yBACrH;wBACD;4BACE,IAAI,EAAE,4BAA4B;4BAClC,KAAK,EAAE,cAAc;4BACrB,WAAW,EAAE,oEAAoE;yBAClF;wBACD;4BACE,IAAI,EAAE,gCAAgC;4BACtC,KAAK,EAAE,kBAAkB;4BACzB,WAAW,EAAE,4EAA4E;yBAC1F;wBACD;4BACE,IAAI,EAAE,2BAA2B;4BACjC,KAAK,EAAE,kBAAkB;4BACzB,WAAW,EAAE,uGAAuG;yBACrH;wBACD;4BACE,IAAI,EAAE,qCAAqC;4BAC3C,KAAK,EAAE,gBAAgB;4BACvB,WAAW,EAAE,sFAAsF;yBACpG;wBACD;4BACE,IAAI,EAAE,0BAA0B;4BAChC,KAAK,EAAE,WAAW;4BAClB,WAAW,EAAE,2EAA2E;yBACzF;wBACD;4BACE,IAAI,EAAE,0BAA0B;4BAChC,KAAK,EAAE,iBAAiB;4BACxB,WAAW,EAAE,oGAAoG;yBAClH;wBACD;4BACE,IAAI,EAAE,mBAAmB;4BACzB,KAAK,EAAE,aAAa;4BACpB,WAAW,EAAE,8DAA8D;yBAC5E;wBACD;4BACE,IAAI,EAAE,4BAA4B;4BAClC,KAAK,EAAE,mBAAmB;4BAC1B,WAAW,EAAE,yFAAyF;yBACvG;wBACD;4BACE,IAAI,EAAE,kBAAkB;4BACxB,KAAK,EAAE,YAAY;4BACnB,WAAW,EAAE,qFAAqF;yBACnG;wBACD;4BACE,IAAI,EAAE,gCAAgC;4BACtC,KAAK,EAAE,sBAAsB;4BAC7B,WAAW,EAAE,sGAAsG;yBACpH;wBACD;4BACE,IAAI,EAAE,6BAA6B;4BACnC,KAAK,EAAE,iBAAiB;4BACxB,WAAW,EAAE,uGAAuG;yBACrH;wBACD;4BACE,IAAI,EAAE,oCAAoC;4BAC1C,KAAK,EAAE,sBAAsB;4BAC7B,WAAW,EAAE,2FAA2F;yBACzG;wBACD;4BACE,IAAI,EAAE,8BAA8B;4BACpC,KAAK,EAAE,eAAe;4BACtB,WAAW,EAAE,2FAA2F;yBACzG;wBACD;4BACE,IAAI,EAAE,iCAAiC;4BACvC,KAAK,EAAE,sBAAsB;4BAC7B,WAAW,EAAE,4FAA4F;yBAC1G;wBACD;4BACE,IAAI,EAAE,+BAA+B;4BACrC,KAAK,EAAE,gBAAgB;4BACvB,WAAW,EAAE,gFAAgF;yBAC9F;qBACF;oBACD,OAAO,EAAE,eAAe;iBACzB;gBAED,GAAG,mDAAuB;gBAC1B,GAAG,yDAA0B;gBAC7B,GAAG,yDAA0B;gBAC7B,GAAG,qDAAwB;gBAC3B,GAAG,2CAAmB;gBACtB,GAAG,uDAAyB;gBAC5B,GAAG,+CAAqB;gBACxB,GAAG,2DAA2B;gBAC9B,GAAG,qDAAwB;gBAC3B,GAAG,iEAA8B;gBACjC,GAAG,iEAA8B;gBACjC,GAAG,iEAA8B;gBACjC,GAAG,uDAAyB;gBAC5B,GAAG,6CAAoB;gBAEvB,GAAG,+CAAmB;gBACtB,GAAG,qDAAsB;gBACzB,GAAG,qDAAsB;gBACzB,GAAG,iDAAoB;gBACvB,GAAG,uCAAe;gBAClB,GAAG,uDAAuB;gBAC1B,GAAG,6CAAkB;gBACrB,GAAG,mDAAqB;gBACxB,GAAG,2CAAiB;gBACpB,GAAG,uDAAuB;gBAC1B,GAAG,iDAAoB;gBACvB,GAAG,6DAA0B;gBAC7B,GAAG,+CAAmB;gBACtB,GAAG,6DAA0B;gBAC7B,GAAG,6DAA0B;gBAC7B,GAAG,mDAAqB;gBACxB,GAAG,yCAAgB;aACpB;SACF,CAAC;QAEF,YAAO,GAAG;YACR,UAAU,EAAE;gBACV,eAAe,EAAE,WAAW,CAAC,eAAe;gBAC5C,qBAAqB,EAAE,WAAW,CAAC,qBAAqB;gBACxD,cAAc,EAAE,WAAW,CAAC,cAAc;gBAC1C,sBAAsB,EAAE,WAAW,CAAC,sBAAsB;gBAC1D,4BAA4B,EAAE,WAAW,CAAC,4BAA4B;gBACtE,UAAU,EAAE,WAAW,CAAC,UAAU;aACiE;SACtG,CAAC;IAkGJ,CAAC;IAhGC,KAAK,CAAC,OAAO;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAW,CAAC;QAEhE,gCAAgC;QAChC,IAAI,QAAQ,KAAK,mBAAmB,EAAE,CAAC;YACrC,OAAO,oDAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;YAChC,OAAO,0CAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;YACjC,OAAO,4CAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,QAAQ,KAAK,sBAAsB,EAAE,CAAC;YACxC,OAAO,0DAA2B,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;YAClC,OAAO,8CAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjD,CAAC;QAED,yCAAyC;QACzC,MAAM,MAAM,GAAG,KAAK,IAA0B,EAAE;YAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YACxD,OAAO,IAAA,qBAAW,EAAC,KAAgC,CAAC,CAAC;QACvD,CAAC,CAAC;QAEF,IAAI,QAAQ,KAAK,iBAAiB,EAAE,CAAC;YACnC,OAAO,gDAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,QAAQ,KAAK,mBAAmB,EAAE,CAAC;YACrC,OAAO,oDAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,QAAQ,KAAK,sBAAsB,EAAE,CAAC;YACxC,OAAO,0DAA2B,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,QAAQ,KAAK,sBAAsB,EAAE,CAAC;YACxC,OAAO,0DAA2B,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,QAAQ,KAAK,iBAAiB,EAAE,CAAC;YACnC,OAAO,gDAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC9B,OAAO,sCAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;QAED,6BAA6B;QAC7B,MAAM,UAAU,GAAyB,EAAE,CAAC;QAE5C,IAAI,OAAO,GAAgB,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YAC9D,OAAO,GAAG,IAAA,qBAAW,EAAC,WAAsC,CAAC,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;YACP,mDAAmD;QACrD,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,YAAiB,CAAC;YAEtB,IAAI,CAAC;gBACH,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;oBACjC,YAAY,GAAG,MAAM,4CAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC1D,CAAC;qBAAM,IAAI,QAAQ,KAAK,kBAAkB,EAAE,CAAC;oBAC3C,YAAY,GAAG,MAAM,kDAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC7D,CAAC;qBAAM,IAAI,QAAQ,KAAK,kBAAkB,EAAE,CAAC;oBAC3C,YAAY,GAAG,MAAM,kDAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC7D,CAAC;qBAAM,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;oBACzC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG;wBAAE,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,oFAAoF,CAAC,CAAC;oBACpL,YAAY,GAAG,MAAM,8CAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;gBACpE,CAAC;qBAAM,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;oBACpC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG;wBAAE,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,yEAAyE,CAAC,CAAC;oBACzK,YAAY,GAAG,MAAM,oCAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;gBAC/D,CAAC;qBAAM,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;oBACtC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG;wBAAE,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,kEAAkE,CAAC,CAAC;oBAClK,YAAY,GAAG,MAAM,wCAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;gBACjE,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,QAAQ,mBAAmB,CAAC,CAAC;gBACxF,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC1B,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;oBACxF,SAAS;gBACX,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;YAED,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAC3D,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,EACzF,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAC1B,CAAC;YACF,UAAU,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,CAAC,UAAU,CAAC,CAAC;IACtB,CAAC;CACF;AAzRD,wCAyRC"}
@@ -0,0 +1,4 @@
1
+ import { INodeProperties } from 'n8n-workflow';
2
+ export declare const businessCreatorOperations: INodeProperties[];
3
+ export declare const businessCreatorFields: INodeProperties[];
4
+ //# sourceMappingURL=businessCreator.description.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"businessCreator.description.d.ts","sourceRoot":"","sources":["../../../../../nodes/Datacrazy/automations/businessCreator/businessCreator.description.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,eAAO,MAAM,yBAAyB,EAAE,eAAe,EAgBtD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,eAAe,EA8ElD,CAAC"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.businessCreatorFields = exports.businessCreatorOperations = void 0;
4
+ exports.businessCreatorOperations = [
5
+ {
6
+ displayName: 'Operação',
7
+ name: 'operation',
8
+ type: 'options',
9
+ noDataExpression: true,
10
+ displayOptions: { show: { resource: ['businessCreator'] } },
11
+ options: [
12
+ {
13
+ name: 'Criar Negócio se Não Existir',
14
+ value: 'createIfNotExists',
15
+ action: 'Cria um negócio para o lead na pipeline se ainda não houver um aberto — saída "Criado" ou "Já Existe"',
16
+ },
17
+ ],
18
+ default: 'createIfNotExists',
19
+ },
20
+ ];
21
+ exports.businessCreatorFields = [
22
+ {
23
+ displayName: 'Lead',
24
+ name: 'leadId',
25
+ type: 'resourceLocator',
26
+ default: { mode: 'list', value: '' },
27
+ required: true,
28
+ description: 'Lead para o qual o negócio será criado',
29
+ displayOptions: { show: { resource: ['businessCreator'], operation: ['createIfNotExists'] } },
30
+ modes: [
31
+ {
32
+ displayName: 'Da Lista',
33
+ name: 'list',
34
+ type: 'list',
35
+ typeOptions: { searchListMethod: 'searchLeadsCrm', searchable: true },
36
+ },
37
+ {
38
+ displayName: 'Por ID',
39
+ name: 'id',
40
+ type: 'string',
41
+ placeholder: 'Ex: cluid123...',
42
+ },
43
+ ],
44
+ },
45
+ {
46
+ displayName: 'Pipeline',
47
+ name: 'pipelineId',
48
+ type: 'resourceLocator',
49
+ default: { mode: 'list', value: '' },
50
+ required: true,
51
+ description: 'Pipeline onde o negócio será criado',
52
+ displayOptions: { show: { resource: ['businessCreator'], operation: ['createIfNotExists'] } },
53
+ modes: [
54
+ {
55
+ displayName: 'Da Lista',
56
+ name: 'list',
57
+ type: 'list',
58
+ typeOptions: { searchListMethod: 'searchPipelines', searchable: true },
59
+ },
60
+ {
61
+ displayName: 'Por ID',
62
+ name: 'id',
63
+ type: 'string',
64
+ placeholder: 'Ex: cluid123...',
65
+ },
66
+ ],
67
+ },
68
+ {
69
+ displayName: 'Título do Negócio',
70
+ name: 'title',
71
+ type: 'string',
72
+ default: 'Novo Negócio',
73
+ required: true,
74
+ description: 'Título do negócio a ser criado',
75
+ displayOptions: { show: { resource: ['businessCreator'], operation: ['createIfNotExists'] } },
76
+ },
77
+ {
78
+ displayName: 'Etapa Inicial',
79
+ name: 'stageId',
80
+ type: 'resourceLocator',
81
+ default: { mode: 'list', value: '' },
82
+ description: 'Etapa inicial do negócio (opcional — usa a primeira etapa da pipeline se não informado)',
83
+ displayOptions: { show: { resource: ['businessCreator'], operation: ['createIfNotExists'] } },
84
+ modes: [
85
+ {
86
+ displayName: 'Da Lista',
87
+ name: 'list',
88
+ type: 'list',
89
+ typeOptions: { searchListMethod: 'searchLeadMoverStages', searchable: true },
90
+ },
91
+ {
92
+ displayName: 'Por ID',
93
+ name: 'id',
94
+ type: 'string',
95
+ placeholder: 'Ex: cluid123...',
96
+ },
97
+ ],
98
+ },
99
+ ];
100
+ //# sourceMappingURL=businessCreator.description.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"businessCreator.description.js","sourceRoot":"","sources":["../../../../../nodes/Datacrazy/automations/businessCreator/businessCreator.description.ts"],"names":[],"mappings":"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"}