n8n-nodes-digisac 1.0.3 → 1.2.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.
- package/README.md +269 -186
- package/dist/nodes/Digisac/Digisac.node.d.ts +15 -0
- package/dist/nodes/Digisac/Digisac.node.js +9 -4
- package/dist/nodes/Digisac/Digisac.node.js.map +1 -1
- package/dist/nodes/Digisac/actions/index.d.ts +2 -2
- package/dist/nodes/Digisac/actions/index.js +66 -27
- package/dist/nodes/Digisac/actions/index.js.map +1 -1
- package/dist/nodes/Digisac/generated/endpoints.js +350 -2
- package/dist/nodes/Digisac/generated/endpoints.js.map +1 -1
- package/dist/nodes/Digisac/helpers/kanban.d.ts +20 -0
- package/dist/nodes/Digisac/helpers/kanban.js +168 -0
- package/dist/nodes/Digisac/helpers/kanban.js.map +1 -0
- package/dist/nodes/Digisac/helpers/resourceLocator.d.ts +10 -0
- package/dist/nodes/Digisac/helpers/resourceLocator.js +157 -0
- package/dist/nodes/Digisac/helpers/resourceLocator.js.map +1 -0
- package/dist/nodes/Digisac/helpers/valoresGuiados.d.ts +6 -0
- package/dist/nodes/Digisac/helpers/valoresGuiados.js +100 -0
- package/dist/nodes/Digisac/helpers/valoresGuiados.js.map +1 -0
- package/dist/nodes/Digisac/helpers/versao.d.ts +4 -0
- package/dist/nodes/Digisac/helpers/versao.js +9 -0
- package/dist/nodes/Digisac/helpers/versao.js.map +1 -0
- package/dist/nodes/Digisac/methods/listSearch.d.ts +14 -0
- package/dist/nodes/Digisac/methods/listSearch.js +105 -0
- package/dist/nodes/Digisac/methods/listSearch.js.map +1 -0
- package/dist/nodes/Digisac/transport/index.d.ts +5 -2
- package/dist/nodes/Digisac/transport/index.js +3 -0
- package/dist/nodes/Digisac/transport/index.js.map +1 -1
- package/dist/package.json +78 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/docs/api-calls.md +26 -3
- package/package.json +76 -66
package/README.md
CHANGED
|
@@ -1,24 +1,32 @@
|
|
|
1
1
|
# n8n-nodes-digisac
|
|
2
2
|
|
|
3
|
-
[
|
|
3
|
+
Node community do [n8n](https://n8n.io/) para integrar seus fluxos com a **API do [Digisac](https://digisac.com.br)**, plataforma de atendimento multicanal (WhatsApp e outros canais).
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
[](https://github.com/PedroHSGuimaraes/n8n-nodes-digisac/actions/workflows/ci.yml) [](https://buymeacoffee.com/qTny0AzFXS)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Um único node cobre **todas as chamadas da coleção Postman pública do Digisac**: contatos, chamados, mensagens, campanhas, conexões, departamentos, usuários, tags, templates, webhooks, relatórios, estatísticas, agendamentos e demais recursos.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
[n8n](https://n8n.io/) é uma plataforma de automação de fluxos com [licença fair-code](https://docs.n8n.io/reference/license/).
|
|
10
10
|
|
|
11
|
-
-
|
|
12
|
-
- **Node único e intuitivo**: selecione **Resource -> Operation**, preencha campos simples de path, query e body, e execute.
|
|
13
|
-
- **Credencial centralizada**: Base URL e Bearer Token ficam salvos uma única vez na credencial `Digisac API`.
|
|
14
|
-
- **Pronto para AI Agent**: o node tem `usableAsTool` com descrição específica de ferramenta e textos pensados para LLMs entenderem método, caminho, efeito da operação, parâmetros, regra de IDs, filtros, campos de body e quando usar JSON avançado.
|
|
15
|
-
- **Sem dependências runtime**: usa `httpRequestWithAuthentication` do próprio n8n.
|
|
16
|
-
- **Catálogo rastreável**: `nodes/Digisac/generated/endpoints.ts` é gerado da documentação Postman; `docs/api-calls.md` lista todas as chamadas em português.
|
|
17
|
-
- **Publicação segura**: GitHub Actions publica no npm com provenance.
|
|
11
|
+
[Instalação](#-instalação) · [Credenciais](#-credenciais) · [Nós e Operações](#-nós-e-operações) · [Exemplos](#-exemplos-práticos) · [Tool de IA](#-usar-como-tool-de-agente-de-ia) · [Versão 1 ou 2](#-versão-1-ou-2-do-node) · [Desenvolvimento](#️-desenvolvimento) · [Versões](#-versões) · [Apoie](#-apoie-o-projeto)
|
|
18
12
|
|
|
19
|
-
|
|
13
|
+
---
|
|
20
14
|
|
|
21
|
-
|
|
15
|
+
## 🚀 Funcionalidades
|
|
16
|
+
|
|
17
|
+
- **1 node unificado** — `Digisac` com seletor **Resource → Operation**. Cada operation é uma chamada real da API, com método, caminho e origem na documentação.
|
|
18
|
+
- **Cobertura completa** — 315 chamadas em 52 recursos, geradas da coleção pública Postman, incluindo o **Kanban** (quadros, colunas e cards).
|
|
19
|
+
- **Kanban com lista pesquisável** — na versão 2, quadro e coluna aparecem como lista da sua conta, e o card aparece depois de você escolher a coluna. Excluir quadro, coluna ou card só roda com **Confirm Delete** ligado.
|
|
20
|
+
- **IDs em lista pesquisável (versão 2 do node)** — contato, conexão, departamento, usuário, tag, cargo, robô e assunto de chamado aparecem como lista da sua conta, com busca, e aceitam colar o ID. Os outros IDs aceitam colar o ID no mesmo formato.
|
|
21
|
+
- **Datas e opções guiadas (versão 2 do node)** — período, `From` e `To` têm seletor de data; `Status`, `Period Type`, `Type`, participações e `Origin` são listas de opções.
|
|
22
|
+
- **Workflows salvos não mudam** — quem já usa a versão 1 continua enviando a mesma requisição.
|
|
23
|
+
- **Credencial centralizada** — Base URL e token ficam na credencial `Digisac API`.
|
|
24
|
+
- **Usável como Tool de IA** — o node tem `usableAsTool`, com descrições pensadas para o agente entender método, caminho, parâmetros e cuidados. Veja [Usar como Tool de Agente de IA](#-usar-como-tool-de-agente-de-ia).
|
|
25
|
+
- **Zero dependências de runtime** — usa o `httpRequestWithAuthentication` do próprio n8n, com timeout de 30 s em toda chamada. Passa no lint oficial `n8n-node lint` e é publicado no npm **com provenance**.
|
|
26
|
+
|
|
27
|
+
## 📦 Instalação
|
|
28
|
+
|
|
29
|
+
No n8n, acesse **Settings → Community Nodes → Install** e instale:
|
|
22
30
|
|
|
23
31
|
```text
|
|
24
32
|
n8n-nodes-digisac
|
|
@@ -30,54 +38,129 @@ Para usar community nodes como Tools de Agente de IA em n8n self-hosted, habilit
|
|
|
30
38
|
N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
|
|
31
39
|
```
|
|
32
40
|
|
|
33
|
-
Sem essa variável, o node
|
|
41
|
+
Sem essa variável, o node funciona como node normal, mas não aparece como tool no AI Agent em instalações self-hosted.
|
|
34
42
|
|
|
35
|
-
## Credenciais
|
|
43
|
+
## 🔑 Credenciais
|
|
36
44
|
|
|
37
|
-
Crie uma credencial
|
|
45
|
+
Crie uma credencial **Digisac API**.
|
|
38
46
|
|
|
39
47
|
| Campo | O que preencher | Onde encontrar |
|
|
40
48
|
| --- | --- | --- |
|
|
41
|
-
| **Base URL** | URL base da sua conta
|
|
42
|
-
| **Access Token** | Token Bearer de acesso pessoal. | Digisac
|
|
43
|
-
| **PDF/Base URL** | Base opcional para endpoints documentados como `URLbase`, principalmente export de PDF. Se vazio,
|
|
49
|
+
| **Base URL** | URL base da sua conta, sem barra final. Exemplo: `https://suaempresa.digisac.app`. | Digisac → Conta → Informações |
|
|
50
|
+
| **Access Token** | Token Bearer de acesso pessoal. Tem as mesmas permissões do usuário que o criou. | Digisac → Conta → API → Tokens de acesso pessoal |
|
|
51
|
+
| **PDF/Base URL** | Base opcional para endpoints documentados como `URLbase`, principalmente export de PDF. Se vazio, usa a Base URL. | Use só se sua instância separar a URL de API e a de PDF |
|
|
44
52
|
|
|
45
|
-
A credencial testa o acesso com
|
|
53
|
+
A credencial testa o acesso com `GET /api/v1/me`.
|
|
46
54
|
|
|
47
|
-
|
|
48
|
-
GET /api/v1/me
|
|
49
|
-
```
|
|
55
|
+
## 🧩 Nós e Operações
|
|
50
56
|
|
|
51
|
-
|
|
57
|
+
1. Adicione o node **Digisac** ao workflow.
|
|
58
|
+
2. Escolha o **Resource**. Ele corresponde a uma pasta da documentação, como `Contatos`, `Mensagens`, `Chamados`, `Campanhas`, `Tags`, `Usuários` ou `Webhooks`.
|
|
59
|
+
3. Escolha a **Operation**. Cada uma é uma chamada real da API.
|
|
60
|
+
4. Preencha os IDs de path. Na versão 2, escolha na lista ou cole o ID no modo **By ID**.
|
|
61
|
+
5. Preencha os campos de query que aparecerem, como `Per Page`, `Start Period`, `End Period`, `Status`.
|
|
62
|
+
6. Em chamadas `POST`, `PUT` e `PATCH`, use **Body Fields**: o node gera os campos a partir do body documentado.
|
|
63
|
+
7. Use **Use Body JSON Avancado** só quando a operação exigir array, objeto livre ou algo que não coube nos campos.
|
|
64
|
+
8. Use **Options → Query Avancada JSON** só para filtros sem campo dedicado.
|
|
65
|
+
9. Em exportações CSV, TXT ou PDF, use **Options → Response Format → Text**.
|
|
52
66
|
|
|
53
|
-
|
|
54
|
-
2. Escolha o **Resource**. O resource corresponde a uma pasta da documentação, como `Contatos`, `Mensagens`, `Chamados`, `Campanhas`, `Tags`, `Usuários`, `Webhooks`.
|
|
55
|
-
3. Escolha a **Operation**. Cada operation corresponde a uma chamada real da API.
|
|
56
|
-
4. Preencha os campos obrigatórios de path, como `contactId`, `ticketId`, `serviceId`, `messageId`, `userId`, `campaignId`.
|
|
57
|
-
5. Preencha os campos de query que aparecerem, como `Per Page`, `Number`, `Service Id`, `Start Period`, `End Period`, `Status`.
|
|
58
|
-
6. Em chamadas `POST`, `PUT` e `PATCH`, use **Campos do Body**. O node gera esses campos a partir do body documentado pela Digisac.
|
|
59
|
-
7. Use **Body JSON Avançado** somente quando a operação exigir array, objeto livre ou uma estrutura que não coube nos campos gerados.
|
|
60
|
-
8. Use **Options -> Query Avançada JSON** somente para filtros muito específicos não representados por campos.
|
|
61
|
-
9. Em exports CSV/TXT/PDF, se a resposta não vier como JSON, use **Options -> Response Format -> Text**.
|
|
67
|
+
Resources **Popular** são atalhos herdados da coleção Postman para operações frequentes. Resources **General** têm o catálogo mais completo.
|
|
62
68
|
|
|
63
|
-
|
|
69
|
+
Regra para automações e Tools de IA: todo campo terminado em `Id` ou `Ids` deve vir de uma busca anterior, de uma entrada confirmada ou de um valor documentado, como `all`. Nunca copie placeholders como `{{contactId}}`.
|
|
64
70
|
|
|
65
|
-
|
|
71
|
+
| Campo | Uso |
|
|
72
|
+
| --- | --- |
|
|
73
|
+
| **Resource** | Área da API Digisac, gerada das pastas Postman. |
|
|
74
|
+
| **Operation** | Chamada exata da API. A descrição mostra método, endpoint e origem. |
|
|
75
|
+
| **IDs de path** | Obrigatórios, extraídos de placeholders como `{{contactId}}`. |
|
|
76
|
+
| **Campos de query** | Campos simples gerados da URL documentada. |
|
|
77
|
+
| **Body Fields** | Coleção gerada do body documentado para operações de escrita. |
|
|
78
|
+
| **Options → Response Format** | `Text` para respostas que não são JSON. |
|
|
66
79
|
|
|
67
|
-
|
|
80
|
+
### Kanban (quadros, colunas e cards)
|
|
68
81
|
|
|
69
|
-
|
|
82
|
+
O resource **Kanban (General)** tem 17 operações, três por tipo mais as de ordem:
|
|
83
|
+
|
|
84
|
+
| Tipo | Operações |
|
|
70
85
|
| --- | --- |
|
|
71
|
-
|
|
|
72
|
-
|
|
|
73
|
-
| **
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
86
|
+
| Quadro | **Listar quadros**, **Buscar quadro**, **Criar quadro**, **Editar quadro**, **Excluir quadro** |
|
|
87
|
+
| Coluna | **Listar colunas**, **Buscar coluna**, **Criar coluna**, **Editar coluna**, **Excluir coluna**, **Reordenar coluna** |
|
|
88
|
+
| Card | **Listar cards**, **Buscar card**, **Criar card**, **Editar card**, **Excluir card**, **Reordenar card** |
|
|
89
|
+
|
|
90
|
+
- **Escolha em cascata (versão 2).** Em operações que pedem uma coluna, o campo **Filter by Board** estreita a lista de colunas a um quadro. Em operações que pedem um card, o campo **Filter by Column** mostra os cards daquela coluna. Esses dois campos só ajudam a escolher: o node não os envia ao Digisac. Sem a coluna escolhida, a lista de cards fica vazia; cole o ID no modo **By ID** se já o tem.
|
|
91
|
+
- **Excluir exige confirmação.** **Excluir quadro**, **Excluir coluna** e **Excluir card** têm o campo **Confirm Delete**, desligado por padrão. Sem ele ligado, o node para antes de chamar a API.
|
|
92
|
+
- **Body Fields começa vazio.** Em criar e editar, adicione só os campos que quer enviar. Assim, editar um card não sobrescreve a posição, e editar um quadro não troca os departamentos.
|
|
93
|
+
- **Duas suposições sem chamada real.** A coleção do Digisac traz **Editar coluna** e **Editar card** como `/v1/...`, sem `/api`. O node usa `/api/v1/kanban-columns/...` e `/api/v1/kanban-cards/...`, como as outras 15 rotas. Se essas duas operações responderem `404`, o caminho da coleção é o certo; abra uma issue. Também por suposição, `Position` (editar card) vai como número, e a coleção mostra `"1"` entre aspas.
|
|
94
|
+
- **Versão 1.** Quem usa a versão 1 vê as mesmas 17 operações com campos de texto, sem a lista pesquisável.
|
|
95
|
+
|
|
96
|
+
### Todas as chamadas da API
|
|
97
|
+
|
|
98
|
+
O catálogo completo fica em [docs/api-calls.md](docs/api-calls.md). Resumo por método:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
GET: 150 | POST: 96 | PUT: 37 | PATCH: 3 | DELETE: 29
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Resumo por recurso (gerado por `npm run generate:docs`):
|
|
105
|
+
|
|
106
|
+
<!-- digisac:recursos:start -->
|
|
107
|
+
| Recurso | Chamadas |
|
|
108
|
+
| --- | ---: |
|
|
109
|
+
| Acionamento flag no robo (General) | 1 |
|
|
110
|
+
| Agendamentos (General) | 5 |
|
|
111
|
+
| Agora (General) | 3 |
|
|
112
|
+
| Agora (Popular) | 3 |
|
|
113
|
+
| Assuntos de chamado (General) | 5 |
|
|
114
|
+
| Auditoria de autenticacao (General) | 2 |
|
|
115
|
+
| Autorizacao (General) | 1 |
|
|
116
|
+
| Autorizacao (Popular) | 1 |
|
|
117
|
+
| Avaliacoes (General) | 5 |
|
|
118
|
+
| Campanhas (General) | 7 |
|
|
119
|
+
| Campos personalizados (General) | 5 |
|
|
120
|
+
| Cargos (General) | 7 |
|
|
121
|
+
| Central de notificacoes (General) | 2 |
|
|
122
|
+
| Chamados (General) | 7 |
|
|
123
|
+
| Chamados (Popular) | 6 |
|
|
124
|
+
| Conexoes (General) | 11 |
|
|
125
|
+
| Contatos (General) | 22 |
|
|
126
|
+
| Contatos (Popular) | 22 |
|
|
127
|
+
| Controle de ausencia (General) | 1 |
|
|
128
|
+
| Creditos SMS (General) | 3 |
|
|
129
|
+
| Departamentos (General) | 6 |
|
|
130
|
+
| Distribuicao de chamados (General) | 6 |
|
|
131
|
+
| Estatisticas de atendimento (General) | 10 |
|
|
132
|
+
| Estatisticas de atendimento (Popular) | 7 |
|
|
133
|
+
| Estatisticas de avaliacoes (General) | 7 |
|
|
134
|
+
| Feriados (General) | 5 |
|
|
135
|
+
| Funil de vendas (General) | 10 |
|
|
136
|
+
| Grupos WhatsApp (General) | 4 |
|
|
137
|
+
| Historico de chamados (General) | 12 |
|
|
138
|
+
| Historico de chamados (Popular) | 9 |
|
|
139
|
+
| Idioma da plataforma (General) | 1 |
|
|
140
|
+
| Integracoes (General) | 2 |
|
|
141
|
+
| Kanban (General) | 17 |
|
|
142
|
+
| Mensagens (General) | 13 |
|
|
143
|
+
| Mensagens (Popular) | 8 |
|
|
144
|
+
| Mensagens interativas (General) | 7 |
|
|
145
|
+
| Meus dados (General) | 1 |
|
|
146
|
+
| Notificacao (General) | 3 |
|
|
147
|
+
| Organizacoes (General) | 5 |
|
|
148
|
+
| Pessoas (General) | 5 |
|
|
149
|
+
| Planos (General) | 2 |
|
|
150
|
+
| Redefinir senha (General) | 1 |
|
|
151
|
+
| Respostas rapidas (General) | 7 |
|
|
152
|
+
| Robos (General) | 6 |
|
|
153
|
+
| Tags (General) | 8 |
|
|
154
|
+
| Templates (General) | 11 |
|
|
155
|
+
| Termos de aceite (General) | 5 |
|
|
156
|
+
| Tokens (General) | 5 |
|
|
157
|
+
| Usuarios (General) | 6 |
|
|
158
|
+
| Versoes (General) | 1 |
|
|
159
|
+
| Webhooks (General) | 5 |
|
|
160
|
+
| WhatsApp (General) | 1 |
|
|
161
|
+
<!-- digisac:recursos:end -->
|
|
79
162
|
|
|
80
|
-
## Exemplos práticos
|
|
163
|
+
## 💡 Exemplos práticos
|
|
81
164
|
|
|
82
165
|
### Listar contatos
|
|
83
166
|
|
|
@@ -103,7 +186,7 @@ Preencha:
|
|
|
103
186
|
Resource: **Mensagens (General)**
|
|
104
187
|
Operation: **Enviar mensagem**
|
|
105
188
|
|
|
106
|
-
Em **
|
|
189
|
+
Em **Body Fields**, preencha:
|
|
107
190
|
|
|
108
191
|
- `Text`: `Olá, tudo bem?`
|
|
109
192
|
- `Type`: `chat`
|
|
@@ -116,7 +199,7 @@ Em **Campos do Body**, preencha:
|
|
|
116
199
|
Resource: **Mensagens (General)**
|
|
117
200
|
Operation: **Enviar imagem**, **Enviar PDF** ou **Enviar áudio**
|
|
118
201
|
|
|
119
|
-
Use **
|
|
202
|
+
Use **Body Fields** para `Text`, `Number` e `Service Id`. No campo `File`, informe somente o objeto do arquivo, não o body inteiro:
|
|
120
203
|
|
|
121
204
|
```json
|
|
122
205
|
{
|
|
@@ -155,7 +238,7 @@ Body:
|
|
|
155
238
|
Resource: **Chamados (General)**
|
|
156
239
|
Operation: **Fechar um chamado com assunto**
|
|
157
240
|
|
|
158
|
-
Em **
|
|
241
|
+
Em **Body Fields**, preencha `Ticket Topic Ids` com:
|
|
159
242
|
|
|
160
243
|
```json
|
|
161
244
|
["TICKET_TOPIC_ID"]
|
|
@@ -175,86 +258,68 @@ Preencha os campos de query:
|
|
|
175
258
|
- `Period Type`: `open` ou `close`
|
|
176
259
|
- `Status`: `all`, `open` ou `close`
|
|
177
260
|
|
|
261
|
+
### Mover card entre colunas
|
|
262
|
+
|
|
263
|
+
Resource: **Kanban (General)**
|
|
264
|
+
Operation: **Editar card**
|
|
265
|
+
|
|
266
|
+
Escolha o card (versão 2: use **Filter by Column** para achar o card na lista, ou cole o ID no modo **By ID**). Em **Body Fields**, adicione:
|
|
267
|
+
|
|
268
|
+
- `Column Id`: a coluna de destino, escolhida na lista.
|
|
269
|
+
- `Position`: opcional, o número da posição na coluna.
|
|
270
|
+
|
|
271
|
+
### Excluir card com confirmação
|
|
272
|
+
|
|
273
|
+
Resource: **Kanban (General)**
|
|
274
|
+
Operation: **Excluir card**
|
|
275
|
+
|
|
276
|
+
Escolha o card e ligue **Confirm Delete**. Sem isso o node recusa a chamada com a mensagem `Turn on 'Confirm Delete' to delete this kanban card`.
|
|
277
|
+
|
|
178
278
|
### Criar webhook
|
|
179
279
|
|
|
180
280
|
Resource: **Webhooks (General)**
|
|
181
281
|
Operation: **Criar webhook**
|
|
182
282
|
|
|
183
|
-
Em **
|
|
283
|
+
Em **Body Fields**, preencha `Active`, `Name`, `Url`, `Events` e `Type`. Para `Events`, use array JSON:
|
|
184
284
|
|
|
185
285
|
```json
|
|
186
286
|
["message.created", "ticket.closed"]
|
|
187
287
|
```
|
|
188
288
|
|
|
189
|
-
##
|
|
289
|
+
## 🤖 Usar como Tool de Agente de IA
|
|
190
290
|
|
|
191
|
-
O
|
|
291
|
+
O node `Digisac` é **usável como tool** por nós de **AI Agent** do n8n (Tools Agent). Isso deixa o modelo **executar ações no Digisac sozinho** — por exemplo: *"busque o contato do número 5511999998888 e envie a ele a mensagem de boas-vindas"*. A prática recomendada é criar uma tool por operação liberada para o agente. Isso limita o escopo do modelo e reduz risco de ações erradas.
|
|
192
292
|
|
|
193
|
-
|
|
293
|
+
### Como ligar (2 passos)
|
|
194
294
|
|
|
195
|
-
|
|
196
|
-
GET: 144 | POST: 93 | PUT: 34 | PATCH: 1 | DELETE: 26
|
|
197
|
-
```
|
|
295
|
+
1. **No servidor n8n**, habilite o uso de community nodes como tools (por segurança, vem **desligado por padrão**). Defina a variável de ambiente:
|
|
198
296
|
|
|
199
|
-
|
|
297
|
+
```bash
|
|
298
|
+
N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
|
|
299
|
+
```
|
|
200
300
|
|
|
201
|
-
|
|
|
202
|
-
| --- |
|
|
203
|
-
|
|
|
204
|
-
|
|
|
205
|
-
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
| Auditoria de autenticacao (General) | 2 |
|
|
209
|
-
| Autorizacao (General) | 1 |
|
|
210
|
-
| Autorizacao (Popular) | 1 |
|
|
211
|
-
| Avaliacoes (General) | 5 |
|
|
212
|
-
| Campanhas (General) | 7 |
|
|
213
|
-
| Campos personalizados (General) | 5 |
|
|
214
|
-
| Cargos (General) | 7 |
|
|
215
|
-
| Central de notificacoes (General) | 2 |
|
|
216
|
-
| Chamados (General) | 7 |
|
|
217
|
-
| Chamados (Popular) | 6 |
|
|
218
|
-
| Conexoes (General) | 11 |
|
|
219
|
-
| Contatos (General) | 22 |
|
|
220
|
-
| Contatos (Popular) | 22 |
|
|
221
|
-
| Controle de ausencia (General) | 1 |
|
|
222
|
-
| Creditos SMS (General) | 3 |
|
|
223
|
-
| Departamentos (General) | 6 |
|
|
224
|
-
| Distribuicao de chamados (General) | 6 |
|
|
225
|
-
| Estatisticas de atendimento (General) | 10 |
|
|
226
|
-
| Estatisticas de atendimento (Popular) | 7 |
|
|
227
|
-
| Estatisticas de avaliacoes (General) | 7 |
|
|
228
|
-
| Feriados (General) | 5 |
|
|
229
|
-
| Funil de vendas (General) | 10 |
|
|
230
|
-
| Grupos WhatsApp (General) | 4 |
|
|
231
|
-
| Historico de chamados (General) | 12 |
|
|
232
|
-
| Historico de chamados (Popular) | 9 |
|
|
233
|
-
| Idioma da plataforma (General) | 1 |
|
|
234
|
-
| Integracoes (General) | 2 |
|
|
235
|
-
| Mensagens (General) | 13 |
|
|
236
|
-
| Mensagens (Popular) | 8 |
|
|
237
|
-
| Mensagens interativas (General) | 7 |
|
|
238
|
-
| Meus dados (General) | 1 |
|
|
239
|
-
| Notificacao (General) | 3 |
|
|
240
|
-
| Organizacoes (General) | 5 |
|
|
241
|
-
| Pessoas (General) | 5 |
|
|
242
|
-
| Planos (General) | 2 |
|
|
243
|
-
| Redefinir senha (General) | 1 |
|
|
244
|
-
| Respostas rapidas (General) | 7 |
|
|
245
|
-
| Robos (General) | 6 |
|
|
246
|
-
| Tags (General) | 8 |
|
|
247
|
-
| Templates (General) | 11 |
|
|
248
|
-
| Termos de aceite (General) | 5 |
|
|
249
|
-
| Tokens (General) | 5 |
|
|
250
|
-
| Usuarios (General) | 6 |
|
|
251
|
-
| Versoes (General) | 1 |
|
|
252
|
-
| Webhooks (General) | 5 |
|
|
253
|
-
| WhatsApp (General) | 1 |
|
|
301
|
+
| Instalação | Onde definir |
|
|
302
|
+
| --- | --- |
|
|
303
|
+
| **Docker / docker-compose** | Adicione em `environment:` do serviço n8n (ou no `.env`) e recrie o container (`docker compose up -d`). |
|
|
304
|
+
| **npm / npx** | Exporte antes de subir: `export N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true && n8n start`. |
|
|
305
|
+
| **n8n Cloud** | Já habilitado nos planos que suportam community nodes. |
|
|
306
|
+
|
|
307
|
+
Sem essa variável o node **não aparece** na lista de tools do AI Agent — é a causa nº 1 de "não acho o node como tool".
|
|
254
308
|
|
|
255
|
-
|
|
309
|
+
2. **No workflow**, adicione um node **AI Agent**, conecte um **Chat Model** e, no conector **Tool**, adicione o **Digisac**. Escolha o **Resource** e a **Operation** que o agente pode usar (ex.: *Contatos (General)* → *Listar todos os contatos*). Crie uma tool por operação.
|
|
256
310
|
|
|
257
|
-
|
|
311
|
+
### Deixe o modelo preencher os campos (`$fromAI`)
|
|
312
|
+
|
|
313
|
+
Em cada campo do node em modo tool aparece o botão **"Let the model define this parameter"**, que usa a expressão:
|
|
314
|
+
|
|
315
|
+
```javascript
|
|
316
|
+
{{ $fromAI('text', 'Texto exato que será enviado ao contato', 'string') }}
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
- Assinatura: `$fromAI(key, description?, type?, defaultValue?)` — `key` de 1–64 caracteres (`[a-zA-Z0-9_-]`); `type` = `string` | `number` | `boolean` | `json`.
|
|
320
|
+
- Você pode **misturar**: fixar alguns campos (ex.: sempre `Origin` = `bot`) e deixar o modelo preencher outros (texto, contato, período).
|
|
321
|
+
- **Na versão 2 do node**, os campos de ID são Resource Locator. Para o modelo preencher um ID, mude o campo para o modo **By ID** e ponha a expressão `$fromAI` no valor. A lista **From List** serve para a pessoa que monta o workflow, não para o agente.
|
|
322
|
+
- As **descrições de cada operação e campo** foram escritas para o LLM entender o que cada uma faz e como preencher; quanto mais específico o System Message do agente, melhor o resultado.
|
|
258
323
|
|
|
259
324
|
### Prompt recomendado para o System Message
|
|
260
325
|
|
|
@@ -263,34 +328,42 @@ Você pode usar as tools Digisac somente quando o usuário pedir para consultar,
|
|
|
263
328
|
Nunca invente IDs. Qualquer campo terminado em Id ou Ids deve vir de busca/listagem anterior, entrada confirmada do usuário ou valor sentinela documentado como all.
|
|
264
329
|
Não copie placeholders da documentação, como {{contactId}}, {{serviceId}} ou {{all/open/close}}. Substitua por valor real ou escolha uma opção válida.
|
|
265
330
|
Para operações POST, PUT e PATCH, envie um body JSON mínimo, somente com os campos necessários.
|
|
266
|
-
Quando a tool expuser
|
|
331
|
+
Quando a tool expuser Body Fields, preencha os campos dedicados em vez de gerar um JSON manual.
|
|
267
332
|
Use Body JSON Avançado ou Query Avançada JSON apenas quando não existir campo dedicado suficiente para a chamada.
|
|
268
333
|
Para filtros de data/hora, use ISO-8601 quando o endpoint esperar timestamp.
|
|
269
334
|
Para exportações CSV, TXT ou PDF, use Response Format = Text se a resposta não for JSON.
|
|
270
335
|
Antes de criar, editar, excluir, arquivar, bloquear, fechar chamado ou enviar mensagem, confirme que a intenção do usuário está clara.
|
|
271
336
|
```
|
|
272
337
|
|
|
273
|
-
### Exemplos de `$fromAI()`
|
|
338
|
+
### Exemplos de `$fromAI()` com os campos do node
|
|
274
339
|
|
|
275
|
-
|
|
340
|
+
**Enviar mensagem** (*Mensagens (General)* → *Enviar mensagem*), em **Body Fields**:
|
|
276
341
|
|
|
277
|
-
|
|
278
|
-
{{ $fromAI('contactId', 'ID existente de contato Digisac. Deve vir de uma busca/listagem anterior, nunca inventado.', 'string') }}
|
|
279
|
-
```
|
|
342
|
+
- `Text`: o modelo escreve o texto.
|
|
280
343
|
|
|
281
|
-
|
|
344
|
+
```javascript
|
|
345
|
+
{{ $fromAI('text', 'Texto exato que será enviado ao contato no WhatsApp/Digisac.', 'string') }}
|
|
346
|
+
```
|
|
282
347
|
|
|
283
|
-
|
|
284
|
-
{{ $fromAI('messageText', 'Texto exato que será enviado ao contato no WhatsApp/Digisac.', 'string') }}
|
|
285
|
-
```
|
|
348
|
+
- `Contact Id` (modo **By ID**): o ID vem de uma busca anterior, nunca inventado.
|
|
286
349
|
|
|
287
|
-
|
|
350
|
+
```javascript
|
|
351
|
+
{{ $fromAI('contactId', 'ID existente de contato Digisac. Deve vir de uma busca/listagem anterior.', 'string') }}
|
|
352
|
+
```
|
|
288
353
|
|
|
289
|
-
|
|
290
|
-
{{ $fromAI('startPeriod', 'Início do período em ISO-8601, por exemplo 2026-07-01T00:00:00.000Z.', 'string') }}
|
|
291
|
-
```
|
|
354
|
+
- `Type` = `chat` e `Origin` = `bot`: fixe estes dois no próprio campo, sem `$fromAI`.
|
|
292
355
|
|
|
293
|
-
|
|
356
|
+
**Buscar estatísticas** (*Estatísticas de atendimento (General)*), nos campos de query:
|
|
357
|
+
|
|
358
|
+
- `Start Period` e `End Period`: o seletor de data da versão 2 aceita a expressão.
|
|
359
|
+
|
|
360
|
+
```javascript
|
|
361
|
+
{{ $fromAI('startPeriod', 'Início do período em ISO-8601 com fuso, por exemplo 2026-07-01T00:00:00.000Z.', 'string') }}
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
- `Department Id` e `User Id`: deixe `all` fixo quando o agente não precisa filtrar.
|
|
365
|
+
|
|
366
|
+
**Campo de body estruturado** (envio de arquivo, `File` em *Body Fields*):
|
|
294
367
|
|
|
295
368
|
```javascript
|
|
296
369
|
{{ $fromAI('file', 'Objeto JSON do arquivo com base64, mimetype e name quando a operação Digisac enviar mídia.', 'json') }}
|
|
@@ -303,94 +376,104 @@ Campo de body estruturado:
|
|
|
303
376
|
- Nunca deixe o modelo inventar IDs.
|
|
304
377
|
- Use credenciais dedicadas por ambiente/cliente.
|
|
305
378
|
- Para operações destrutivas (`DELETE`, arquivar, bloquear, fechar chamado), coloque etapa humana de confirmação quando o fluxo for sensível.
|
|
379
|
+
- **Kanban como tool.** As 17 operações do Kanban funcionam como tool. Para **Excluir quadro**, **Excluir coluna** e **Excluir card**, deixe **Confirm Delete** desligado na tool e ligue só num fluxo que você revisou: o agente não consegue apagar sem esse campo. O agente deve achar o quadro com **Listar quadros**, a coluna com **Listar colunas** e o card com **Listar cards** antes de mover ou excluir.
|
|
306
380
|
- Em mensagens enviadas ao cliente, gere o texto em etapa anterior e passe o texto final para a tool.
|
|
307
381
|
- Use campos dedicados sempre que existirem. Para bodies grandes ou arrays de múltiplos itens, use JSON explícito e valide campos obrigatórios no workflow antes da chamada.
|
|
308
382
|
|
|
309
|
-
|
|
383
|
+
### Referências
|
|
384
|
+
|
|
385
|
+
- [Tools Agent — n8n Docs](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/tools-agent)
|
|
386
|
+
- [Let AI specify tool parameters (`$fromAI`) — n8n Docs](https://docs.n8n.io/advanced-ai/examples/using-the-fromai-function/)
|
|
387
|
+
- [Variáveis de ambiente de nodes — n8n Docs](https://docs.n8n.io/hosting/configuration/environment-variables/nodes/)
|
|
388
|
+
|
|
389
|
+
## 🔀 Versão 1 ou 2 do node
|
|
390
|
+
|
|
391
|
+
| | **Versão 1** | **Versão 2 (padrão em node novo)** |
|
|
392
|
+
| --- | --- | --- |
|
|
393
|
+
| IDs | Texto digitado | Lista pesquisável (8 tipos, mais quadro, coluna e card do Kanban) ou **By ID** (os demais) |
|
|
394
|
+
| Datas | Texto | Seletor de data, enviada em ISO UTC |
|
|
395
|
+
| Valores fixos | Texto | Lista de opções |
|
|
396
|
+
| Workflows salvos | Continuam iguais | Não são alterados |
|
|
397
|
+
|
|
398
|
+
Se um workflow salvo usa a versão 1, ele continua enviando exatamente a mesma requisição. Para ganhar os campos guiados, adicione um node novo (versão 2) e escolha o valor de novo.
|
|
399
|
+
|
|
400
|
+
## 🛠️ Desenvolvimento
|
|
310
401
|
|
|
311
402
|
```bash
|
|
403
|
+
# Instalar dependências
|
|
312
404
|
npm install
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
npm run lint
|
|
405
|
+
|
|
406
|
+
# Compilar (n8n-node build: tsc + cópia de ícones)
|
|
316
407
|
npm run build
|
|
317
|
-
npm run dev
|
|
318
|
-
```
|
|
319
408
|
|
|
320
|
-
|
|
409
|
+
# Testes (node --test sobre o dist)
|
|
410
|
+
npm test
|
|
321
411
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
│ └── DigisacApi.credentials.ts
|
|
326
|
-
├── nodes/
|
|
327
|
-
│ └── Digisac/
|
|
328
|
-
│ ├── Digisac.node.ts
|
|
329
|
-
│ ├── actions/
|
|
330
|
-
│ ├── generated/
|
|
331
|
-
│ ├── helpers/
|
|
332
|
-
│ └── transport/
|
|
333
|
-
├── scripts/
|
|
334
|
-
│ ├── generate-docs.mjs
|
|
335
|
-
│ └── generate-endpoints.mjs
|
|
336
|
-
└── docs/
|
|
337
|
-
└── api-calls.md
|
|
412
|
+
# Lint oficial do n8n (n8n-node lint)
|
|
413
|
+
npm run lint
|
|
414
|
+
npm run lint:fix
|
|
338
415
|
```
|
|
339
416
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
O script `scripts/generate-endpoints.mjs` baixa a coleção pública:
|
|
417
|
+
Estrutura resumida:
|
|
343
418
|
|
|
344
419
|
```text
|
|
345
|
-
|
|
420
|
+
n8n-nodes-digisac/
|
|
421
|
+
├── credentials/ # DigisacApi.credentials.ts
|
|
422
|
+
├── nodes/Digisac/
|
|
423
|
+
│ ├── actions/ # monta propriedades e executa cada chamada
|
|
424
|
+
│ ├── generated/ # catálogo gerado da coleção Postman
|
|
425
|
+
│ ├── helpers/ # IDs guiados, datas e opções (versão 2)
|
|
426
|
+
│ ├── methods/ # listSearch das listas pesquisáveis
|
|
427
|
+
│ └── transport/ # requisição HTTP com timeout
|
|
428
|
+
├── scripts/ # geradores do catálogo e dos documentos
|
|
429
|
+
├── docs/ # api-calls.md (gerado)
|
|
430
|
+
└── test/ # node --test sobre o dist
|
|
346
431
|
```
|
|
347
432
|
|
|
348
|
-
|
|
433
|
+
Os geradores são manuais e **não** rodam no build (o primeiro baixa a coleção da rede):
|
|
349
434
|
|
|
350
|
-
```
|
|
351
|
-
|
|
435
|
+
```bash
|
|
436
|
+
npm run generate:endpoints # baixa a coleção Postman e regrava o catálogo
|
|
437
|
+
npm run generate:docs # regrava docs/api-calls.md e a tabela de recursos deste README
|
|
352
438
|
```
|
|
353
439
|
|
|
354
|
-
|
|
440
|
+
## ✅ Compatibilidade
|
|
355
441
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
docs/api-calls.md
|
|
359
|
-
```
|
|
442
|
+
- Requer n8n com `n8nNodesApiVersion` 1 e uma conta Digisac com token de acesso pessoal.
|
|
443
|
+
- A versão 2 do node é a padrão em node novo; a versão 1 continua disponível para workflows salvos.
|
|
360
444
|
|
|
361
|
-
##
|
|
445
|
+
## 📚 Recursos
|
|
362
446
|
|
|
363
|
-
|
|
447
|
+
- [Documentação Postman da Digisac](https://documenter.getpostman.com/view/53282970/2sBXihpXmF)
|
|
448
|
+
- [Documentação de community nodes do n8n](https://docs.n8n.io/integrations/community-nodes/)
|
|
449
|
+
- [n8n: `$fromAI()`](https://docs.n8n.io/build/integrate-ai/ai-examples/use-ai-for-parameters/)
|
|
364
450
|
|
|
365
|
-
|
|
451
|
+
## 🚀 Publicação
|
|
366
452
|
|
|
367
|
-
|
|
368
|
-
npm version patch
|
|
369
|
-
git push origin main --tags
|
|
370
|
-
```
|
|
453
|
+
A tag `vX.Y.Z` dispara o workflow `publish.yml`, que envia a versão com `npm stage publish` e provenance. A versão **fica em espera**: ela só vai ao ar depois que o dono a aprova, com 2FA, na aba **Staged Packages** do npmjs.com. Sem a aprovação, nada muda no registro.
|
|
371
454
|
|
|
372
|
-
|
|
455
|
+
## 📈 Versões
|
|
373
456
|
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
457
|
+
- **1.2.0** — **Kanban.** 17 operações novas de quadros, colunas e cards, com lista pesquisável na versão 2 e **Confirm Delete** nas três de excluir. O catálogo passa a guardar o ID de cada operação: nenhum workflow salvo muda de operação. Veja o `CHANGELOG.md`.
|
|
458
|
+
- **1.1.0** — **IDs, datas e valores guiados.** Em node novo (versão 2 do node), contato, conexão, departamento, usuário, tag, cargo, robô e assunto aparecem em lista pesquisável; datas têm seletor; valores fixos viram opções. Workflows salvos continuam na versão 1. Migração para o `@n8n/node-cli` 0.55.5, lint oficial sem erros, testes, CI e timeout de 30 s. Veja o `CHANGELOG.md`.
|
|
459
|
+
- **1.0.3** — Descrições de AI Tool reforçadas: regra para campos `Id/Ids`, alertas para placeholders, orientação Popular vs General e avisos por tipo de campo.
|
|
460
|
+
- **1.0.2** — Interface simplificada: query e body com campos dedicados gerados da documentação. JSON fica em opções avançadas.
|
|
461
|
+
- **1.0.1** — Documentação em PT-BR, exemplos, instruções de AI Tool e catálogo em `docs/api-calls.md`.
|
|
462
|
+
- **1.0.0** — Primeira versão publicada: node único `Digisac`, credencial Bearer, 298 chamadas, suporte a AI Agent e publicação npm via GitHub Actions.
|
|
379
463
|
|
|
380
|
-
##
|
|
464
|
+
## 🆘 Suporte
|
|
381
465
|
|
|
382
|
-
|
|
383
|
-
- **1.0.2** — Interface simplificada: query e body agora usam campos dedicados gerados da documentação. JSON fica escondido em opções avançadas ou aparece apenas nas chamadas em que não há forma segura de gerar campos. Ícone atualizado a partir de `icon.webp`.
|
|
384
|
-
- **1.0.1** — Documentação reescrita em PT-BR, com exemplos práticos, instruções de AI Tool e catálogo completo de chamadas em `docs/api-calls.md`.
|
|
385
|
-
- **1.0.0** — Primeira versão publicada. Node único `Digisac`, credencial Bearer, catálogo com 298 chamadas da documentação Postman, suporte a AI Agent e publicação npm via GitHub Actions.
|
|
466
|
+
Se algo não funcionar:
|
|
386
467
|
|
|
387
|
-
|
|
468
|
+
1. Confirme a **Base URL** e o **token** da credencial (o teste da credencial chama `GET /api/v1/me`).
|
|
469
|
+
2. Verifique se a versão do n8n é compatível.
|
|
470
|
+
3. Consulte os logs do n8n para o erro detalhado.
|
|
471
|
+
4. Abra uma [issue no GitHub](https://github.com/PedroHSGuimaraes/n8n-nodes-digisac/issues).
|
|
388
472
|
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
- [n8n: `$fromAI()`](https://docs.n8n.io/build/integrate-ai/ai-examples/use-ai-for-parameters/)
|
|
473
|
+
## ☕ Apoie o projeto
|
|
474
|
+
|
|
475
|
+
Este node é mantido de forma independente. Se ele ajuda suas automações, você pode apoiar o desenvolvimento, a manutenção e as novas integrações pelo [Buy Me a Coffee](https://buymeacoffee.com/qTny0AzFXS).
|
|
393
476
|
|
|
394
|
-
## Licença
|
|
477
|
+
## 📄 Licença
|
|
395
478
|
|
|
396
479
|
[MIT](LICENSE.md)
|
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
import type { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
|
|
2
2
|
export declare class Digisac implements INodeType {
|
|
3
3
|
description: INodeTypeDescription;
|
|
4
|
+
methods: {
|
|
5
|
+
listSearch: {
|
|
6
|
+
searchKanbanBoards: (this: import("n8n-workflow").ILoadOptionsFunctions, filter?: string) => Promise<import("n8n-workflow").INodeListSearchResult>;
|
|
7
|
+
searchKanbanColumns: (this: import("n8n-workflow").ILoadOptionsFunctions, filter?: string) => Promise<import("n8n-workflow").INodeListSearchResult>;
|
|
8
|
+
searchKanbanCards: (this: import("n8n-workflow").ILoadOptionsFunctions, filter?: string) => Promise<import("n8n-workflow").INodeListSearchResult>;
|
|
9
|
+
searchContacts: (this: import("n8n-workflow").ILoadOptionsFunctions, filter?: string, paginationToken?: unknown) => Promise<import("n8n-workflow").INodeListSearchResult>;
|
|
10
|
+
searchServices: (this: import("n8n-workflow").ILoadOptionsFunctions, filter?: string, paginationToken?: unknown) => Promise<import("n8n-workflow").INodeListSearchResult>;
|
|
11
|
+
searchDepartments: (this: import("n8n-workflow").ILoadOptionsFunctions, filter?: string, paginationToken?: unknown) => Promise<import("n8n-workflow").INodeListSearchResult>;
|
|
12
|
+
searchUsers: (this: import("n8n-workflow").ILoadOptionsFunctions, filter?: string, paginationToken?: unknown) => Promise<import("n8n-workflow").INodeListSearchResult>;
|
|
13
|
+
searchTags: (this: import("n8n-workflow").ILoadOptionsFunctions, filter?: string, paginationToken?: unknown) => Promise<import("n8n-workflow").INodeListSearchResult>;
|
|
14
|
+
searchRoles: (this: import("n8n-workflow").ILoadOptionsFunctions, filter?: string, paginationToken?: unknown) => Promise<import("n8n-workflow").INodeListSearchResult>;
|
|
15
|
+
searchBots: (this: import("n8n-workflow").ILoadOptionsFunctions, filter?: string, paginationToken?: unknown) => Promise<import("n8n-workflow").INodeListSearchResult>;
|
|
16
|
+
searchTicketTopics: (this: import("n8n-workflow").ILoadOptionsFunctions, filter?: string, paginationToken?: unknown) => Promise<import("n8n-workflow").INodeListSearchResult>;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
4
19
|
execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
|
|
5
20
|
}
|