n8n-nodes-digisac 1.0.3 → 1.1.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 CHANGED
@@ -1,24 +1,31 @@
1
1
  # n8n-nodes-digisac
2
2
 
3
- [![CI](https://github.com/PedroHSGuimaraes/n8n-nodes-digisac/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/PedroHSGuimaraes/n8n-nodes-digisac/actions/workflows/ci.yml)
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
- Node community do [n8n](https://n8n.io/) para integrar workflows com a **API da Digisac**. O pacote expõe em um único node todas as chamadas publicadas na documentação Postman da Digisac: contatos, chamados, mensagens, campanhas, conexões, departamentos, usuários, tags, templates, webhooks, relatórios, estatísticas, agendamentos e demais recursos operacionais.
5
+ [![CI](https://github.com/PedroHSGuimaraes/n8n-nodes-digisac/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/PedroHSGuimaraes/n8n-nodes-digisac/actions/workflows/ci.yml) [![Apoie no Buy Me a Coffee](https://img.shields.io/badge/Buy_Me_a_Coffee-Apoie_o_projeto-FFDD00?logo=buy-me-a-coffee&logoColor=000000)](https://buymeacoffee.com/qTny0AzFXS)
6
6
 
7
- O projeto segue o mesmo padrão usado no `n8n-nodes-clinicorp`: um node de ação, uma credencial, TypeScript, catálogo gerado a partir da documentação da API, build validado por CI, publicação no npm via GitHub Actions e suporte a uso como Tool de Agente de IA.
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
- ## Funcionalidades
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
- - **Cobertura completa da documentação**: 298 chamadas da coleção pública Postman da Digisac, organizadas em 51 recursos no n8n.
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
- ## Instalação
13
+ ---
20
14
 
21
- No n8n, acesse **Settings -> Community Nodes -> Install** e instale:
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** — 298 chamadas em 51 recursos, geradas da coleção pública Postman.
19
+ - **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.
20
+ - **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.
21
+ - **Workflows salvos não mudam** — quem já usa a versão 1 continua enviando a mesma requisição.
22
+ - **Credencial centralizada** — Base URL e token ficam na credencial `Digisac API`.
23
+ - **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).
24
+ - **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**.
25
+
26
+ ## 📦 Instalação
27
+
28
+ No n8n, acesse **Settings → Community Nodes → Install** e instale:
22
29
 
23
30
  ```text
24
31
  n8n-nodes-digisac
@@ -30,54 +37,112 @@ Para usar community nodes como Tools de Agente de IA em n8n self-hosted, habilit
30
37
  N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
31
38
  ```
32
39
 
33
- Sem essa variável, o node pode funcionar como node normal, mas não aparecer como tool no AI Agent em instalações self-hosted.
40
+ 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
41
 
35
- ## Credenciais
42
+ ## 🔑 Credenciais
36
43
 
37
- Crie uma credencial chamada **Digisac API**.
44
+ Crie uma credencial **Digisac API**.
38
45
 
39
46
  | Campo | O que preencher | Onde encontrar |
40
47
  | --- | --- | --- |
41
- | **Base URL** | URL base da sua conta Digisac, sem barra final. Exemplo: `https://suaempresa.digisac.app`. | Digisac -> Conta -> Informações |
42
- | **Access Token** | Token Bearer de acesso pessoal. | Digisac -> Conta -> API -> Tokens de acesso pessoal |
43
- | **PDF/Base URL** | Base opcional para endpoints documentados como `URLbase`, principalmente export de PDF. Se vazio, o node reutiliza a Base URL. | Use só se sua instância separar URL de API e URL de PDF |
44
-
45
- A credencial testa o acesso com:
46
-
47
- ```http
48
- GET /api/v1/me
49
- ```
48
+ | **Base URL** | URL base da sua conta, sem barra final. Exemplo: `https://suaempresa.digisac.app`. | Digisac → Conta → Informações |
49
+ | **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 |
50
+ | **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 |
50
51
 
51
- ## Como usar o node
52
+ A credencial testa o acesso com `GET /api/v1/me`.
52
53
 
53
- 1. Adicione o node **Digisac** no workflow.
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**.
54
+ ## 🧩 Nós e Operações
62
55
 
63
- Resources marcados como **Popular** são atalhos herdados da coleção Postman para operações frequentes. Resources **General** contêm o catálogo mais completo. Se a mesma chamada existir nos dois, use **Popular** para fluxos comuns e **General** quando precisar de uma operação que não aparece em Popular.
56
+ 1. Adicione o node **Digisac** ao workflow.
57
+ 2. Escolha o **Resource**. Ele corresponde a uma pasta da documentação, como `Contatos`, `Mensagens`, `Chamados`, `Campanhas`, `Tags`, `Usuários` ou `Webhooks`.
58
+ 3. Escolha a **Operation**. Cada uma é uma chamada real da API.
59
+ 4. Preencha os IDs de path. Na versão 2, escolha na lista ou cole o ID no modo **By ID**.
60
+ 5. Preencha os campos de query que aparecerem, como `Per Page`, `Start Period`, `End Period`, `Status`.
61
+ 6. Em chamadas `POST`, `PUT` e `PATCH`, use **Body Fields**: o node gera os campos a partir do body documentado.
62
+ 7. Use **Use Body JSON Avancado** só quando a operação exigir array, objeto livre ou algo que não coube nos campos.
63
+ 8. Use **Options → Query Avancada JSON** só para filtros sem campo dedicado.
64
+ 9. Em exportações CSV, TXT ou PDF, use **Options → Response Format → Text**.
64
65
 
65
- Regra para AI Tools e automações: qualquer campo terminado em `Id` ou `Ids` deve vir de busca/listagem anterior, entrada confirmada do usuário ou valor sentinela documentado, como `all`. Nunca copie placeholders como `{{contactId}}`, `{{serviceId}}` ou `{{all/open/close}}`.
66
+ Resources **Popular** são atalhos herdados da coleção Postman para operações frequentes. Resources **General** têm o catálogo mais completo.
66
67
 
67
- ## Campos principais do node
68
+ 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}}`.
68
69
 
69
70
  | Campo | Uso |
70
71
  | --- | --- |
71
- | **Resource** | Área funcional da API Digisac, gerada a partir das pastas Postman. |
72
- | **Operation** | Chamada exata da API. A descrição mostra método, endpoint, origem na documentação e placeholders. |
73
- | **Path Parameters** | Campos obrigatórios extraídos de placeholders como `{{contactId}}`. |
74
- | **Campos de query** | Campos simples gerados a partir da URL documentada. Exemplos: `Per Page`, `Number`, `Service Id`, `From`, `To`, `Type`. |
75
- | **Campos do Body** | Coleção de campos gerada a partir do body documentado para operações de escrita. Use antes de qualquer JSON manual. |
76
- | **Use Body JSON Avançado** | Toggle para liberar um editor JSON quando a chamada precisa de array, objeto livre ou payload muito específico. |
77
- | **Options -> Query Avançada JSON** | Objeto JSON livre mesclado na query string. Chaves iguais substituem campos gerados; use apenas quando a chamada precisar de filtro não representado por campo. |
78
- | **Options -> Response Format** | Use `Text` para exportações CSV/TXT/PDF ou respostas que não retornam JSON. |
72
+ | **Resource** | Área da API Digisac, gerada das pastas Postman. |
73
+ | **Operation** | Chamada exata da API. A descrição mostra método, endpoint e origem. |
74
+ | **IDs de path** | Obrigatórios, extraídos de placeholders como `{{contactId}}`. |
75
+ | **Campos de query** | Campos simples gerados da URL documentada. |
76
+ | **Body Fields** | Coleção gerada do body documentado para operações de escrita. |
77
+ | **Options → Response Format** | `Text` para respostas que não são JSON. |
78
+
79
+ ### Todas as chamadas da API
80
+
81
+ O catálogo completo fica em [docs/api-calls.md](docs/api-calls.md). Resumo por método:
82
+
83
+ ```text
84
+ GET: 144 | POST: 93 | PUT: 34 | PATCH: 1 | DELETE: 26
85
+ ```
86
+
87
+ Resumo por recurso (gerado por `npm run generate:docs`):
88
+
89
+ <!-- digisac:recursos:start -->
90
+ | Recurso | Chamadas |
91
+ | --- | ---: |
92
+ | Acionamento flag no robo (General) | 1 |
93
+ | Agendamentos (General) | 5 |
94
+ | Agora (General) | 3 |
95
+ | Agora (Popular) | 3 |
96
+ | Assuntos de chamado (General) | 5 |
97
+ | Auditoria de autenticacao (General) | 2 |
98
+ | Autorizacao (General) | 1 |
99
+ | Autorizacao (Popular) | 1 |
100
+ | Avaliacoes (General) | 5 |
101
+ | Campanhas (General) | 7 |
102
+ | Campos personalizados (General) | 5 |
103
+ | Cargos (General) | 7 |
104
+ | Central de notificacoes (General) | 2 |
105
+ | Chamados (General) | 7 |
106
+ | Chamados (Popular) | 6 |
107
+ | Conexoes (General) | 11 |
108
+ | Contatos (General) | 22 |
109
+ | Contatos (Popular) | 22 |
110
+ | Controle de ausencia (General) | 1 |
111
+ | Creditos SMS (General) | 3 |
112
+ | Departamentos (General) | 6 |
113
+ | Distribuicao de chamados (General) | 6 |
114
+ | Estatisticas de atendimento (General) | 10 |
115
+ | Estatisticas de atendimento (Popular) | 7 |
116
+ | Estatisticas de avaliacoes (General) | 7 |
117
+ | Feriados (General) | 5 |
118
+ | Funil de vendas (General) | 10 |
119
+ | Grupos WhatsApp (General) | 4 |
120
+ | Historico de chamados (General) | 12 |
121
+ | Historico de chamados (Popular) | 9 |
122
+ | Idioma da plataforma (General) | 1 |
123
+ | Integracoes (General) | 2 |
124
+ | Mensagens (General) | 13 |
125
+ | Mensagens (Popular) | 8 |
126
+ | Mensagens interativas (General) | 7 |
127
+ | Meus dados (General) | 1 |
128
+ | Notificacao (General) | 3 |
129
+ | Organizacoes (General) | 5 |
130
+ | Pessoas (General) | 5 |
131
+ | Planos (General) | 2 |
132
+ | Redefinir senha (General) | 1 |
133
+ | Respostas rapidas (General) | 7 |
134
+ | Robos (General) | 6 |
135
+ | Tags (General) | 8 |
136
+ | Templates (General) | 11 |
137
+ | Termos de aceite (General) | 5 |
138
+ | Tokens (General) | 5 |
139
+ | Usuarios (General) | 6 |
140
+ | Versoes (General) | 1 |
141
+ | Webhooks (General) | 5 |
142
+ | WhatsApp (General) | 1 |
143
+ <!-- digisac:recursos:end -->
79
144
 
80
- ## Exemplos práticos
145
+ ## 💡 Exemplos práticos
81
146
 
82
147
  ### Listar contatos
83
148
 
@@ -103,7 +168,7 @@ Preencha:
103
168
  Resource: **Mensagens (General)**
104
169
  Operation: **Enviar mensagem**
105
170
 
106
- Em **Campos do Body**, preencha:
171
+ Em **Body Fields**, preencha:
107
172
 
108
173
  - `Text`: `Olá, tudo bem?`
109
174
  - `Type`: `chat`
@@ -116,7 +181,7 @@ Em **Campos do Body**, preencha:
116
181
  Resource: **Mensagens (General)**
117
182
  Operation: **Enviar imagem**, **Enviar PDF** ou **Enviar áudio**
118
183
 
119
- Use **Campos do Body** para `Text`, `Number` e `Service Id`. No campo `File`, informe somente o objeto do arquivo, não o body inteiro:
184
+ Use **Body Fields** para `Text`, `Number` e `Service Id`. No campo `File`, informe somente o objeto do arquivo, não o body inteiro:
120
185
 
121
186
  ```json
122
187
  {
@@ -155,7 +220,7 @@ Body:
155
220
  Resource: **Chamados (General)**
156
221
  Operation: **Fechar um chamado com assunto**
157
222
 
158
- Em **Campos do Body**, preencha `Ticket Topic Ids` com:
223
+ Em **Body Fields**, preencha `Ticket Topic Ids` com:
159
224
 
160
225
  ```json
161
226
  ["TICKET_TOPIC_ID"]
@@ -180,81 +245,46 @@ Preencha os campos de query:
180
245
  Resource: **Webhooks (General)**
181
246
  Operation: **Criar webhook**
182
247
 
183
- Em **Campos do Body**, preencha `Active`, `Name`, `Url`, `Events` e `Type`. Para `Events`, use array JSON:
248
+ Em **Body Fields**, preencha `Active`, `Name`, `Url`, `Events` e `Type`. Para `Events`, use array JSON:
184
249
 
185
250
  ```json
186
251
  ["message.created", "ticket.closed"]
187
252
  ```
188
253
 
189
- ## Todas as chamadas da API
254
+ ## 🤖 Usar como Tool de Agente de IA
190
255
 
191
- O catálogo completo fica em [docs/api-calls.md](docs/api-calls.md).
256
+ 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
257
 
193
- Resumo por método:
258
+ ### Como ligar (2 passos)
194
259
 
195
- ```text
196
- GET: 144 | POST: 93 | PUT: 34 | PATCH: 1 | DELETE: 26
197
- ```
260
+ 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
261
 
199
- Resumo por recurso:
262
+ ```bash
263
+ N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
264
+ ```
200
265
 
201
- | Recurso | Chamadas |
202
- | --- | ---: |
203
- | Acionamento flag no robo (General) | 1 |
204
- | Agendamentos (General) | 5 |
205
- | Agora (General) | 3 |
206
- | Agora (Popular) | 3 |
207
- | Assuntos de chamado (General) | 5 |
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 |
266
+ | Instalação | Onde definir |
267
+ | --- | --- |
268
+ | **Docker / docker-compose** | Adicione em `environment:` do serviço n8n (ou no `.env`) e recrie o container (`docker compose up -d`). |
269
+ | **npm / npx** | Exporte antes de subir: `export N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true && n8n start`. |
270
+ | **n8n Cloud** | Já habilitado nos planos que suportam community nodes. |
271
+
272
+ 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
273
 
255
- ## Uso como Tool de Agente de IA
274
+ 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
275
 
257
- O node pode ser conectado ao **AI Agent** do n8n como uma tool. 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.
276
+ ### Deixe o modelo preencher os campos (`$fromAI`)
277
+
278
+ Em cada campo do node em modo tool aparece o botão **"Let the model define this parameter"**, que usa a expressão:
279
+
280
+ ```javascript
281
+ {{ $fromAI('text', 'Texto exato que será enviado ao contato', 'string') }}
282
+ ```
283
+
284
+ - Assinatura: `$fromAI(key, description?, type?, defaultValue?)` — `key` de 1–64 caracteres (`[a-zA-Z0-9_-]`); `type` = `string` | `number` | `boolean` | `json`.
285
+ - Você pode **misturar**: fixar alguns campos (ex.: sempre `Origin` = `bot`) e deixar o modelo preencher outros (texto, contato, período).
286
+ - **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.
287
+ - 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
288
 
259
289
  ### Prompt recomendado para o System Message
260
290
 
@@ -263,34 +293,42 @@ Você pode usar as tools Digisac somente quando o usuário pedir para consultar,
263
293
  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
294
  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
295
  Para operações POST, PUT e PATCH, envie um body JSON mínimo, somente com os campos necessários.
266
- Quando a tool expuser Campos do Body, preencha os campos dedicados em vez de gerar um JSON manual.
296
+ Quando a tool expuser Body Fields, preencha os campos dedicados em vez de gerar um JSON manual.
267
297
  Use Body JSON Avançado ou Query Avançada JSON apenas quando não existir campo dedicado suficiente para a chamada.
268
298
  Para filtros de data/hora, use ISO-8601 quando o endpoint esperar timestamp.
269
299
  Para exportações CSV, TXT ou PDF, use Response Format = Text se a resposta não for JSON.
270
300
  Antes de criar, editar, excluir, arquivar, bloquear, fechar chamado ou enviar mensagem, confirme que a intenção do usuário está clara.
271
301
  ```
272
302
 
273
- ### Exemplos de `$fromAI()`
303
+ ### Exemplos de `$fromAI()` com os campos do node
274
304
 
275
- Contato existente:
305
+ **Enviar mensagem** (*Mensagens (General)* → *Enviar mensagem*), em **Body Fields**:
276
306
 
277
- ```javascript
278
- {{ $fromAI('contactId', 'ID existente de contato Digisac. Deve vir de uma busca/listagem anterior, nunca inventado.', 'string') }}
279
- ```
307
+ - `Text`: o modelo escreve o texto.
280
308
 
281
- Texto de mensagem:
309
+ ```javascript
310
+ {{ $fromAI('text', 'Texto exato que será enviado ao contato no WhatsApp/Digisac.', 'string') }}
311
+ ```
282
312
 
283
- ```javascript
284
- {{ $fromAI('messageText', 'Texto exato que será enviado ao contato no WhatsApp/Digisac.', 'string') }}
285
- ```
313
+ - `Contact Id` (modo **By ID**): o ID vem de uma busca anterior, nunca inventado.
286
314
 
287
- Filtro de período:
315
+ ```javascript
316
+ {{ $fromAI('contactId', 'ID existente de contato Digisac. Deve vir de uma busca/listagem anterior.', 'string') }}
317
+ ```
288
318
 
289
- ```javascript
290
- {{ $fromAI('startPeriod', 'Início do período em ISO-8601, por exemplo 2026-07-01T00:00:00.000Z.', 'string') }}
291
- ```
319
+ - `Type` = `chat` e `Origin` = `bot`: fixe estes dois no próprio campo, sem `$fromAI`.
320
+
321
+ **Buscar estatísticas** (*Estatísticas de atendimento (General)*), nos campos de query:
322
+
323
+ - `Start Period` e `End Period`: o seletor de data da versão 2 aceita a expressão.
292
324
 
293
- Campo de body estruturado:
325
+ ```javascript
326
+ {{ $fromAI('startPeriod', 'Início do período em ISO-8601 com fuso, por exemplo 2026-07-01T00:00:00.000Z.', 'string') }}
327
+ ```
328
+
329
+ - `Department Id` e `User Id`: deixe `all` fixo quando o agente não precisa filtrar.
330
+
331
+ **Campo de body estruturado** (envio de arquivo, `File` em *Body Fields*):
294
332
 
295
333
  ```javascript
296
334
  {{ $fromAI('file', 'Objeto JSON do arquivo com base64, mimetype e name quando a operação Digisac enviar mídia.', 'json') }}
@@ -306,91 +344,99 @@ Campo de body estruturado:
306
344
  - Em mensagens enviadas ao cliente, gere o texto em etapa anterior e passe o texto final para a tool.
307
345
  - 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
346
 
309
- ## Desenvolvimento
347
+ ### Referências
348
+
349
+ - [Tools Agent — n8n Docs](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/tools-agent)
350
+ - [Let AI specify tool parameters (`$fromAI`) — n8n Docs](https://docs.n8n.io/advanced-ai/examples/using-the-fromai-function/)
351
+ - [Variáveis de ambiente de nodes — n8n Docs](https://docs.n8n.io/hosting/configuration/environment-variables/nodes/)
352
+
353
+ ## 🔀 Versão 1 ou 2 do node
354
+
355
+ | | **Versão 1** | **Versão 2 (padrão em node novo)** |
356
+ | --- | --- | --- |
357
+ | IDs | Texto digitado | Lista pesquisável (8 tipos) ou **By ID** (os demais) |
358
+ | Datas | Texto | Seletor de data, enviada em ISO UTC |
359
+ | Valores fixos | Texto | Lista de opções |
360
+ | Workflows salvos | Continuam iguais | Não são alterados |
361
+
362
+ 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.
363
+
364
+ ## 🛠️ Desenvolvimento
310
365
 
311
366
  ```bash
367
+ # Instalar dependências
312
368
  npm install
313
- npm run generate:endpoints
314
- npm run generate:docs
315
- npm run lint
369
+
370
+ # Compilar (n8n-node build: tsc + cópia de ícones)
316
371
  npm run build
317
- npm run dev
318
- ```
319
372
 
320
- Estrutura:
373
+ # Testes (node --test sobre o dist)
374
+ npm test
321
375
 
322
- ```text
323
- n8n-nodes-digisac/
324
- ├── credentials/
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
376
+ # Lint oficial do n8n (n8n-node lint)
377
+ npm run lint
378
+ npm run lint:fix
338
379
  ```
339
380
 
340
- ## Como o catálogo é gerado
341
-
342
- O script `scripts/generate-endpoints.mjs` baixa a coleção pública:
381
+ Estrutura resumida:
343
382
 
344
383
  ```text
345
- https://documenter.getpostman.com/view/53282970/2sBXihpXmF
384
+ n8n-nodes-digisac/
385
+ ├── credentials/ # DigisacApi.credentials.ts
386
+ ├── nodes/Digisac/
387
+ │ ├── actions/ # monta propriedades e executa cada chamada
388
+ │ ├── generated/ # catálogo gerado da coleção Postman
389
+ │ ├── helpers/ # IDs guiados, datas e opções (versão 2)
390
+ │ ├── methods/ # listSearch das listas pesquisáveis
391
+ │ └── transport/ # requisição HTTP com timeout
392
+ ├── scripts/ # geradores do catálogo e dos documentos
393
+ ├── docs/ # api-calls.md (gerado)
394
+ └── test/ # node --test sobre o dist
346
395
  ```
347
396
 
348
- E gera:
397
+ Os geradores são manuais e **não** rodam no build (o primeiro baixa a coleção da rede):
349
398
 
350
- ```text
351
- nodes/Digisac/generated/endpoints.ts
399
+ ```bash
400
+ npm run generate:endpoints # baixa a coleção Postman e regrava o catálogo
401
+ npm run generate:docs # regrava docs/api-calls.md e a tabela de recursos deste README
352
402
  ```
353
403
 
354
- O script `scripts/generate-docs.mjs` lê esse catálogo e gera:
404
+ ## ✅ Compatibilidade
355
405
 
356
- ```text
357
- README.md
358
- docs/api-calls.md
359
- ```
406
+ - Requer n8n com `n8nNodesApiVersion` 1 e uma conta Digisac com token de acesso pessoal.
407
+ - A versão 2 do node é a padrão em node novo; a versão 1 continua disponível para workflows salvos.
360
408
 
361
- ## Publicação no npm
409
+ ## 📚 Recursos
362
410
 
363
- O projeto publica pelo mesmo padrão do node Clinicorp: GitHub Actions + npm provenance.
411
+ - [Documentação Postman da Digisac](https://documenter.getpostman.com/view/53282970/2sBXihpXmF)
412
+ - [Documentação de community nodes do n8n](https://docs.n8n.io/integrations/community-nodes/)
413
+ - [n8n: `$fromAI()`](https://docs.n8n.io/build/integrate-ai/ai-examples/use-ai-for-parameters/)
364
414
 
365
- Para publicar nova versão:
415
+ ## 🚀 Publicação
366
416
 
367
- ```bash
368
- npm version patch
369
- git push origin main --tags
370
- ```
417
+ 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
418
 
372
- O workflow executa:
419
+ ## 📈 Versões
373
420
 
374
- ```bash
375
- npm ci --ignore-scripts
376
- npm run build
377
- npm publish --provenance --access public
378
- ```
421
+ - **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`.
422
+ - **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.
423
+ - **1.0.2** — Interface simplificada: query e body com campos dedicados gerados da documentação. JSON fica em opções avançadas.
424
+ - **1.0.1** — Documentação em PT-BR, exemplos, instruções de AI Tool e catálogo em `docs/api-calls.md`.
425
+ - **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
426
 
380
- ## Versões
427
+ ## 🆘 Suporte
381
428
 
382
- - **1.0.3** — Descrições de AI Tool reforçadas: regra genérica para campos `Id/Ids`, alertas para placeholders, orientação Popular vs General, avisos por tipo de campo de body/query e exemplo de arquivo corrigido.
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.
429
+ Se algo não funcionar:
386
430
 
387
- ## Referências
431
+ 1. Confirme a **Base URL** e o **token** da credencial (o teste da credencial chama `GET /api/v1/me`).
432
+ 2. Verifique se a versão do n8n é compatível.
433
+ 3. Consulte os logs do n8n para o erro detalhado.
434
+ 4. Abra uma [issue no GitHub](https://github.com/PedroHSGuimaraes/n8n-nodes-digisac/issues).
388
435
 
389
- - [Documentação Postman da Digisac](https://documenter.getpostman.com/view/53282970/2sBXihpXmF)
390
- - [n8n: building community nodes](https://docs.n8n.io/integrations/community-nodes/building-community-nodes/)
391
- - [n8n: programmatic node tutorial](https://docs.n8n.io/connect/create-nodes/build-your-node/tutorial-build-a-programmatic-style-node/)
392
- - [n8n: `$fromAI()`](https://docs.n8n.io/build/integrate-ai/ai-examples/use-ai-for-parameters/)
436
+ ## ☕ Apoie o projeto
437
+
438
+ 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
439
 
394
- ## Licença
440
+ ## 📄 Licença
395
441
 
396
442
  [MIT](LICENSE.md)
@@ -1,5 +1,17 @@
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
+ searchContacts: (this: import("n8n-workflow").ILoadOptionsFunctions, filter?: string, paginationToken?: unknown) => Promise<import("n8n-workflow").INodeListSearchResult>;
7
+ searchServices: (this: import("n8n-workflow").ILoadOptionsFunctions, filter?: string, paginationToken?: unknown) => Promise<import("n8n-workflow").INodeListSearchResult>;
8
+ searchDepartments: (this: import("n8n-workflow").ILoadOptionsFunctions, filter?: string, paginationToken?: unknown) => Promise<import("n8n-workflow").INodeListSearchResult>;
9
+ searchUsers: (this: import("n8n-workflow").ILoadOptionsFunctions, filter?: string, paginationToken?: unknown) => Promise<import("n8n-workflow").INodeListSearchResult>;
10
+ searchTags: (this: import("n8n-workflow").ILoadOptionsFunctions, filter?: string, paginationToken?: unknown) => Promise<import("n8n-workflow").INodeListSearchResult>;
11
+ searchRoles: (this: import("n8n-workflow").ILoadOptionsFunctions, filter?: string, paginationToken?: unknown) => Promise<import("n8n-workflow").INodeListSearchResult>;
12
+ searchBots: (this: import("n8n-workflow").ILoadOptionsFunctions, filter?: string, paginationToken?: unknown) => Promise<import("n8n-workflow").INodeListSearchResult>;
13
+ searchTicketTopics: (this: import("n8n-workflow").ILoadOptionsFunctions, filter?: string, paginationToken?: unknown) => Promise<import("n8n-workflow").INodeListSearchResult>;
14
+ };
15
+ };
4
16
  execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
5
17
  }
@@ -3,6 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Digisac = void 0;
4
4
  const n8n_workflow_1 = require("n8n-workflow");
5
5
  const actions_1 = require("./actions");
6
+ const resourceLocator_1 = require("./helpers/resourceLocator");
7
+ const listSearch_1 = require("./methods/listSearch");
8
+ const defaultResource = actions_1.resourceOptions[0]?.value?.toString() ?? '';
6
9
  class Digisac {
7
10
  constructor() {
8
11
  this.description = {
@@ -10,7 +13,8 @@ class Digisac {
10
13
  name: 'digisac',
11
14
  icon: { light: 'file:digisac.png', dark: 'file:digisac.dark.png' },
12
15
  group: ['transform'],
13
- version: 1,
16
+ version: [1, 2],
17
+ defaultVersion: 2,
14
18
  subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
15
19
  description: 'Use every documented Digisac API request from the public Postman documentation. Choose a resource folder and operation, fill required path parameters and use the generated query/body fields first. Advanced JSON fields are available only when an operation needs a custom payload or unsupported filter. Built for AI Agents: operation descriptions include method, path, source folder, required path variables, query guidance, body fields and explicit reminders to use IDs returned by Digisac instead of inventing values.',
16
20
  defaults: {
@@ -20,7 +24,7 @@ class Digisac {
20
24
  outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
21
25
  usableAsTool: {
22
26
  replacements: {
23
- description: 'Ferramenta para executar chamadas documentadas da API Digisac dentro do n8n. Use somente para tarefas de Digisac, como consultar, criar ou alterar contatos, chamados, mensagens, campanhas, conexoes, departamentos, usuarios, tags, templates, webhooks, relatorios e estatisticas. Primeiro escolha Resource e Operation; a Operation informa metodo HTTP, endpoint, origem na documentacao, parametros obrigatorios, query e body. Nunca invente IDs: qualquer campo terminado em Id ou Ids deve vir de busca/listagem anterior, entrada confirmada do usuario ou valor sentinela documentado como all. Preencha campos dedicados de path, query e Campos do Body; deixe campos vazios quando nao souber. Nao copie placeholders da documentacao como {{contactId}} ou {{all/open/close}}; substitua por valor real ou escolha uma opcao valida. Use Query Avancada JSON ou Body JSON Avancado apenas quando nao existir campo dedicado suficiente. Antes de enviar mensagem, excluir, arquivar, bloquear, fechar chamado, transferir chamado ou alterar dados, confirme que a intencao do usuario esta explicita.',
27
+ description: 'Ferramenta para executar chamadas documentadas da API Digisac dentro do n8n. Use somente para tarefas de Digisac, como consultar, criar ou alterar contatos, chamados, mensagens, campanhas, conexoes, departamentos, usuarios, tags, templates, webhooks, relatorios e estatisticas. Primeiro escolha Resource e Operation; a Operation informa metodo HTTP, endpoint, origem na documentacao, parametros obrigatorios, query e body. Nunca invente IDs: qualquer campo terminado em Id ou Ids deve vir de busca/listagem anterior, entrada confirmada do usuario ou valor sentinela documentado como all. Preencha campos dedicados de path, query e Body Fields; deixe campos vazios quando nao souber. Nao copie placeholders da documentacao como {{contactId}} ou {{all/open/close}}; substitua por valor real ou escolha uma opcao valida. Use Query Avancada JSON ou Body JSON Avancado apenas quando nao existir campo dedicado suficiente. Antes de enviar mensagem, excluir, arquivar, bloquear, fechar chamado, transferir chamado ou alterar dados, confirme que a intencao do usuario esta explicita.',
24
28
  },
25
29
  },
26
30
  credentials: [
@@ -36,12 +40,13 @@ class Digisac {
36
40
  type: 'options',
37
41
  noDataExpression: true,
38
42
  options: actions_1.resourceOptions,
39
- default: actions_1.resourceOptions[0]?.value ?? '',
43
+ default: defaultResource,
40
44
  description: 'Area da API Digisac agrupada pela documentacao Postman. Resources Popular sao atalhos para operacoes frequentes; resources General contem o catalogo mais completo. Se a mesma chamada existir em Popular e General, prefira Popular para fluxos comuns e General quando precisar de uma chamada que nao existe no Popular.',
41
45
  },
42
- ...actions_1.resourceProperties,
46
+ ...(0, resourceLocator_1.withGuidedIds)(actions_1.resourceProperties),
43
47
  ],
44
48
  };
49
+ this.methods = { listSearch: listSearch_1.listSearch };
45
50
  }
46
51
  async execute() {
47
52
  const items = this.getInputData();
@@ -1 +1 @@
1
- {"version":3,"file":"Digisac.node.js","sourceRoot":"","sources":["../../../nodes/Digisac/Digisac.node.ts"],"names":[],"mappings":";;;AAOA,+CAAuE;AAEvE,uCAAiF;AAEjF,MAAa,OAAO;IAApB;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,SAAS;YACtB,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,uBAAuB,EAAE;YAClE,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,8DAA8D;YACxE,WAAW,EACV,ugBAAugB;YACxgB,QAAQ,EAAE;gBACT,IAAI,EAAE,SAAS;aACf;YACD,MAAM,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YAClC,OAAO,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YACnC,YAAY,EAAE;gBACb,YAAY,EAAE;oBACb,WAAW,EACV,wjCAAwjC;iBACzjC;aACD;YACD,WAAW,EAAE;gBACZ;oBACC,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,IAAI;iBACd;aACD;YACD,UAAU,EAAE;gBACX;oBACC,WAAW,EAAE,UAAU;oBACvB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE,yBAAe;oBACxB,OAAO,EAAE,yBAAe,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE;oBACxC,WAAW,EACV,6TAA6T;iBAC9T;gBACD,GAAG,4BAAkB;aACrB;SACD,CAAC;IA+BH,CAAC;IA7BA,KAAK,CAAC,OAAO;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,UAAU,GAAyB,EAAE,CAAC;QAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC;gBACJ,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAW,CAAC;gBAClE,MAAM,YAAY,GAAG,MAAM,yBAAe,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;gBACpE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;gBAE5E,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAC5D,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,OAAwB,CAAC,EACtD,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CACzB,CAAC;gBACF,UAAU,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC3B,UAAU,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE;wBACzC,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;qBACvB,CAAC,CAAC;oBACH,SAAS;gBACV,CAAC;gBACD,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAc,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;YAChF,CAAC;QACF,CAAC;QAED,OAAO,CAAC,UAAU,CAAC,CAAC;IACrB,CAAC;CACD;AAvED,0BAuEC"}
1
+ {"version":3,"file":"Digisac.node.js","sourceRoot":"","sources":["../../../nodes/Digisac/Digisac.node.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { IExecuteFunctions, INodeProperties, INodePropertyOptions } from 'n8n-workflow';
1
+ import type { IDataObject, IExecuteFunctions, INodeProperties, INodePropertyOptions } from 'n8n-workflow';
2
2
  export declare const resourceOptions: INodePropertyOptions[];
3
3
  export declare const resourceProperties: INodeProperties[];
4
- export declare function executeEndpoint(this: IExecuteFunctions, operation: string, i: number): Promise<any>;
4
+ export declare function executeEndpoint(this: IExecuteFunctions, operation: string, i: number): Promise<IDataObject | IDataObject[]>;