Saltar al contenido principal

Automatizaciones con webhooks

Basic o superior

Las automatizaciones necesitan Basic o superior. Basic: 1 automatización, Pro: 3, Ultra: 10. En Free, la fila muestra Mejora tu plan para desbloquear las automatizaciones.

Un webhook es una dirección web que recibe datos de forma automática. Con las Automatizaciones, TellDone envía a esa dirección cada nota nueva con sus tareas y eventos en cuanto la nota está lista, y cada informe nuevo en cuanto el informe está listo, para que herramientas como Zapier, Make o n8n puedan actuar con ellos. Cada tarea y cada evento se envía como una entrega propia.

Elegir qué enviar​

Cada automatización tiene sus propios ajustes en Qué enviar. Elige una opción o cualquier combinación:

  • Nota: la nota procesada completa (título, transcripción, resumen, tipo, etiquetas, prioridad, idioma y fecha de creación)
  • Nota + audio: en el plan Ultra, añade a cada entrega de nota un enlace de descarga del archivo de audio válido durante 24 horas. Deja Nota activada: sin ella, no se envía ninguna nota
  • Tareas: una entrega por cada tarea extraída
  • Eventos: una entrega por cada evento de calendario extraído
  • Informes: una entrega por cada informe diario, semanal, mensual o anual generado (los tipos de informe que incluye tu plan). Los marcadores de días tranquilos y los informes semanales tranquilos y cortos no se envían

Puedes cambiar esto cuando quieras desde los ajustes de la automatización. Los cambios se aplican solo a las entregas nuevas.

Elegir cuándo enviar​

Debajo de las opciones de datos, cuatro interruptores independientes deciden qué cambios activan una entrega: Creado, Actualizado, Completado y Eliminado. Un activador solo funciona junto con el interruptor de datos correspondiente que tiene encima. Por ejemplo, Completado envía las tareas completadas solo si Tareas está activado.

Creado se envía para las notas que TellDone hace a partir de una grabación o de una nota de texto, y para las tareas y los eventos que encuentra en ellas. Las tareas y los eventos que añades a mano o con un asistente de IA, y los elementos nuevos de Añadir con voz, no se envían como Creado. Actualizado, Completado y Eliminado se envían cuando cambias un elemento en la app o con Añadir con voz. Los cambios que hacen Smart Context, un asistente de IA, o Todoist, Notion o Microsoft To Do no envían ninguna entrega.

El campo event de cada entrega indica qué ocurrió, por ejemplo task.created, task.completed o calendar_event.updated.

Configurar un webhook​

Ajustes de automatizaciones para Zapier, Make y n8n

  1. Ve a Ajustes > Integraciones > Automatizaciones
  2. Toca Nueva automatización

Configuración de un webhook en una automatización nueva

  1. Escribe un nombre (por ejemplo, "Mi webhook de Zapier")
  2. Pega la URL del webhook de tu servicio de automatización
  3. Elige qué datos enviar (Nota, Nota + audio en Ultra, Tareas, Eventos, Informes) y qué activadores usar (Creado, Actualizado, Completado, Eliminado)
  4. Si quieres, añade un encabezado de autenticación: un token que se envía como encabezado Authorization en los endpoints protegidos
  5. Toca Guardar
  6. Copia el secreto de firma: solo se muestra completo cuando creas la automatización por primera vez o después de rotarlo. Lo necesitas para comprobar que las entregas vienen realmente de TellDone (consulta Verificar las firmas de los webhooks)
  7. Toca Envío de prueba para enviar una carga útil de muestra a tu endpoint sin cambiar ninguno de tus datos. Verás Correcto con el código HTTP y el tiempo de respuesta, o Error con el motivo. Los envíos de prueba no aparecen en el registro de entregas

Qué se envía​

Cada entrega es un objeto JSON con tres campos: event (el tipo de evento), timestamp y data (el contenido en sí). Los envíos de prueba también incluyen "test": true. Así se ve cada tipo de evento.

Notas (note.created)​

Contiene el título generado por la IA, la transcripción completa, el resumen, el tipo de nota, las etiquetas, la prioridad, el idioma y la fecha de creación.

{
"event": "note.created",
"timestamp": "2026-02-27T14:38:00.512345+00:00",
"data": {
"note_id": "550e8400-e29b-41d4-a716-446655440000",
"title": "Meeting notes - Project Alpha",
"transcript": "Full transcript text...",
"summary": "Brief AI-generated summary...",
"type": "meeting",
"tags": ["work", "project-alpha"],
"priority": "high",
"language": "en",
"created_at": "2026-02-27T10:00:00.284117+00:00"
}
}

En el plan Ultra, las entregas de notas también pueden incluir un enlace a la grabación de audio (audio_url, audio_format, duration_seconds). El enlace caduca a las 24 horas. Actívalo con la opción Nota + audio de la automatización.

Tareas (task.created)​

Una entrega por tarea. Una nota con 3 tareas envía 3 entregas separadas.

{
"event": "task.created",
"timestamp": "2026-02-27T14:38:01.204718+00:00",
"data": {
"note_id": "550e8400-...",
"note_title": "Meeting notes - Project Alpha",
"task_id": "660f9511-...",
"title": "Send proposal to client",
"description": "Include pricing for Q2",
"priority": "high",
"due_date": "2026-03-01",
"reminder_at": "2026-02-28T09:00:00+00:00",
"tags": ["work"],
"status": "todo",
"cancel_reason": null,
"cancelled_at": null,
"created_at": "2026-02-27T10:00:00.284117+00:00"
}
}

Eventos (calendar_event.created)​

Una entrega por cada evento de calendario.

{
"event": "calendar_event.created",
"timestamp": "2026-02-27T14:38:02.093361+00:00",
"data": {
"note_id": "550e8400-...",
"note_title": "Meeting notes",
"event_id": "770a0622-...",
"title": "Team standup",
"description": "Weekly sync",
"start": "2026-03-03T07:00:00+00:00",
"end": "2026-03-03T07:30:00+00:00",
"location": "Zoom",
"is_all_day": false,
"attendees": ["alice@example.com"],
"tags": ["work"],
"created_at": "2026-02-27T10:00:00.284117+00:00",
"timezone": "Europe/Istanbul",
"start_local": "2026-03-03T10:00:00+03:00",
"end_local": "2026-03-03T10:30:00+03:00",
"start_date": "2026-03-03",
"end_date": "2026-03-03"
}
}

start y end están en UTC. start_local, end_local, start_date y end_date usan tu zona horaria (timezone). En un evento de todo el día, end_date es el último día del evento.

Informes (report.created)​

Se envía cuando se genera un informe diario, semanal, mensual o anual.

{
"event": "report.created",
"timestamp": "2026-02-28T00:05:00.731902+00:00",
"data": {
"report_id": "880b1733-...",
"report_type": "daily",
"period_start": "2026-02-27",
"period_end": "2026-02-27",
"content_md": "# Daily Report\n\n...",
"content_json": {
"productivity_score": 72,
"day_type": "planning",
"tasks_created": 5,
"tasks_completed": 3
},
"created_at": "2026-02-28T00:05:00.418253+00:00"
}
}

Seguridad​

Cada entrega se firma con HMAC-SHA256 usando el secreto de firma de tu automatización. Con cada entrega se incluyen los siguientes encabezados:

  • X-LP-Signature: la firma HMAC-SHA256 (sha256=...)
  • X-LP-Timestamp: marca de tiempo Unix usada para la firma
  • X-LP-Event: el tipo de evento (por ejemplo note.created, task.completed, calendar_event.updated, report.created)
  • X-LP-Delivery-Id: ID único de la entrega (útil para evitar duplicados)
  • User-Agent: siempre TellDone-Webhooks/1.0

TellDone envía un encabezado Authorization solo si añades un encabezado de autenticación en la automatización. Puedes usar dos formatos: Header-Name: value envía un encabezado con nombre, y un valor simple envía Authorization: <value>. Tu secreto de firma nunca se envía en un encabezado.

Cada automatización tiene su secreto de firma propio, así que rotar uno no afecta a ninguno de tus otros webhooks. El secreto se muestra completo solo cuando creas la automatización por primera vez o después de rotarlo. El resto del tiempo solo se muestra una vista previa (whsec_...last4). Para cambiarlo por uno nuevo, toca Rotar secreto en los ajustes de la automatización: esto genera una clave HMAC nueva sin cambiar la URL ni el encabezado de autenticación. El secreto anterior deja de funcionar de inmediato.

Solo se aceptan URL HTTPS con un nombre de dominio. Se rechazan HTTP, las direcciones IP (públicas o privadas), las URL con nombre de usuario o contraseña y los dominios que apuntan a direcciones de redes privadas. TellDone vuelve a comprobar la dirección cada vez que envía. Si esa comprobación falla, por ejemplo porque el dominio no se resuelve en ese momento, la entrega se detiene y no se reintenta.

Verificar las firmas de los webhooks​

Cada webhook está firmado para que puedas confirmar que realmente viene de TellDone. La firma se calcula así:

HMAC-SHA256(signing_secret, timestamp + "." + raw_body)

El resultado se codifica en hexadecimal y se antepone sha256= en el encabezado de la firma.

Usa el cuerpo sin procesar de la solicitud

TellDone serializa el JSON con espacios después de los separadores (por ejemplo {"event": "note.created"}). Si interpretas el cuerpo y lo vuelves a serializar, la firma no coincidirá. Verifica siempre contra los bytes sin procesar del cuerpo de la solicitud.

Python​

import hmac
import hashlib

def verify_signature(raw_body: bytes, signature: str, timestamp: str, secret: str) -> bool:
payload = f"{timestamp}.".encode() + raw_body
expected = "sha256=" + hmac.new(
secret.encode(), payload, hashlib.sha256
).hexdigest()
return hmac.compare_digest(signature, expected)

# Flask example
@app.route("/webhook/telldone", methods=["POST"])
def telldone_webhook():
raw_body = request.get_data() # raw bytes, NOT request.json
signature = request.headers.get("X-LP-Signature", "")
timestamp = request.headers.get("X-LP-Timestamp", "")

if not verify_signature(raw_body, signature, timestamp, SIGNING_SECRET):
abort(403)

data = request.json
# process webhook...

Node.js​

const crypto = require("crypto");

function verifySignature(rawBody, signature, timestamp, secret) {
const payload = `${timestamp}.${rawBody}`;
const expected =
"sha256=" +
crypto.createHmac("sha256", secret).update(payload).digest("hex");
const a = Buffer.from(signature);
const b = Buffer.from(expected);
// timingSafeEqual throws if the lengths differ, e.g. when the header is missing
return a.length === b.length && crypto.timingSafeEqual(a, b);
}

// Express example (use express.raw to get the raw body)
app.post("/webhook/telldone", express.raw({ type: "application/json" }), (req, res) => {
const rawBody = req.body.toString();
const signature = req.headers["x-lp-signature"] || "";
const timestamp = req.headers["x-lp-timestamp"] || "";

if (!verifySignature(rawBody, signature, timestamp, SIGNING_SECRET)) {
return res.status(403).send("Invalid signature");
}

const data = JSON.parse(rawBody);
// process webhook...
});

Protección contra repeticiones (opcional)​

Para evitar ataques de repetición, comprueba que la marca de tiempo sea reciente:

import time

def verify_timestamp(timestamp: str, tolerance_seconds: int = 300) -> bool:
try:
return abs(time.time() - int(timestamp)) < tolerance_seconds
except (ValueError, TypeError):
return False

Errores comunes​

ErrorSolución
Usar el cuerpo interpretado y vuelto a serializarUsa el cuerpo sin procesar de la solicitud
JSON.stringify() en JS (compacto, sin espacios)Usa el cuerpo sin procesar de la solicitud
Olvidar el prefijo de la marca de tiempoEl formato de la carga es timestamp + "." + body
Comparar las cadenas directamenteUsa hmac.compare_digest o timingSafeEqual

Política de reintentos​

Si tu endpoint falla, TellDone reintenta cada entrega con este calendario:

IntentoEspera
1.er reintento30 segundos
2.º reintento2 minutos
3.er reintento15 minutos
4.º reintento1 hora
5.º reintento4 horas

Si el 5.º reintento también falla, la entrega se marca como fallida y no se vuelve a reintentar. En la app se muestra con una cruz roja. Aun así, puedes reenviarla tú mismo desde el registro completo de entregas: abre Todas las entregas (el enlace aparece cuando una automatización tiene más de 5 entregas) y toca Reintentar en la entrega fallida. La lista corta de Entregas recientes no ofrece reintento.

Cómo gestiona TellDone las distintas respuestas:

  • 2xx: entregada correctamente
  • 4xx (excepto 429): se marca como fallida de inmediato y no se reintenta (tu endpoint rechazó los datos de forma explícita)
  • 429 (Too Many Requests): se reintenta después del número de segundos indicado en Retry-After (60 segundos si no hay ninguno). Estos reintentos no están limitados a 5, pero cada uno cuenta para los 20 fallos que desactivan la automatización
  • 5xx o tiempo de espera agotado: se reintenta con el calendario anterior

Cuando las entregas fallan repetidamente​

Si las entregas siguen fallando, TellDone te avisa y, al final, desactiva la automatización.

Tras 3 intentos fallidos: aviso en la Bandeja​

Después de 3 intentos fallidos seguidos (los reintentos cuentan), TellDone envía un mensaje a tu Bandeja con el título Tu automatización "Nombre" está fallando, con el nombre de tu automatización entre las comillas. Después puedes abrirla en Ajustes > Integraciones > Automatizaciones, revisar sus entregas y decidir qué hacer.

Tras 20 intentos fallidos: desactivación automática​

Desactivación automática

Si fallan 20 intentos seguidos de la misma automatización (los reintentos cuentan), TellDone la desactiva para que deje de enviar a una dirección que no funciona. Corrige el problema en tu herramienta de automatización y vuelve a activar su interruptor Activa en Ajustes > Integraciones > Automatizaciones. Volver a activarla no restablece el recuento de fallos, así que, hasta que una entrega se complete, un solo intento fallido la desactiva otra vez.

Cada intento fallido cuenta, así que una entrega que falla los 5 reintentos suma 6 al recuento. Por eso una automatización puede desactivarse sola tras unas 4 entregas fallidas. El contador vuelve a cero con la siguiente entrega correcta.

Gestionar los webhooks​

  • Activa: desactiva este interruptor para detener una automatización sin eliminarla, y vuelve a activarlo cuando quieras. Mientras está desactivada no se envía nada: las notas y los informes de ese periodo no se envían después, y las entregas que esperan un reintento se descartan
  • Entregas: Entregas recientes muestra las últimas 5 con su estado, el código HTTP y el tiempo de respuesta. Cuando hay más, Todas las entregas abre el registro de los últimos 30 días, donde puedes filtrar por Todas, Entregadas o Errores y tocar Reintentar en una entrega fallida para reenviarla sin esperar al siguiente reintento programado
  • Envío de prueba: envía una nota de muestra (note.created, con "test": true en el cuerpo), sean cuales sean los tipos de datos que elegiste, sin cambiar ninguno de tus datos. Está disponible cuando la automatización está guardada. Los envíos de prueba no cuentan para tu límite mensual
  • Rotar secreto: genera un secreto de firma HMAC nuevo sin cambiar la URL ni el encabezado de autenticación
  • Editar: actualiza la URL, el encabezado de autenticación, los datos que se envían (Nota / Nota + audio / Tareas / Eventos / Informes) o los activadores (Creado / Actualizado / Completado / Eliminado). Los cambios se aplican de inmediato
  • Eliminar automatización: elimina de forma permanente la automatización y todos sus registros de entregas

Cada entrega muestra su estado con un icono:

IconoSignificado
Marca verdeEntregada
Reloj amarilloEn espera o enviándose
Triángulo rojoFallida, TellDone reintentará
Cruz rojaFallida, sin más reintentos automáticos

En el registro completo puedes tocar Reintentar en las entregas con un triángulo rojo o una cruz roja.

Límites de entrega​

Hay dos límites: uno mensual que depende de tu plan y uno por hora de 100 entregas en todos los planes de pago, que protege frente a picos repentinos.

PlanAutomatizacionesEntregas al mesLímite por hora
Free00-
Basic1300100
Pro33000100
Ultra1015 000100

Cómo se comportan los límites:

  • Límite mensual alcanzado: la entrega espera. Se muestra como fallida ("Monthly webhook limit exceeded") y TellDone lo vuelve a intentar cada 5 minutos. Se envía después de que tu límite se restablezca a las 00:00 UTC del día 1, salvo que para entonces tenga más de 30 días. Las entregas enviadas después del restablecimiento cuentan para el mes nuevo.
  • Límite por hora alcanzado: la entrega se aplaza y se reintenta pasados unos 5 minutos, así que una ráfaga corta no pierde datos.

Solo las entregas correctas cuentan para el límite mensual. El límite por hora cuenta todos los intentos, incluidos los reintentos. Los envíos de prueba no cuentan para ninguno de los dos límites.

Si cambias de plan, tus automatizaciones y sus ajustes se conservan. En Free dejan de enviar y no puedes abrirlas hasta que mejores de plan. En Basic, las automatizaciones que ya tenías siguen enviando dentro de las 300 entregas al mes, pero no puedes añadir ni activar más de una.

Filtrar los eventos de prueba​

Cuando tocas Envío de prueba, la carga incluye "test": true en el nivel superior. En tu herramienta de automatización puedes comprobar este campo y omitir el procesamiento cuando esté presente.

Guías por plataforma​

Para ver las instrucciones de configuración paso a paso con tu herramienta de automatización:

  • Zapier: conecta TellDone con miles de apps mediante Zaps
  • Make: crea escenarios de automatización visuales (antes Integromat)
  • n8n: usa los webhooks de TellDone en flujos de trabajo alojados por ti o en la nube
  • Endpoints personalizados: cualquier servicio que acepte solicitudes HTTPS POST funciona con los webhooks de TellDone

Ideas​

  • Enviar tareas a una hoja de Google Sheets con Zapier
  • Crear mensajes de Slack a partir de notas con Make
  • Registrar eventos en un CRM propio con n8n
  • Hacer una copia de seguridad de todas las notas en el almacenamiento en la nube
  • Reenviar informes a un panel del equipo

Ver también​

  • Bandeja y soporte: si un webhook falla repetidamente, verás un mensaje en tu Bandeja
  • Zapier: configuración paso a paso de Zapier
  • Make: configuración paso a paso de Make
  • n8n: configuración paso a paso de n8n
  • Todoist: sincronización de tareas en ambos sentidos dedicada (no necesita webhooks)
  • Notion: integración dedicada de Notion
  • Reenvío por correo: recibe los datos de las notas por correo