@wondai/n8n-nodes-nucleo 0.6.3 → 0.6.5
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 +10 -0
- package/dist/nodes/Nucleo/Nucleo.node.js +35 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -66,6 +66,11 @@ alguma linha não traz `produto_id`/`alias` e `quantidade` positiva. É uma prot
|
|
|
66
66
|
o Núcleo continua sendo a autoridade final das regras, mas o workflow não envia pedido vazio por
|
|
67
67
|
erro de tool schema.
|
|
68
68
|
|
|
69
|
+
A partir da v0.6.4, `Pedido Criar` e `Pedido Alterar` aceitam `Cobranças Comerciais (JSON)`.
|
|
70
|
+
Use para adicionais pagos vindos de `Contexto -> commercial_rules`, por exemplo
|
|
71
|
+
`[{"tipo":"paid_addon","nome":"Confetes","valor":35,"origem":"commercial_rules"}]`.
|
|
72
|
+
Essas linhas entram no valor a cobrar, mas nao viram produto de catalogo nem pagamento.
|
|
73
|
+
|
|
69
74
|
**Disponibilidade na Rede** ("tem na outra loja?") é exposta como **tool** do AI Agent, mas com regra
|
|
70
75
|
estrita no prompt: **usar SÓ quando o cliente pedir explicitamente outra unidade**. Passe o `produto_id`
|
|
71
76
|
já resolvido (ou uma `consulta` curta). A loja que pergunta vem do **vínculo do token** (a IA não
|
|
@@ -75,6 +80,11 @@ telefone/endereço (allowlist) e distância opcional. **Disponibilidade NÃO é
|
|
|
75
80
|
declarou e oferece o contato para o cliente confirmar. Este endpoint **não** entra no contexto fixo do
|
|
76
81
|
gate; é chamado sob demanda. Tenant/unidade vêm do token — nunca do prompt.
|
|
77
82
|
|
|
83
|
+
A partir da v0.6.5, `Pedido Detalhar` aceita `Telefone do Cliente` opcional. Quando preenchido, o
|
|
84
|
+
Nucleo so devolve o pedido se o telefone do cliente do pedido bater com esse valor. Use este campo no
|
|
85
|
+
WhatsApp para perguntas como "meu pedido 61", evitando que o agente consulte pedido de outro cliente
|
|
86
|
+
por numero curto.
|
|
87
|
+
|
|
78
88
|
**Contexto -> Consultar por Escopo** deve ser usado como **AI Tool** dentro do agente, sob demanda.
|
|
79
89
|
Passe `escopos` para buscar apenas o necessario:
|
|
80
90
|
|
|
@@ -502,6 +502,15 @@ class Nucleo {
|
|
|
502
502
|
description: "Número curto (ex: 64) ou UUID do pedido. Devolve o pedido com itens e seus IDs. Pedido de outra padaria → 404.",
|
|
503
503
|
displayOptions: { show: { resource: ["pedido"], operation: ["detalhar"] } },
|
|
504
504
|
},
|
|
505
|
+
{
|
|
506
|
+
displayName: "Telefone do Cliente",
|
|
507
|
+
name: "pedidoTelefoneCliente",
|
|
508
|
+
type: "string",
|
|
509
|
+
default: "",
|
|
510
|
+
placeholder: "555199999999",
|
|
511
|
+
description: "Opcional. Quando informado, o Nucleo so devolve o pedido se ele pertencer ao cliente desse telefone. Use no WhatsApp para perguntas como 'meu pedido 61'.",
|
|
512
|
+
displayOptions: { show: { resource: ["pedido"], operation: ["detalhar"] } },
|
|
513
|
+
},
|
|
505
514
|
// ----------------------------------------------------------------- pedido:criar
|
|
506
515
|
{
|
|
507
516
|
displayName: "Telefone",
|
|
@@ -603,6 +612,14 @@ class Nucleo {
|
|
|
603
612
|
description: "Opcional. Desconto concedido em reais (ex.: 5). Abate do valor a cobrar e do troco. 0/vazio = sem desconto.",
|
|
604
613
|
displayOptions: { show: { resource: ["pedido"], operation: ["criar"] } },
|
|
605
614
|
},
|
|
615
|
+
{
|
|
616
|
+
displayName: "Cobranças Comerciais (JSON)",
|
|
617
|
+
name: "cobrancas",
|
|
618
|
+
type: "json",
|
|
619
|
+
default: "[]",
|
|
620
|
+
description: 'Opcional. Array de cobranças comerciais que entram no valor a cobrar sem virar produto: [{"tipo":"paid_addon","nome":"Confetes","valor":35,"origem":"commercial_rules","operational_config_revision_id":"...","snapshot":{"label":"Confetes - R$35,00"}}]. Use quando vier de Contexto Loja/commercial_rules.',
|
|
621
|
+
displayOptions: { show: { resource: ["pedido"], operation: ["criar"] } },
|
|
622
|
+
},
|
|
606
623
|
{
|
|
607
624
|
displayName: "Loja (unit_id)",
|
|
608
625
|
name: "unitId",
|
|
@@ -754,6 +771,14 @@ class Nucleo {
|
|
|
754
771
|
description: "Redefine o desconto (recalcula o valor a cobrar e o pagamento pendente). Ex.: 5. Vazio = não altera o desconto. Use 0 para zerar.",
|
|
755
772
|
displayOptions: { show: { resource: ["pedido"], operation: ["alterar"] } },
|
|
756
773
|
},
|
|
774
|
+
{
|
|
775
|
+
displayName: "Cobranças Comerciais (JSON)",
|
|
776
|
+
name: "cobrancasNovo",
|
|
777
|
+
type: "json",
|
|
778
|
+
default: "[]",
|
|
779
|
+
description: 'Opcional. Substitui as cobranças comerciais do pedido. Envie [] para limpar. Ex.: [{"tipo":"paid_addon","nome":"Confetes","valor":35,"origem":"commercial_rules"}].',
|
|
780
|
+
displayOptions: { show: { resource: ["pedido"], operation: ["alterar"] } },
|
|
781
|
+
},
|
|
757
782
|
{
|
|
758
783
|
displayName: "Motivo",
|
|
759
784
|
name: "motivo",
|
|
@@ -1278,8 +1303,12 @@ class Nucleo {
|
|
|
1278
1303
|
}
|
|
1279
1304
|
else if (resource === "pedido" && operation === "detalhar") {
|
|
1280
1305
|
const ref = this.getNodeParameter("ref", i).trim();
|
|
1306
|
+
const telefoneCliente = this.getNodeParameter("pedidoTelefoneCliente", i, "").trim();
|
|
1281
1307
|
method = "GET";
|
|
1282
1308
|
path = `/api/v1/agent/pedido/${encodeURIComponent(ref)}`;
|
|
1309
|
+
if (telefoneCliente) {
|
|
1310
|
+
path += `?telefone_cliente=${encodeURIComponent(telefoneCliente)}`;
|
|
1311
|
+
}
|
|
1283
1312
|
}
|
|
1284
1313
|
else if (resource === "pedido" && operation === "criar") {
|
|
1285
1314
|
const telefone = this.getNodeParameter("telefone", i).trim();
|
|
@@ -1294,6 +1323,7 @@ class Nucleo {
|
|
|
1294
1323
|
const trocoPara = Number(this.getNodeParameter("trocoPara", i, 0));
|
|
1295
1324
|
const taxaEntrega = Number(this.getNodeParameter("taxaEntrega", i, 0));
|
|
1296
1325
|
const desconto = Number(this.getNodeParameter("desconto", i, 0));
|
|
1326
|
+
const cobrancas = asArray(this.getNodeParameter("cobrancas", i, "[]"));
|
|
1297
1327
|
const unitId = this.getNodeParameter("unitId", i, "").trim();
|
|
1298
1328
|
idempotencyKey =
|
|
1299
1329
|
this.getNodeParameter("idempotencyKey", i, "").trim() || (0, node_crypto_1.randomUUID)();
|
|
@@ -1320,6 +1350,8 @@ class Nucleo {
|
|
|
1320
1350
|
b.taxa_entrega = taxaEntrega;
|
|
1321
1351
|
if (Number.isFinite(desconto) && desconto > 0)
|
|
1322
1352
|
b.desconto = desconto;
|
|
1353
|
+
if (cobrancas.length)
|
|
1354
|
+
b.cobrancas = cobrancas;
|
|
1323
1355
|
if (unitId)
|
|
1324
1356
|
b.unit_id = unitId;
|
|
1325
1357
|
method = "POST";
|
|
@@ -1342,6 +1374,7 @@ class Nucleo {
|
|
|
1342
1374
|
const trocoParaNovo = Number(this.getNodeParameter("trocoParaNovo", i, 0));
|
|
1343
1375
|
const taxaEntregaNova = this.getNodeParameter("taxaEntregaNova", i, "").trim();
|
|
1344
1376
|
const descontoNovo = this.getNodeParameter("descontoNovo", i, "").trim();
|
|
1377
|
+
const cobrancasNovo = asArray(this.getNodeParameter("cobrancasNovo", i, "[]"));
|
|
1345
1378
|
const b = {};
|
|
1346
1379
|
if (observacoes.trim())
|
|
1347
1380
|
b.observacoes = observacoes.trim();
|
|
@@ -1377,6 +1410,8 @@ class Nucleo {
|
|
|
1377
1410
|
if (descontoNovo !== "" && Number.isFinite(Number(descontoNovo))) {
|
|
1378
1411
|
b.desconto = Number(descontoNovo);
|
|
1379
1412
|
}
|
|
1413
|
+
if (cobrancasNovo.length)
|
|
1414
|
+
b.cobrancas = cobrancasNovo;
|
|
1380
1415
|
// Idempotência (opcional): mesma chave num retry → backend não reaplica a alteração.
|
|
1381
1416
|
idempotencyKey =
|
|
1382
1417
|
this.getNodeParameter("idempotencyKey", i, "").trim() || undefined;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wondai/n8n-nodes-nucleo",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.5",
|
|
4
4
|
"description": "Node n8n para o Núcleo Wondai — atendimento de IA multi-vertical (gate liga/desliga, cliente/paciente, catálogo fuzzy, pedidos [padaria], procedimento/agenda/agendamento [odonto], contexto operacional, telemetria) com assinatura HMAC v1. Tenant e vertical vêm do token (a parede, ADR-013/038).",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"n8n-community-node-package",
|