Saltar al contenido principal

Automatizaciones con webhooks

Plan Basic y superior

Los webhooks requieren un plan de pago. Basic: 1 webhook, Pro: 3, Ultra: 10.

Los webhooks te permiten conectar TellDone a cualquier servicio externo. Cuando creas una nota de voz, TellDone la procesa y envía automáticamente los datos extraídos (notas, tareas, eventos e informes) a una URL que tú indiques. Cada tarea y cada evento se envían como una entrega separada, para que tu herramienta de automatización pueda procesarlos por separado.

Qué enviar

Cada automatización tiene sus propios interruptores de payload. Elige uno o cualquier combinación:

  • Notas: la nota procesada entera (título, transcripción, resumen, etiquetas, idioma)
  • Audio: en el plan Ultra, adjunta un enlace de descarga de 24 horas al archivo de audio junto con el payload de la 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

Puedes cambiar los interruptores cuando quieras desde los ajustes de la automatización: los cambios se aplican solo a eventos nuevos.

Configurar un webhook

Ajustes de automatizaciones para Zapier, Make y n8n

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

Configuración de nueva automatización webhook

  1. Introduce 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: notas, tareas, eventos, informes (o cualquier combinación)
  4. Si quieres, añade un auth header: un token que se envía como encabezado Authorization para endpoints seguros
  5. Toca Guardar
  6. Copia el secreto de firma: se muestra completo solo cuando creas la automatización o después de rotarlo. Lo necesitarás si quieres verificar la autenticidad del webhook
  7. Toca "Test" para enviar un payload de prueba a tu endpoint sin crear un evento real
consejo

La URL del webhook debe usar HTTPS. Las direcciones HTTP y las IPs de redes privadas no se aceptan.

Qué se envía

Cada entrega es un objeto JSON con tres campos: event (el tipo de evento), timestamp y data (el contenido real). Aquí tienes cómo se ve cada tipo de evento.

Notas (note.created)

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

{
"event": "note.created",
"timestamp": "2026-02-27T14:38:00Z",
"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:00Z"
}
}

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 expira después de 24 horas. Activa esto con la opción "Note + Audio" al crear la automatización.

Tareas (task.created)

Una entrega por tarea. Una nota con 3 tareas envía 3 webhooks separados.

{
"event": "task.created",
"timestamp": "2026-02-27T14:38:01Z",
"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:00Z",
"tags": ["work"],
"status": "todo",
"created_at": "2026-02-27T10:00:00Z"
}
}

Eventos (calendar_event.created)

Una entrega por evento de calendario.

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

Informes (report.created)

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

{
"event": "report.created",
"timestamp": "2026-02-28T00:05:00Z",
"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": "productive",
"tasks_created": 5,
"tasks_completed": 3
},
"created_at": "2026-02-28T00:05:00Z"
}
}

Seguridad

Cada entrega está firmada con HMAC-SHA256 usando el secreto de firma de tu automatización. Los siguientes encabezados se incluyen con cada entrega:

  • 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 (note.created, task.created, calendar_event.created, report.created)
  • X-LP-Delivery-Id: ID único de entrega (útil para deduplicación)
  • User-Agent: siempre TellDone-Webhooks/1.0

Los encabezados de firma se envían con cada entrega, independientemente de otras configuraciones.

Por defecto, cada entrega incluye el secreto de firma de tu automatización en el encabezado Authorization, así que herramientas como la autenticación por encabezado de n8n funcionan directamente pegando el secreto como valor de auth. Si configuras un auth header personalizado en los ajustes, reemplaza este valor predeterminado. Puedes usar dos formatos: Nombre-Encabezado: valor (envía el encabezado con ese nombre) o un valor simple (lo envía como Authorization: <valor>).

Cada automatización tiene su propio secreto de firma, así que rotar uno no afecta a tus otros webhooks. El secreto se muestra completo solo cuando creas la automatización o después de rotarlo. En cualquier otro momento, solo se muestra una vista previa (whsec_...últimos4). Para cambiarlo, toca "Rotate secret" en los ajustes de la automatización: se genera una nueva clave HMAC sin tocar la URL ni el auth header. El secreto anterior deja de funcionar al instante.

Solo se aceptan URLs HTTPS. Se rechazan direcciones HTTP, direcciones IP y direcciones de redes privadas.

Verificación de firmas de webhooks

Verify HMAC

Cada entrega incluye un encabezado de firma con el formato X-LP-Signature: sha256=<hex>. El ejemplo de abajo muestra cómo verificarlo en Python.

Cada webhook está firmado para que puedas confirmar que proviene realmente de TellDone. La firma se calcula como:

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

El resultado se codifica en hexadecimal y se prefija con sha256= en el encabezado de firma.

Usa el cuerpo crudo de la solicitud

TellDone serializa JSON con espacios después de los separadores (por ejemplo, {"event": "note.created"}). Si parseas y vuelves a serializar el cuerpo, la firma no coincidirá. Verifica siempre contra los bytes crudos 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)

# Ejemplo con Flask
@app.route("/webhook/telldone", methods=["POST"])
def telldone_webhook():
raw_body = request.get_data() # bytes crudos, NO 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
# procesar 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");
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}

// Ejemplo con Express (usa express.raw para obtener el cuerpo crudo)
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);
// procesar webhook...
});

Proteccion contra replay (opcional)

Para prevenir ataques de replay, verifica que el timestamp 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 cuerpo parseado y re-serializadoUsa el cuerpo crudo de la solicitud
JSON.stringify() en JS (compacto, sin espacios)Usa el cuerpo crudo o replica el formato de Python
Olvidar el prefijo de timestampEl formato es timestamp + "." + body
Comparar strings directamenteUsa hmac.compare_digest o timingSafeEqual

Política de reintentos

Si tu endpoint falla, TellDone reintenta cada entrega con backoff exponencial (unos minutos al principio, luego intervalos más largos):

IntentoRetraso
1er reintento30 segundos
2do reintento2 minutos
3er reintento15 minutos
4to reintento1 hora
5to reintento4 horas

Después de 5 intentos fallidos, la entrega se marca como muerta. Aún puedes reintentarla manualmente desde el Delivery log.

Cómo TellDone maneja diferentes respuestas:

  • 2xx: entregado correctamente
  • 4xx (excepto 429): marcado como muerto al instante, sin reintento (tu endpoint rechazó los datos explícitamente)
  • 429 (Too Many Requests): reintenta, respeta el encabezado Retry-After
  • 5xx o timeout: reintenta con el calendario de arriba

Cuando las entregas fallan repetidamente

No tienes que estar pendiente del Delivery log para enterarte de que algo se ha roto. TellDone vigila los fallos consecutivos por ti y te avisa en dos etapas.

Tras 3 fallos: aviso en el Inbox

Tras 3 entregas fallidas seguidas, TellDone crea un mensaje en tu Inbox bajo la categoría "Webhook failures". El mensaje nombra la automatización afectada y te enlaza directamente a Ajustes > Integraciones > Automations > [la automatización fallida] > Delivery log para que puedas inspeccionar la respuesta y decidir qué hacer.

consejo

Los avisos en el Inbox hacen que te enteres de las automatizaciones rotas por la insignia del icono de la app, en lugar de descubrirlo semanas más tarde por datos que faltan en tu herramienta destino.

Tras 20 fallos: desactivación automática

Auto-disable

Si 20 entregas seguidas de la misma automatización fallan (contadas tras el aviso del Inbox), TellDone la desactiva automáticamente para dejar de llamar a un endpoint roto y proteger tu cuota mensual de entregas. Corrige el problema en el destino y luego reactívala desde Ajustes > Integraciones > Automations.

El contador de fallos consecutivos se reinicia a cero con la siguiente entrega correcta.

Gestión de webhooks

  • Pausar/reanudar: desactiva cualquier automatización sin eliminarla, reactívala cuando quieras
  • Delivery log: consulta todas las entregas con estado, código HTTP y tiempo de respuesta. Filtra por Entregados o Errores. Toca cualquier entrega fallida y elige "Reintentar" para reenviarla sin esperar al siguiente reintento programado
  • Test: toca "Test" para enviar un payload de prueba (con "test": true en el cuerpo) a tu endpoint sin crear un evento real. Los envíos de prueba no cuentan en tu cuota mensual
  • Rotate secret: genera un nuevo secreto HMAC sin cambiar la URL ni el auth header
  • Editar: actualiza la URL, el auth header o los interruptores de payload (notas / audio / tareas / eventos / informes). Los cambios se aplican al instante
  • Eliminar: borra de forma permanente la automatización y todos sus registros de entrega

Límites de entrega

La entrega de webhooks tiene dos límites: una cuota mensual (límite estricto, varía según el plan) y un límite antirráfaga por hora (límite suave, idéntico en todos los planes de pago).

PlanWebhooksEntregas mensualesRáfaga por hora
Free00-
Basic1300100
Pro33.000100
Ultra1015.000100

El plan Ultra también admite enlaces de audio en los payloads de notas (expiran en 24 horas).

Cómo se comportan los límites:

  • Cuota mensual superada: la entrega se marca como fallida sin reintento. Las nuevas entregas se reanudan el día 1 del mes siguiente, cuando se reinicia el contador.
  • Límite por hora superado: la entrega se aplaza y se reintenta unos 5 minutos después, así una ráfaga corta no pierde datos. Es una protección antirráfaga suave, no un rechazo definitivo.

Los envíos de prueba y los reintentos manuales desde el registro de entregas no cuentan para ninguno de los dos límites.

Filtrar eventos de prueba

Cuando tocas "Test", el payload 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 instrucciones paso a paso con tu herramienta de automatización:

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

Casos de uso populares

  • Enviar tareas a Google Sheets a través de Zapier
  • Crear mensajes de Slack a partir de notas con Make
  • Registrar eventos en un CRM personalizado con n8n
  • Hacer copia de seguridad de todas las notas en almacenamiento en la nube
  • Reenviar informes a un panel de equipo

Ver también

  • Inbox y soporte: si un webhook falla varias veces, verás un mensaje en tu Inbox
  • 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 bidireccional dedicada de tareas (sin webhooks)
  • Notion: integración dedicada con Notion
  • Reenvío por correo - recibir datos de notas por correo