Ga naar hoofdinhoud

Webhook-automatiseringen

Basic en hoger

Automatiseringen vereisen Basic of hoger. Basic: 1 automatisering, Pro: 3, Ultra: 10. In Free toont de rij Upgrade om Automatiseringen te ontgrendelen.

Een webhook is een webadres dat automatisch data ontvangt. Met Automatiseringen stuurt TellDone elke nieuwe notitie met bijbehorende taken en evenementen naar dat adres zodra de notitie klaar is, en elk nieuw rapport zodra het rapport klaar is, zodat tools als Zapier, Make of n8n ermee aan de slag kunnen. Elke taak en elk evenement wordt als eigen levering verstuurd.

Kiezen wat je verstuurt​

Elke automatisering heeft eigen instellingen onder Wat versturen. Kies er één of een willekeurige combinatie:

  • Notitie - de volledige verwerkte notitie (titel, transcript, samenvatting, type, tags, prioriteit, taal en aanmaakdatum)
  • Notitie + audio - in het Ultra-abonnement komt er bij elke notitielevering een downloadlink van 24 uur naar het audiobestand bij. Laat Notitie aanstaan: zonder die optie wordt er geen notitie verstuurd
  • Taken - één levering per gevonden taak
  • Evenementen - één levering per gevonden agenda-evenement
  • Rapporten - één levering per gemaakt dag-, week-, maand- of jaarrapport (de rapportsoorten die je abonnement bevat). Plaatshouders voor rustige dagen en korte rapporten van rustige weken worden niet verstuurd

Je kunt dit op elk moment wijzigen in de instellingen van de automatisering - wijzigingen gelden alleen voor nieuwe leveringen.

Kiezen wanneer je verstuurt​

Onder de datakeuzes bepalen vier aparte schakelaars welke wijzigingen een levering activeren: Aangemaakt, Bijgewerkt, Afgerond en Verwijderd. Een trigger werkt alleen samen met de bijbehorende dataschakelaar erboven. Afgerond stuurt bijvoorbeeld alleen afgeronde taken als Taken aanstaat.

Aangemaakt wordt verstuurd voor notities die TellDone maakt uit een opname of een tekstnotitie, en voor de taken en evenementen daarin. Taken en evenementen die je met de hand of met een AI-assistent toevoegt, en nieuwe items via Toevoegen met spraak, worden niet als Aangemaakt verstuurd. Bijgewerkt, Afgerond en Verwijderd worden verstuurd als je een item in de app of met Toevoegen met spraak wijzigt. Wijzigingen door Smart Context, door een AI-assistent of in Todoist, Notion of Microsoft To Do leveren geen levering op.

Het veld event van elke levering noemt wat er is gebeurd, bijvoorbeeld task.created, task.completed of calendar_event.updated.

Een webhook instellen​

Instellingen automatiseringen voor Zapier, Make en n8n

  1. Ga naar Instellingen > Integraties > Automatiseringen
  2. Tik op Nieuwe automatisering

Nieuwe automatisering webhook instellen

  1. Voer een naam in (bijvoorbeeld “Mijn Zapier-webhook”)
  2. Plak de webhook-URL van je automatiseringsdienst
  3. Kies welke data je wilt versturen (Notitie, Notitie + audio in Ultra, Taken, Evenementen, Rapporten) en welke triggers je wilt gebruiken (Aangemaakt, Bijgewerkt, Afgerond, Verwijderd)
  4. Voeg eventueel een auth-header toe - een token dat als Authorization-header wordt meegestuurd voor beveiligde eindpunten
  5. Tik op Opslaan
  6. Kopieer de ondertekeningssleutel - die wordt alleen volledig getoond wanneer je de automatisering voor het eerst maakt of nadat je hem hebt geroteerd. Je hebt hem nodig om te controleren dat leveringen echt van TellDone komen (zie Webhook-handtekeningen verifiëren)
  7. Tik op Test verzenden om een voorbeeldpayload naar je eindpunt te sturen zonder iets aan je data te wijzigen. Je ziet Succes met de HTTP-code en de reactietijd, of Fout met de reden. Testverzendingen verschijnen niet in het leveringslogboek

Wat wordt verstuurd​

Elke levering is een JSON-object met drie velden: event (het soort gebeurtenis), timestamp en data (de eigenlijke inhoud). Testverzendingen bevatten ook "test": true. Zo ziet elk soort gebeurtenis eruit.

Notities (note.created)​

Bevat de door AI gemaakte titel, het volledige transcript, de samenvatting, het notitietype, tags, prioriteit, taal en aanmaakdatum.

{
"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"
}
}

In het Ultra-abonnement kunnen notitieleveringen ook een link naar de audio-opname bevatten (audio_url, audio_format, duration_seconds). De link verloopt na 24 uur. Zet dit aan met de optie Notitie + audio in de automatisering.

Taken (task.created)​

Eén levering per taak. Een notitie met 3 taken verstuurt 3 aparte leveringen.

{
"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"
}
}

Evenementen (calendar_event.created)​

Eén levering per agenda-evenement.

{
"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 en end staan in UTC. start_local, end_local, start_date en end_date gebruiken jouw tijdzone (timezone). Bij een evenement dat de hele dag duurt, is end_date de laatste dag van het evenement.

Rapporten (report.created)​

Wordt verstuurd als een dag-, week-, maand- of jaarrapport is gemaakt.

{
"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"
}
}

Beveiliging​

Elke levering wordt ondertekend met HMAC-SHA256 met de ondertekeningssleutel van je automatisering. Bij elke levering worden deze headers meegestuurd:

  • X-LP-Signature - de HMAC-SHA256-handtekening (sha256=...)
  • X-LP-Timestamp - Unix-tijdstempel die voor het ondertekenen is gebruikt
  • X-LP-Event - het soort gebeurtenis (bijvoorbeeld note.created, task.completed, calendar_event.updated, report.created)
  • X-LP-Delivery-Id - unieke levering-ID (handig om dubbele leveringen te herkennen)
  • User-Agent - altijd TellDone-Webhooks/1.0

TellDone stuurt alleen een Authorization-header mee als je in de automatisering een auth-header toevoegt. Je kunt twee notaties gebruiken: Header-Name: value stuurt een header met die naam, en een kale waarde stuurt Authorization: <value>. Je ondertekeningssleutel wordt nooit in een header meegestuurd.

Elke automatisering heeft een eigen ondertekeningssleutel, dus het roteren van één sleutel heeft geen invloed op je andere webhooks. De sleutel wordt alleen volledig getoond wanneer je de automatisering voor het eerst maakt of nadat je hem hebt geroteerd. Op alle andere momenten zie je alleen een voorbeeld (whsec_...last4). Om hem door een nieuwe te vervangen, tik je in de instellingen van de automatisering op Sleutel roteren - dat maakt een nieuwe HMAC-sleutel zonder de URL of de auth-header te wijzigen. De oude sleutel werkt direct niet meer.

Alleen HTTPS-URL’s met een domeinnaam worden geaccepteerd. HTTP, IP-adressen (openbaar of privé), URL’s met een gebruikersnaam of wachtwoord en domeinen die naar adressen in een privénetwerk verwijzen, worden geweigerd. TellDone controleert het adres bij elke verzending opnieuw. Mislukt die controle, bijvoorbeeld doordat het domein op dat moment niet wordt opgelost, dan wordt de levering gestopt en niet opnieuw geprobeerd.

Webhook-handtekeningen verifiëren​

Elke webhook is ondertekend, zodat je kunt bevestigen dat hij echt van TellDone komt. De handtekening wordt zo berekend:

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

Het resultaat is hex-gecodeerd en krijgt in de handtekeningheader het voorvoegsel sha256=.

Gebruik de ruwe body van het verzoek

TellDone serialiseert JSON met spaties na scheidingstekens (bijvoorbeeld {"event": "note.created"}). Als je de body parset en opnieuw serialiseert, klopt de handtekening niet meer. Verifieer altijd tegen de ruwe bytes van de body van het verzoek.

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...
});

Bescherming tegen herhaling (optioneel)​

Om replay-aanvallen te voorkomen, controleer je of de tijdstempel recent is:

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

Veelgemaakte fouten​

FoutOplossing
De geparste en opnieuw geserialiseerde body gebruikenGebruik de ruwe body van het verzoek
JSON.stringify() in JS (compact, zonder spaties)Gebruik de ruwe body van het verzoek
Het voorvoegsel met de tijdstempel vergetenDe payloadindeling is timestamp + "." + body
Strings rechtstreeks vergelijkenGebruik hmac.compare_digest of timingSafeEqual

Beleid voor opnieuw proberen​

Als je eindpunt faalt, probeert TellDone elke levering opnieuw volgens dit schema:

PogingVertraging
1e nieuwe poging30 seconden
2e nieuwe poging2 minuten
3e nieuwe poging15 minuten
4e nieuwe poging1 uur
5e nieuwe poging4 uur

Mislukt ook de 5e nieuwe poging, dan wordt de levering als mislukt gemarkeerd en niet meer opnieuw geprobeerd. In de app zie je een rood kruis. Je kunt hem nog steeds zelf opnieuw versturen vanuit het volledige leveringslogboek: open Alle leveringen (de link verschijnt zodra een automatisering meer dan 5 leveringen heeft) en tik bij de mislukte levering op Opnieuw proberen. De korte lijst Recente leveringen biedt die mogelijkheid niet.

Zo gaat TellDone om met verschillende reacties:

  • 2xx - succesvol geleverd
  • 4xx (behalve 429) - meteen als mislukt gemarkeerd en niet opnieuw geprobeerd (je eindpunt heeft de data uitdrukkelijk geweigerd)
  • 429 (Too Many Requests) - opnieuw geprobeerd na het aantal seconden in Retry-After (60 seconden als dat ontbreekt). Deze nieuwe pogingen zijn niet beperkt tot 5, maar elke poging telt mee voor de 20 mislukkingen waarna de automatisering wordt uitgezet
  • 5xx of timeout - nieuwe pogingen volgens het schema hierboven

Als leveringen herhaaldelijk mislukken​

Blijven leveringen mislukken, dan laat TellDone het je weten en zet het de automatisering uiteindelijk uit.

Na 3 mislukte pogingen: waarschuwing in de Inbox​

Na 3 mislukte pogingen achter elkaar (nieuwe pogingen tellen mee) stuurt TellDone een bericht naar je Inbox met de titel Je automatisering “Naam” mislukt steeds, met de naam van je automatisering tussen de aanhalingstekens. Je kunt hem dan openen in Instellingen > Integraties > Automatiseringen, de leveringen bekijken en beslissen wat je doet.

Na 20 mislukte pogingen: automatisch uitgezet​

Automatisch uitgezet

Mislukken 20 pogingen achter elkaar voor dezelfde automatisering (nieuwe pogingen tellen mee), dan zet TellDone de automatisering uit zodat die niet blijft sturen naar een adres dat niet werkt. Los het probleem op in je automatiseringstool en zet daarna de schakelaar Actief weer aan in Instellingen > Integraties > Automatiseringen. Weer aanzetten zet de teller van mislukkingen niet terug. Tot één levering slaagt, zet dus een enkele mislukte poging hem weer uit.

Elke mislukte poging telt mee, dus één levering die alle 5 nieuwe pogingen mislukt, voegt 6 toe aan de teller. Een automatisering kan zichzelf dus na ongeveer 4 mislukkende leveringen uitzetten. De teller gaat terug naar nul bij de eerstvolgende geslaagde levering.

Webhooks beheren​

  • Actief - zet deze schakelaar uit om een automatisering te stoppen zonder hem te verwijderen, en zet hem op elk moment weer aan. Zolang hij uitstaat, wordt er niets verstuurd: notities en rapporten uit die periode worden later niet alsnog verstuurd, en leveringen die op een nieuwe poging wachten, worden weggegooid
  • Leveringen - Recente leveringen toont de laatste 5 met status, HTTP-code en reactietijd. Zijn het er meer, dan opent Alle leveringen het logboek van de afgelopen 30 dagen. Daar kun je filteren op Alle, Geleverd of Fouten en bij een mislukte levering op Opnieuw proberen tikken om hem opnieuw te versturen zonder op de volgende geplande poging te wachten
  • Test verzenden - stuurt een voorbeeldnotitie (note.created, met "test": true in de body), welke soorten data je ook hebt gekozen, zonder iets aan je data te wijzigen. Beschikbaar zodra de automatisering is opgeslagen. Testverzendingen tellen niet mee voor je maandlimiet
  • Sleutel roteren - maak een nieuwe HMAC-ondertekeningssleutel zonder de URL of auth-header te wijzigen
  • Bewerken - wijzig de URL, auth-header, datakeuzes (Notitie / Notitie + audio / Taken / Evenementen / Rapporten) of triggers (Aangemaakt / Bijgewerkt / Afgerond / Verwijderd). Wijzigingen gaan direct in
  • Automatisering verwijderen - verwijdert de automatisering en al zijn leveringslogboeken definitief

Elke levering toont zijn status als pictogram:

PictogramBetekenis
Groen vinkjeGeleverd
Gele klokWacht of wordt verstuurd
Rode driehoekMislukt, TellDone probeert het opnieuw
Rood kruisMislukt, geen automatische nieuwe pogingen meer

In het volledige logboek kun je bij leveringen met een rode driehoek of een rood kruis op Opnieuw proberen tikken.

Leveringslimieten​

Er zijn twee limieten: een maandlimiet die van je abonnement afhangt en een uurlimiet van 100 leveringen in elk betaald abonnement, die beschermt tegen plotselinge pieken.

AbonnementAutomatiseringenLeveringen per maandUurlimiet
Free00-
Basic1300100
Pro33.000100
Ultra1015.000100

Zo gedragen de limieten zich:

  • Maandlimiet bereikt - de levering wacht. Hij wordt als mislukt getoond (“Maandelijkse webhooklimiet overschreden”) en TellDone probeert het elke 5 minuten opnieuw. Hij gaat de deur uit nadat je limiet op de 1e om 00:00 UTC is gereset, tenzij hij dan al meer dan 30 dagen oud is. Leveringen die na de reset worden verstuurd, tellen mee voor de nieuwe maand.
  • Uurlimiet bereikt - de levering wordt uitgesteld en na ongeveer 5 minuten opnieuw geprobeerd, zodat een korte piek geen data kost.

Alleen geslaagde leveringen tellen mee voor de maandlimiet. De uurlimiet telt elke poging, ook nieuwe pogingen. Testverzendingen tellen voor geen van beide limieten mee.

Als je van abonnement wisselt, blijven je automatiseringen en hun instellingen bewaard. In Free stoppen ze met sturen en kun je ze niet openen tot je upgradet. In Basic blijven automatiseringen die je al had sturen binnen 300 leveringen per maand, maar je kunt er niet meer dan één toevoegen of aanzetten.

Testgebeurtenissen filteren​

Als je op Test verzenden tikt, bevat de payload "test": true op het hoogste niveau. In je automatiseringstool kun je dit veld controleren en de verwerking overslaan als het aanwezig is.

Handleidingen per platform​

Stapsgewijze instructies voor jouw automatiseringstool:

  • Zapier - verbind TellDone met duizenden apps via Zaps
  • Make - bouw visuele automatiseringsscenario’s (voorheen Integromat)
  • n8n - gebruik TellDone-webhooks in zelf gehoste of cloudworkflows
  • Eigen eindpunten - elke dienst die HTTPS POST-verzoeken accepteert, werkt met TellDone-webhooks

Ideeën​

  • Stuur taken via Zapier naar een Google Sheet
  • Maak via Make Slack-berichten van notities
  • Log evenementen via n8n in een eigen CRM
  • Maak een back-up van al je notities in cloudopslag
  • Stuur rapporten door naar een teamdashboard

Zie ook​

  • Inbox en support - als een webhook herhaaldelijk mislukt, zie je een bericht in je Inbox
  • Zapier - stapsgewijs Zapier instellen
  • Make - stapsgewijs Make instellen
  • n8n - stapsgewijs n8n instellen
  • Todoist - speciale tweerichtings-taaksynchronisatie (geen webhooks nodig)
  • Notion - speciale Notion-integratie
  • Doorsturen per e-mail - ontvang notitiedata per e-mail