Nó da comunidade n8n
O nó de compartilhamento de documentos para quem lê o código-fonte
O n8n-nodes-everypage transforma qualquer PDF do seu fluxo em um link de compartilhamento rastreado: binário de entrada, URL de compartilhamento + QR + embed de saída, e gatilhos instantâneos com verificação HMAC no momento em que os documentos são lidos. Os nós de AI Agent podem usar tudo isso como uma ferramenta tipada.
Como o nó funciona.
Um nó, três recursos - Arquivo, Variante de link e Evento - mais um nó gatilho que assina a atividade de leitura. Os nomes dos campos são os mesmos dos apps do EveryPage no Zapier e no Make, então os fluxos podem ser migrados entre plataformas sem reaprender nada.
- 1
Instale o nó da comunidade
Em um n8n self-hosted: Settings -> Community Nodes -> instale o n8n-nodes-everypage (ou execute npm install dele em ~/.n8n/nodes). O pacote não tem dependências de runtime, um requisito de nó da comunidade verificado, então o que você instala é exatamente o que pode ler.
- 2
Conecte com uma chave de API
Crie uma chave na sua página de conta (Conta -> Chaves de API - ela começa com ep_live_) e cole em uma nova credencial de API do EveryPage. O nó a valida na API imediatamente, e o campo Base URL só muda quando você aponta para um ambiente de staging.
- 3
Conecte ao fluxo
Passe ao nó os dados binários de uma etapa anterior e ele devolve o trio de compartilhamento - link, QR Code, código de embed - para as etapas seguintes. Ative um gatilho e a assinatura do webhook é registrada automaticamente; desative e ela é removida. Não há nada para configurar no servidor.
Por dentro
Toda entrega verificada
Os gatilhos instantâneos chegam por webhooks assinados com HMAC-SHA256, e o nó verifica cada um - comparação de assinatura em tempo constante e tolerância de cinco minutos contra replay - antes de o seu fluxo rodar. Entregas não verificadas são rejeitadas com um 401.
Nativo para binários
Os PDFs trafegam como dados binários do n8n - sem o vai-e-vem de enviar por URL. Um agente, um nó de Código ou uma etapa de download entrega os bytes; o QR Code volta do mesmo jeito, como PNG pronto para impressão e fluxos de mesclagem.
Feito para quem hospeda o próprio n8n
Um modo de polling de fallback com cursores independentes por stream cobre instâncias que não conseguem receber webhooks de entrada, o código-fonte sob licença MIT permite ler exatamente o que roda, e a parte de multipart e HMAC usa apenas módulos nativos do Node.
Análises que o seu DPO vai aprovar
A leitura é medida sem cookies, e os endereços IP dos leitores nunca são armazenados - cada leitor recebe uma identidade pseudônima com sal. Se você hospeda seus fluxos porque se importa com onde os dados ficam, é a mesma preocupação aplicada às análises de documentos.
Gatilhos: quando isso acontece no EveryPage.
O nó gatilho do EveryPage assina dez tipos de evento por webhooks assinados - enviados no momento em que acontecem - com um fallback de polling para redes fechadas. Você pode limitar qualquer assinatura a um único documento.
Documento lido
InstantâneoUm leitor terminou de ver um documento - com páginas vistas, tempo gasto, país e atribuição à variante de link.
Download
InstantâneoUm leitor (não você) salvou uma cópia. Registre, pontue ou faça um acompanhamento.
Preenchimento de formulário / captura pelo bloqueio por e-mail
Instantâneo · ProUm visualizador concluiu o bloqueio por e-mail ou o formulário de lead - cada campo capturado chega pronto para ser tratado e encaminhado, enquanto o lead ainda está lendo.
Comentários e confirmações
InstantâneoUm leitor deixou um feedback no documento ou confirmou o recebimento - o feedback é encaminhado enquanto ele ainda está na página, e a confirmação serve como prova de entrega para a trilha de auditoria.
Eventos de ciclo de vida
InstantâneoUm link esgotou o limite de visualizações, o conteúdo foi substituído por trás de um link, um convite foi visto, uma seleção de revisão mudou - os eventos de manutenção que mantêm os sistemas downstream consistentes.
Modo de polling
FallbackPara instâncias que não conseguem receber webhooks de entrada: percorre o feed de eventos no seu agendamento, com cursores independentes por stream e IDs de evento com namespace - nada dispara duas vezes, nada se perde.
Operações: um nó, a API inteira.
Recursos de Arquivo, Variante de link e Evento, com campos tipados e sensíveis ao plano. Toda operação que gera um arquivo devolve o trio de compartilhamento - link, URL do QR, código de embed - vinculado a identificadores duráveis, nunca a um slug que pode ser renomeado.
Enviar
PDF binário de entrada, link rastreado de saída - com toda a área de configurações conforme o plano: modo de visualização, senha, expiração ou sem expiração, bloqueio por e-mail, slug personalizado, marca d’água, limite de visualizações, intervalo de páginas, opções de proteção e notificações.
Importar a partir de URL
O nó busca um PDF a partir de uma URL por conta própria - sem as suas credenciais do EveryPage anexadas - e o envia.
Obter / Obter vários / Atualizar configurações
Busca um documento ou lista todos (UUID ou ID curto), e altera qualquer conjunto de configurações no lugar - apenas as opções que você incluir são enviadas.
Substituir conteúdo
ProTroca o PDF por trás de um link - UUID, ID curto, slug, QR, configurações e histórico de leitura são preservados.
Obter QR Code
O QR Code rastreado como PNG binário, pronto para impressão e fluxos de mesclagem.
Obter leitura
O relatório de análises conforme o plano - resumo, funil, sessões, contatos - como JSON para o próximo nó.
Variantes de link
ProCrie, liste, atualize, revogue e exclua links rastreados por destinatário - um documento, leitura por pessoa, incluindo a redação de rótulos conforme o GDPR.
Eventos: obter vários
Puxa em lote do feed de eventos - visualização, download, bloqueio - com um cursor since e paginação Return All, feito para cargas incrementais em data warehouse.
Excluir
Vai para a lixeira por padrão - restaurável até a data de purga, com recibo - ou purga de forma permanente.
Dê ao seu agente um documento cuja leitura ele consegue comprovar.
O nó vem com usableAsTool, então os nós AI Agent do n8n podem chamar o EveryPage diretamente como uma ferramenta tipada: "envie este relatório e me devolva o link rastreado", "quem leu a proposta do terceiro trimestre?". Um agente que publica o trabalho como link rastreado - em vez de anexo - é um agente cujo resultado você consegue auditar.
Agendamento → AI Agent → Código → EveryPage → Slack
Importe este fluxo: relatório de IA → link rastreado → Slack
Toda segunda-feira um agente de IA escreve o relatório semanal, um nó de Código sem dependências o converte em PDF, o EveryPage devolve um link rastreado, e o Slack recebe o link - assim você descobre se alguém leu o que o agente produziu. Copie o JSON e cole-o diretamente no canvas do n8n (Ctrl/Cmd-V), ou use Workflow -> Import from Clipboard.
{
"name": "AI report → EveryPage tracked link",
"nodes": [
{
"parameters": {
"content": "## AI report → tracked link\nEvery Monday an AI agent writes the weekly ops report, a Code node renders it to a PDF (no dependencies), and EveryPage turns it into a **tracked share link** — so you know whether anyone actually read what the agent produced.\n\nSwap the Slack step for email, Teams, or your CRM. Add `requireEmail: true` in the EveryPage node's options to gate the report (Pro).",
"height": 260,
"width": 420
},
"id": "a1b2c3d4-0000-4000-8000-000000000001",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [-220, -180]
},
{
"parameters": {
"rule": {
"interval": [{ "field": "weeks", "triggerAtDay": [1], "triggerAtHour": 8 }]
}
},
"id": "a1b2c3d4-0000-4000-8000-000000000002",
"name": "Every Monday 08:00",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [-220, 60]
},
{
"parameters": {
"promptType": "define",
"text": "Write this week's operations report for the team: a short executive summary, then sections for shipped work, metrics, risks, and next week's focus. Plain text, no markdown syntax. Around 500 words.",
"options": {}
},
"id": "a1b2c3d4-0000-4000-8000-000000000003",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 1.7,
"position": [0, 60]
},
{
"parameters": {
"model": { "__rl": true, "value": "gpt-4.1-mini", "mode": "list" },
"options": {}
},
"id": "a1b2c3d4-0000-4000-8000-000000000004",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.2,
"position": [0, 260]
},
{
"parameters": {
"mode": "runOnceForAllItems",
"jsCode": "// Render plain text to a minimal, valid, multi-page PDF - no dependencies.\nconst esc = (s) => s.replace(/\\\\/g, '\\\\\\\\').replace(/\\(/g, '\\\\(').replace(/\\)/g, '\\\\)');\nconst text = String($input.first().json.output ?? $input.first().json.text ?? 'Empty report');\n\nconst lines = [];\nfor (const raw of text.split('\\n')) {\n let line = raw.replace(/[^\\x20-\\x7e]/g, '');\n if (line === '') { lines.push(''); continue; }\n while (line.length > 92) { lines.push(line.slice(0, 92)); line = line.slice(92); }\n lines.push(line);\n}\nconst pages = [];\nfor (let i = 0; i < lines.length; i += 46) pages.push(lines.slice(i, i + 46));\nif (!pages.length) pages.push(['(empty)']);\n\nconst pageCount = pages.length;\nconst fontObj = 3 + pageCount * 2;\nconst objects = [];\nobjects[1] = '<< /Type /Catalog /Pages 2 0 R >>';\nobjects[2] = `<< /Type /Pages /Kids [${pages.map((_, p) => `${3 + p * 2} 0 R`).join(' ')}] /Count ${pageCount} >>`;\npages.forEach((pg, p) => {\n const contentObj = 4 + p * 2;\n objects[3 + p * 2] = `<< /Type /Page /Parent 2 0 R /MediaBox [0 0 595 842] /Resources << /Font << /F1 ${fontObj} 0 R >> >> /Contents ${contentObj} 0 R >>`;\n let stream = 'BT /F1 11 Tf 56 780 Td 16 TL\\n';\n for (const line of pg) stream += `(${esc(line)}) Tj T*\\n`;\n stream += 'ET';\n objects[contentObj] = `<< /Length ${stream.length} >>\\nstream\\n${stream}\\nendstream`;\n});\nobjects[fontObj] = '<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>';\n\nlet pdf = '%PDF-1.4\\n';\nconst offsets = [];\nfor (let n = 1; n <= fontObj; n++) {\n offsets[n] = pdf.length;\n pdf += `${n} 0 obj\\n${objects[n]}\\nendobj\\n`;\n}\nconst xref = pdf.length;\npdf += `xref\\n0 ${fontObj + 1}\\n0000000000 65535 f \\n`;\nfor (let n = 1; n <= fontObj; n++) pdf += `${String(offsets[n]).padStart(10, '0')} 00000 n \\n`;\npdf += `trailer\\n<< /Size ${fontObj + 1} /Root 1 0 R >>\\nstartxref\\n${xref}\\n%%EOF`;\n\nconst fileName = `weekly-report-${new Date().toISOString().slice(0, 10)}.pdf`;\nconst binaryData = await this.helpers.prepareBinaryData(Buffer.from(pdf, 'latin1'), fileName, 'application/pdf');\nreturn [{ json: { fileName }, binary: { data: binaryData } }];"
},
"id": "a1b2c3d4-0000-4000-8000-000000000005",
"name": "Render PDF",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [280, 60]
},
{
"parameters": {
"resource": "file",
"operation": "upload",
"binaryPropertyName": "data",
"fileName": "={{ $json.fileName }}",
"options": {
"viewerMode": "flipbook",
"notifyOnView": true,
"expiryHours": 168
}
},
"id": "a1b2c3d4-0000-4000-8000-000000000006",
"name": "EveryPage",
"type": "n8n-nodes-everypage.everyPage",
"typeVersion": 1,
"position": [560, 60]
},
{
"parameters": {
"select": "channel",
"text": "=📄 This week's report is live: {{ $json.shareUrl }}\nEveryPage will tell us who actually reads it.",
"otherOptions": {}
},
"id": "a1b2c3d4-0000-4000-8000-000000000007",
"name": "Post link to Slack",
"type": "n8n-nodes-base.slack",
"typeVersion": 2.2,
"position": [840, 60]
}
],
"connections": {
"Every Monday 08:00": { "main": [[{ "node": "AI Agent", "type": "main", "index": 0 }]] },
"AI Agent": { "main": [[{ "node": "Render PDF", "type": "main", "index": 0 }]] },
"OpenAI Chat Model": {
"ai_languageModel": [[{ "node": "AI Agent", "type": "ai_languageModel", "index": 0 }]]
},
"Render PDF": { "main": [[{ "node": "EveryPage", "type": "main", "index": 0 }]] },
"EveryPage": { "main": [[{ "node": "Post link to Slack", "type": "main", "index": 0 }]] }
},
"active": false,
"settings": { "executionOrder": "v1" },
"pinData": {}
}
Nota para self-hosted: as ferramentas de nós da comunidade precisam de N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true antes que os nós AI Agent possam chamá-las.
Feito para quem constrói com n8n.
Quatro fluxos com os quais o nó funciona desde o primeiro dia.
Operações self-hosted
Eventos no seu data warehouse, sem intermediário
Events: Get Many percorre o feed com um cursor since e envia para Postgres ou BigQuery - o engajamento com documentos entra na sua própria stack de análises, sem nenhuma nuvem de terceiros no meio.
Criadores de agentes de IA
Relatórios que comprovam que foram lidos
O agente publica o relatório como link rastreado em vez de anexo - você é avisado na primeira leitura, e o relatório de leitura mostra até onde cada pessoa realmente chegou.
Leads com bloqueio → CRM
Leads no CRM enquanto leem
Um gatilho instantâneo de preenchimento de formulário trata os campos capturados e os encaminha para o time de vendas - o fluxo de leads com bloqueio para CRM, pronto para importar, vem junto com o nó.
Agentes de chat
Um agente que responde "quem leu?"
Adicione as operações do EveryPage como ferramentas de um agente de chat e ele consegue listar seus documentos e buscar a leitura sob demanda - o fluxo de agente com ferramenta do EveryPage mostra o padrão.
O que cada plano libera.
O nó é gratuito para instalar e conecta em todos os planos do EveryPage. Os campos acima do seu plano dizem isso na descrição e apontam para a página de preços; se uma execução cair em um bloqueio do lado do servidor mesmo assim, o erro informa o plano - nunca um 403 seco.
| No nó do n8n | Grátis | Basic | Pro |
|---|---|---|---|
| Gatilhos de leitura, download, comentário, confirmação e ciclo de vida - webhook e polling | ✓ | ✓ | ✓ |
| Operações de Enviar, Importar, Obter/Listar, Atualizar configurações, QR, Leitura, Eventos e Excluir | ✓ | ✓ | ✓ |
| Opções de proteção no envio (bloquear clique direito, impressão, cópia) | — | ✓ | ✓ |
| Gatilho de preenchimento de formulário / captura pelo bloqueio por e-mail | — | — | ✓ |
| Operações de Variantes de link e Substituir conteúdo | — | — | ✓ |
Perguntas sobre o n8n.
O que posso automatizar com o nó do EveryPage para n8n?
As duas direções de um fluxo de documentos. As operações transformam qualquer PDF binário de um fluxo em um link de compartilhamento rastreado com códigos QR e de embed, gerenciam configurações e variantes de link por destinatário, substituem o conteúdo por trás de links ativos e exportam em lote os eventos de leitura para o seu data warehouse. O nó gatilho inicia fluxos no momento em que um documento é lido, baixado, comentado, confirmado, protegido por bloqueio ou esgotado - por webhooks verificados ou por um fallback de polling.
O EveryPage é uma alternativa ao DocSend com integração com o n8n?
Sim - o DocSend não tem nenhum nó para n8n. Se você quer rastreamento de documentos no estilo DocSend que fique dentro dos seus próprios fluxos, o EveryPage cobre isso com um nó nativo para binários, gatilhos instantâneos verificados e análises compatíveis com o GDPR que não armazenam endereços IP de leitores - por um preço fixo, em vez de cobrança por usuário.
Os gatilhos são instantâneos - e os webhooks são verificados?
Instantâneos por padrão: ativar o gatilho registra uma assinatura de webhook, e os eventos são enviados no momento em que acontecem. Toda entrega é verificada - assinatura HMAC-SHA256, comparação em tempo constante, tolerância de cinco minutos contra replay - e entregas não verificadas são rejeitadas com um 401. Para instâncias que não conseguem receber webhooks de entrada, o modo polling percorre o feed de eventos com cursores por stream, então nada dispara duas vezes e nada se perde.
Como os nós AI Agent do n8n usam o EveryPage?
O nó está marcado como usableAsTool, então os nós AI Agent podem chamar suas operações como ferramentas tipadas - enviar um relatório gerado e devolver o link rastreado, consultar quem leu um documento, buscar um resumo de leitura. Em um n8n self-hosted, defina N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true; os fluxos importáveis desta página e do pacote mostram configurações de agentes que funcionam.
Posso instalar no n8n Cloud - e de que planos eu preciso?
Primeiro para self-hosted: o pacote é o n8n-nodes-everypage e é instalado pelo painel de Community Nodes assim que estiver disponível no npm - a publicação está em andamento, junto com a verificação de nós da comunidade do n8n para disponibilidade no Cloud. A API que o nó usa já está disponível hoje em todos os planos do EveryPage (veja a documentação para desenvolvedores). Quanto aos planos, tudo conecta de graça; o gatilho de preenchimento de formulário, as Variantes de link e a Substituição de conteúdo são Pro, porque os recursos do produto que eles acionam são Pro.
Os links rastreados precisam expirar?
Não - a expiração é um controle que você define por documento, nunca um padrão. Dê ao link uma data de expiração, um limite de visualizações ou nenhum dos dois - sem nenhum dos dois, o link nunca expira, então o link que o seu fluxo publicou continua funcionando pelo tempo que você quiser. Os fluxos também podem gerenciar a expiração sozinhos, pela Atualização de configurações.
Coloque um link rastreado no fim de todo fluxo.
Instale o nó, cole uma chave de API, e o próximo documento que o seu fluxo produzir vai te dizer se alguém o leu - página por página, por um webhook que você pode verificar.
Compare os planosRelacionados: todas as integrações · a integração com o Make · webhooks brutos · a alternativa ao DocSend · compartilhar PDFs sem armazenar IPs · receitas de automação