Nodo comunitario de n8n
El nodo de compartición de documentos para gente que lee el código fuente
n8n-nodes-everypage convierte cualquier PDF de tu flujo en un enlace rastreado: binario dentro, URL + QR + incrustación fuera, disparadores instantáneos verificados con HMAC en cuanto los documentos se leen - y los nodos AI Agent pueden manejarlo todo como una herramienta tipada.
Cómo funciona el nodo.
Un nodo, tres recursos - File, Link Variant y Event - más un nodo disparador que se suscribe a la actividad de los lectores. Los nombres de campos coinciden con las apps de EveryPage para Zapier y Make, así que los flujos se traducen entre plataformas sin reaprender nada.
- 1
Instala el nodo comunitario
En n8n autoalojado: Settings -> Community Nodes -> instala n8n-nodes-everypage (o instálalo con npm en ~/.n8n/nodes). El paquete no tiene dependencias en tiempo de ejecución - un requisito de los nodos comunitarios verificados - así que lo que instalas es exactamente lo que puedes leer.
- 2
Conecta con una clave API
Crea una clave en tu página de cuenta (Cuenta -> Claves API - empieza por ep_live_) y pégala en una nueva credencial EveryPage API. El nodo la valida contra la API de inmediato, y el campo Base URL solo cambia cuando apuntas a un despliegue de staging.
- 3
Conéctalo al flujo
Pásale al nodo datos binarios desde cualquier paso anterior y devuelve el trío de compartición - enlace, código QR, código de incrustación - para los pasos siguientes. Activa un disparador y la suscripción de webhook se registra sola; desactívalo y se elimina. Nada que configurar en un servidor.
Bajo el capó
Cada entrega verificada
Los disparadores instantáneos llegan por webhooks firmados con HMAC-SHA256, y el nodo verifica cada uno - comparación de firma en tiempo constante con una tolerancia de repetición de cinco minutos - antes de que tu flujo se ejecute. Las entregas no verificadas se rechazan con un 401.
Nativo en binario
Los PDFs viajan como datos binarios de n8n - sin el rodeo de subir por URL. Un agente, un nodo Code o un paso de descarga entrega los bytes; el código QR vuelve de la misma forma, como un PNG listo para flujos de impresión y combinación.
Hecho para autoalojadores
Un modo de sondeo de respaldo con cursores independientes por flujo cubre las instancias que no pueden recibir webhooks entrantes, el código con licencia MIT significa que puedes leer exactamente lo que se ejecuta, y la fontanería multipart y HMAC no usa más que módulos integrados de Node.
Analíticas que tu DPO aprobará sin pestañear
La lectura se mide sin cookies y las direcciones IP de los lectores nunca se almacenan - cada lector recibe una identidad seudónima con sal. Si autoalojas tus flujos porque te importa dónde viven los datos, esto es el mismo instinto aplicado a las analíticas de documentos.
Disparadores: cuando esto ocurre en EveryPage.
El nodo EveryPage Trigger se suscribe a nueve tipos de evento por webhooks firmados - empujados en el momento en que ocurren - con un modo de sondeo de respaldo para redes cerradas. Opcionalmente, limita cualquier suscripción a un solo documento.
Documento leído
InstantáneoUn lector terminó de ver un documento - con páginas vistas, tiempo dedicado, país y atribución de variante de enlace.
Descarga
InstantáneoUn lector (no tú) guardó una copia. Regístralo, puntúalo o haz seguimiento.
Formulario / captura de puerta de email
Instantáneo · ProUn visitante completó la puerta de email o el formulario de leads - cada campo capturado llega listo para dar forma y reenviar, mientras el lead sigue leyendo.
Comentarios y acuses de recibo
InstantáneoUn lector dejó comentarios en el documento o confirmó su recepción - feedback enrutado mientras sigue en la página, prueba de entrega para el registro de auditoría.
Eventos de ciclo de vida
InstantáneoUn enlace agotó su presupuesto de vistas, se reemplazó el contenido detrás de un enlace, se vio una invitación, cambió una selección de proofing - los eventos de mantenimiento que mantienen honestos a los sistemas aguas abajo.
Modo sondeo
RespaldoPara instancias que no pueden recibir webhooks entrantes: recorre el feed de eventos según tu horario con cursores independientes por flujo e IDs de evento con espacio de nombres - nada se dispara dos veces, nada se pierde.
Operaciones: un nodo, toda la API.
Recursos File, Link Variant y Event con campos tipados y conscientes del plan. Cada operación que produce un archivo devuelve el trío de compartición - enlace, URL del QR, código de incrustación - anclado a identificadores duraderos, nunca a un slug renombrable.
Upload
PDF binario dentro, enlace rastreado fuera - con toda la superficie de ajustes por plan: modo de visor, código de acceso, expiración o sin caducidad, puerta de email, slug personalizado, marca de agua, límite de vistas, rango de páginas, interruptores de protección, notificaciones.
Import From URL
El nodo descarga un PDF desde una URL por sí mismo - sin adjuntar tus credenciales de EveryPage - y lo sube.
Get / Get Many / Update Settings
Obtén un documento o lístalos todos (UUID o ID corto), y cambia cualquier subconjunto de ajustes en el sitio - solo se envían las opciones que añades.
Replace Content
ProCambia el PDF detrás de un enlace - el UUID, el ID corto, el slug, el QR, los ajustes y el historial de lectura sobreviven.
Get QR Code
El código QR con seguimiento como PNG binario, listo para flujos de impresión y combinación.
Get Readership
El informe de analíticas según tu plan - resumen, embudo, sesiones, contactos - como JSON para el siguiente nodo.
Link Variants
ProCrea, lista, actualiza, revoca y elimina enlaces rastreados por destinatario - un documento, lectura por persona, con redacción de etiquetas para el RGPD incluida.
Events: Get Many
Extracciones masivas del feed de eventos - vistas, descargas, puertas - con cursor since y paginación Return All, pensado para cargas incrementales de almacén de datos.
Delete
A la papelera por defecto - restaurable hasta la fecha de purga, con recibo incluido - o purga permanente.
Dale a tu agente un documento que pueda demostrar que fue leído.
El nodo se publica con usableAsTool, así que los nodos AI Agent de n8n pueden llamar a EveryPage directamente como herramienta tipada: "sube este informe y dame el enlace rastreado", "¿quién leyó la propuesta del Q3?". Un agente que publica su trabajo como enlace rastreado - en vez de como adjunto - es un agente cuyo resultado puedes auditar.
Programación → AI Agent → Code → EveryPage → Slack
Importa este flujo: informe de IA → enlace rastreado → Slack
Cada lunes un agente de IA escribe el informe semanal, un nodo Code sin dependencias lo convierte en PDF, EveryPage devuelve un enlace rastreado y Slack recibe el enlace - así descubres si alguien leyó lo que produjo el agente. Copia el JSON y pégalo directamente en el lienzo de n8n (Ctrl/Cmd-V), o usa 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 autoalojados: las herramientas de nodos comunitarios necesitan N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true antes de que los nodos AI Agent puedan llamarlas.
Hecho para la gente que construye con n8n.
Cuatro flujos que el nodo asume desde el primer día.
Ops autoalojadas
Eventos a tu almacén de datos, sin intermediarios
Events: Get Many pagina el feed con un cursor since hacia Postgres o BigQuery - la interacción con documentos se une a tu propia pila de analíticas, sin una nube de terceros en medio.
Constructores de agentes IA
Informes que demuestran haber sido leídos
El agente publica su informe como enlace rastreado en vez de adjunto - recibes aviso en la primera lectura, y el informe de lectura dice hasta dónde llegó realmente cada uno.
Leads con puerta → CRM
Leads en el CRM mientras leen
Un disparador instantáneo de formulario da forma a los campos capturados y los reenvía a ventas - el flujo importable gated-leads-to-crm acompaña al nodo.
Agentes de chat
Un agente que responde "¿quién lo leyó?"
Adjunta operaciones de EveryPage como herramientas a un agente de chat y podrá listar tus documentos y consultar la lectura bajo demanda - el flujo agent-with-everypage-tool muestra el patrón.
Qué desbloquea cada plan.
El nodo es gratuito de instalar y se conecta en todos los planes de EveryPage. Los campos por encima de tu nivel lo dicen en su descripción y enlazan la página de precios; si una ejecución tropieza igualmente con una puerta del servidor, el error nombra el plan - nunca un 403 pelado.
| En el nodo de n8n | Gratis | Basic | Pro |
|---|---|---|---|
| Disparadores de lectura, descarga, comentario, recibo y ciclo de vida - webhook y sondeo | ✓ | ✓ | ✓ |
| Operaciones Upload, Import, Get/List, Update Settings, QR, Readership, Events y Delete | ✓ | ✓ | ✓ |
| Interruptores de protección al subir (bloquear clic derecho, impresión, copia) | — | ✓ | ✓ |
| Disparador de formulario / captura de puerta de email | — | — | ✓ |
| Operaciones Link Variants y Replace Content | — | — | ✓ |
Preguntas sobre n8n.
¿Qué puedo automatizar con el nodo de EveryPage para n8n?
Ambas direcciones de un flujo documental. Las operaciones convierten cualquier PDF binario del flujo en un enlace rastreado con códigos QR y de incrustación, gestionan ajustes y variantes de enlace por destinatario, reemplazan el contenido detrás de enlaces activos y exportan eventos de lectores en masa para tu almacén de datos. El nodo disparador arranca flujos en cuanto un documento se lee, se descarga, se comenta, se acusa recibo, pasa una puerta o se consume - por webhooks verificados o un sondeo de respaldo.
¿Es EveryPage una alternativa a DocSend con integración con n8n?
Sí - DocSend no tiene ningún nodo de n8n. Si quieres el seguimiento de documentos estilo DocSend viviendo dentro de tus propios flujos, EveryPage cubre el trabajo con un nodo nativo en binario, disparadores instantáneos verificados y analíticas respetuosas con el RGPD que no almacenan direcciones IP de lectores - a precio plano en vez de facturación por usuario.
¿Los disparadores son instantáneos y los webhooks van verificados?
Instantáneos por defecto: activar el disparador registra una suscripción de webhook y los eventos se empujan en el momento en que ocurren. Cada entrega se verifica - firma HMAC-SHA256, comparación en tiempo constante, tolerancia de repetición de cinco minutos - y las entregas no verificadas se rechazan con un 401. Para instancias que no pueden recibir webhooks entrantes, el modo sondeo recorre el feed de eventos con cursores por flujo para que nada se dispare dos veces ni se pierda.
¿Cómo usan EveryPage los nodos AI Agent de n8n?
El nodo está marcado como usableAsTool, así que los nodos AI Agent pueden llamar a sus operaciones como herramientas tipadas - subir un informe generado y devolver el enlace rastreado, consultar quién leyó un documento, obtener un resumen de lectura. En n8n autoalojado, configura N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true; los flujos importables de esta página y del paquete muestran configuraciones de agente funcionales.
¿Puedo instalarlo en n8n Cloud y qué planes necesito?
Primero autoalojado: el paquete es n8n-nodes-everypage y se instala desde el panel de Community Nodes en cuanto esté publicado en npm - la publicación está en marcha, junto con la verificación de nodos comunitarios de n8n para su disponibilidad en Cloud. La API que envuelve el nodo ya está disponible hoy en todos los planes de EveryPage (mira la documentación para desarrolladores). Del lado de los planes todo se conecta gratis; el disparador de formularios, Link Variants y Replace Content son Pro porque las funciones de producto que manejan son Pro.
¿Los enlaces con seguimiento tienen que caducar?
No - la expiración es un control que fijas por documento, nunca un valor por defecto. Dale a un enlace una fecha de expiración, un presupuesto de vistas o ninguno de los dos; en Pro, los enlaces pueden configurarse para no caducar nunca, así que el enlace que publicó tu flujo sigue funcionando todo el tiempo que quieras. Los flujos también pueden gestionar la expiración por sí mismos mediante Update Settings.
Pon un enlace con seguimiento al final de cada flujo.
Instala el nodo, pega una clave API, y el próximo documento que produzca tu flujo te dirá si alguien lo leyó - página por página, por un webhook que puedes verificar.
Comparar planesRelacionado: todas las integraciones · la integración con Make · webhooks en crudo · la alternativa a DocSend · compartir PDFs sin almacenar IPs