Webhook-automations
Webhooks vereisen een betaald abonnement. Basic: 1 webhook, Pro: 3, Ultra: 10.
Met webhooks verbind je TellDone met elke externe service. Wanneer je een spraaknotitie aanmaakt, verwerkt TellDone deze en stuurt automatisch de eruit gehaalde data - notities, taken, afspraken en rapporten - naar een door jou opgegeven URL. Elke taak en afspraak wordt als aparte levering verstuurd, zodat je automation-tool ze individueel kan verwerken.
Kiezen wat je verstuurt
Elke automation heeft eigen payload-toggles. Kies een of een willekeurige combinatie:
- Notities - de volledig verwerkte notitie (titel, transcript, samenvatting, tags, taal)
- Audio - op het Ultra-abonnement, voeg een downloadlink van 24 uur naar het audiobestand toe naast de notitie-payload
- Taken - een levering per eruit gehaalde taak
- Afspraken - een levering per eruit gehaalde agenda-afspraak
- Rapporten - een levering per gegenereerd dagelijks, wekelijks, maandelijks of jaarlijks rapport
Je kunt de toggles altijd wijzigen vanuit de instellingen van de automation - wijzigingen gelden alleen voor nieuwe events.
Een webhook instellen

- Ga naar Instellingen > Integraties > Webhook-automations
- Tik op Nieuwe automation

- Voer een naam in (bijv. "Mijn Zapier-webhook")
- Plak de webhook-URL van je automation-service
- Kies welke data je wilt versturen: notities, taken, afspraken, rapporten (of een combinatie)
- Voeg optioneel een auth-header toe - een token dat als de
Authorization-header wordt gestuurd voor beveiligde endpoints - Tik op Opslaan
- Kopieer het signing secret - het wordt volledig getoond alleen wanneer je de automation voor het eerst aanmaakt of na het roteren. Je hebt het nodig als je de webhook-authenticiteit wilt verifiëren
- Tik op "Test" om een voorbeeld-payload naar je endpoint te sturen zonder een echt event aan te maken
De webhook-URL moet HTTPS gebruiken. HTTP-adressen en privénetwerk-IPs worden niet geaccepteerd.
Wat wordt verstuurd
Elke levering is een JSON-object met drie velden: event (het event-type), timestamp en data (de daadwerkelijke inhoud). Hier zie je hoe elk event-type eruitziet.
Notities (note.created)
Bevat de door AI gegenereerde titel, het volledige transcript, de samenvatting, het notitietype, tags, prioriteit, taal en aanmaakdatum.
{
"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"
}
}
Op 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. Schakel dit in met de optie "Notitie + Audio" bij het aanmaken van de automation.
Taken (task.created)
Een levering per taak. Een enkele notitie met 3 taken stuurt 3 aparte webhooks.
{
"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"
}
}
Afspraken (calendar_event.created)
Een levering per agenda-afspraak.
{
"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"
}
}
Rapporten (report.created)
Verstuurd wanneer een dagelijks, wekelijks, maandelijks of jaarlijks rapport wordt gegenereerd.
{
"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"
}
}
Beveiliging
Elke levering is ondertekend met HMAC-SHA256 met het signing secret van je automation. De volgende headers worden bij elke levering meegestuurd:
X-LP-Signature- de HMAC-SHA256-handtekening (sha256=...)X-LP-Timestamp- Unix-tijdstempel gebruikt voor ondertekeningX-LP-Event- het event-type (note.created,task.created,calendar_event.created,report.created)X-LP-Delivery-Id- uniek leverings-ID (handig voor deduplicatie)User-Agent- altijdTellDone-Webhooks/1.0
De handtekening-headers worden bij elke levering meegestuurd, ongeacht andere instellingen.
Standaard bevat elke levering het signing secret van je automation in de Authorization-header - tools zoals n8n Header Auth werken daardoor direct door het secret als auth-waarde te plakken. Als je een aangepaste auth-header instelt in de instellingen, vervangt die de standaard. Je kunt twee formaten gebruiken: Header-Name: waarde (stuurt de benoemde header) of een gewone waarde (stuurt die als Authorization: <waarde>).
Elke automation heeft een eigen signing secret, dus een roteren beinvloedt geen van je andere webhooks. Het secret wordt volledig getoond alleen wanneer je de automation voor het eerst aanmaakt of na het roteren. Op alle andere momenten wordt alleen een voorbeeld (whsec_...last4) getoond. Om het te vervangen door een nieuw, tik op "Roteer secret" in de automation-instellingen - dit genereert een nieuwe HMAC-sleutel zonder de URL of auth-header te wijzigen. Het oude secret werkt direct niet meer.
Alleen HTTPS-URLs worden geaccepteerd. HTTP, IP-adressen en privénetwerkadressen worden geweigerd.
Webhook-handtekeningen verifiëren
Elke levering bevat een handtekening-header in de vorm X-LP-Signature: sha256=<hex>. Het voorbeeld hieronder laat zien hoe je dit verifieert in Python.
Elke webhook is ondertekend zodat je kunt bevestigen dat hij echt van TellDone afkomt. De handtekening wordt berekend als:
HMAC-SHA256(signing_secret, timestamp + "." + raw_body)
Het resultaat wordt in hex gecodeerd en voorafgegaan door sha256= in de handtekening-header.
TellDone serialiseert JSON met spaties na separators (bijv. {"event": "note.created"}). Als je de body parseert en opnieuw serialiseert, klopt de handtekening niet. Verifieer altijd tegen de ruwe bytes van de request-body.
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");
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}
// 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...
});
Replay-bescherming (optioneel)
Om replay-aanvallen te voorkomen, controleer 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
| Fout | Oplossing |
|---|---|
| Geparsete + opnieuw geserialiseerde body gebruiken | Gebruik de ruwe request-body |
JSON.stringify() in JS (compact, geen spaties) | Gebruik de ruwe body of evenaar Python-spacing |
| De timestamp-prefix vergeten | Payload-formaat is timestamp + "." + body |
| Strings rechtstreeks vergelijken | Gebruik hmac.compare_digest of timingSafeEqual |
Retry-beleid
Als je endpoint faalt, herhaalt TellDone elke levering met exponentiele backoff (een paar minuten, daarna langere intervallen):
| Poging | Vertraging |
|---|---|
| 1e retry | 30 seconden |
| 2e retry | 2 minuten |
| 3e retry | 15 minuten |
| 4e retry | 1 uur |
| 5e retry | 4 uur |
Na 5 mislukte pogingen wordt de levering gemarkeerd als dood. Je kunt het nog steeds handmatig opnieuw proberen vanuit het Leveringslog.
Hoe TellDone verschillende antwoorden afhandelt:
- 2xx - succesvol geleverd
- 4xx (behalve 429) - direct als dood gemarkeerd, geen retry (je endpoint heeft de data expliciet geweigerd)
- 429 (Too Many Requests) - retries, respecteert de
Retry-After-header - 5xx of timeout - retries volgens het bovenstaande schema
Wanneer leveringen herhaaldelijk falen
Je hoeft het Leveringslog niet in de gaten te houden om te weten wanneer er iets kapot is. TellDone houdt opeenvolgende mislukkingen voor je in de gaten en neemt in twee fasen contact op.
Na 3 mislukkingen: Postvak in-waarschuwing
Na 3 opeenvolgende mislukte leveringen maakt TellDone een bericht in je Postvak in onder de categorie "Webhookfouten". Het bericht noemt de getroffen automation en linkt je rechtstreeks naar Instellingen > Integraties > Automations > [de mislukte automation] > Leveringslog zodat je het antwoord kunt inspecteren en kunt beslissen wat te doen.
Postvak in-waarschuwingen betekenen dat je via de app-iconbadge te weten komt dat automations kapot zijn, in plaats van het weken later te ontdekken aan ontbrekende data in je downstream-tool.
Na 20 mislukkingen: automatisch uitschakelen
Als 20 opeenvolgende leveringen voor dezelfde automation mislukken (geteld na de Postvak in-waarschuwing), zet TellDone de automation automatisch uit om te stoppen met pingen van een kapot endpoint en om je maandelijkse leveringsquotum te beschermen. Los het probleem bij de bestemming op en schakel de automation daarna opnieuw in via Instellingen > Integraties > Automations.
De teller voor opeenvolgende mislukkingen reset naar nul bij de volgende geslaagde levering.
Webhooks beheren
- Pauzeren/hervatten - schakel een automation uit zonder te verwijderen, schakel altijd weer in
- Leveringslog - bekijk alle leveringen met status, HTTP-code en responstijd. Filter op Geleverd of Fouten. Tik op een mislukte levering en kies "Opnieuw proberen" om deze opnieuw te versturen zonder op de volgende geplande retry te wachten
- Test - tik op "Test" om een voorbeeld-payload (met
"test": truein de body) naar je endpoint te sturen zonder een echt event aan te maken. Test-verzendingen tellen niet mee voor je maandelijkse quotum - Roteer secret - genereer een nieuw HMAC-signing secret zonder de URL of auth-header te wijzigen
- Bewerk - werk URL, auth-header of payload-toggles bij (notities / audio / taken / afspraken / rapporten). Wijzigingen werken direct
- Verwijder - verwijdert de automation en al zijn leveringslogs permanent
Leveringslimieten
Webhook-levering heeft twee limieten: een maandelijks quotum (harde limiet, verschilt per abonnement) en een uurlijkse anti-burst-limiet (zachte limiet, identiek op alle betaalde abonnementen).
| Abonnement | Webhooks | Maandelijkse leveringen | Burst per uur |
|---|---|---|---|
| Free | 0 | 0 | - |
| Basic | 1 | 300 | 100 |
| Pro | 3 | 3.000 | 100 |
| Ultra | 10 | 15.000 | 100 |
Het Ultra-abonnement ondersteunt ook audiolinks in notitie-payloads (verloopt na 24 uur).
Hoe de limieten zich gedragen:
- Maandlimiet overschreden: de levering wordt gemarkeerd als mislukt zonder nieuwe poging. Nieuwe leveringen hervatten op de 1e van de volgende maand, wanneer de teller wordt gereset.
- Uurlimiet overschreden: de levering wordt uitgesteld en na ongeveer 5 minuten opnieuw geprobeerd, zodat een korte burst geen data verliest. Dit is een zachte anti-burst-beveiliging, geen definitieve afwijzing.
Test-verzendingen en handmatige nieuwe leveringen vanuit het leveringslogboek tellen voor geen van beide limieten mee.
Test-events filteren
Wanneer je op "Test" tikt, bevat de payload op het hoofdniveau "test": true. In je automation-tool kun je op dit veld controleren en de verwerking overslaan wanneer dit aanwezig is.
Platformgidsen
Voor stapsgewijze setup-instructies met je automation-tool:
- Zapier - verbind TellDone met duizenden apps via Zaps
- Make - bouw visuele automation-scenario's (voorheen Integromat)
- n8n - gebruik TellDone-webhooks in zelfgehoste of cloud-workflows
- Custom endpoints - elke service die HTTPS-POST-verzoeken accepteert werkt met TellDone-webhooks
Populaire use cases
- Stuur taken naar een Google Sheet via Zapier
- Maak Slack-berichten van notities via Make
- Log afspraken in een aangepast CRM via n8n
- Maak back-ups van alle notities naar cloud-opslag
- Stuur rapporten door naar een teamdashboard
Zie ook
- Postvak in en support - als een webhook herhaaldelijk faalt, zie je een bericht in je Postvak in
- Zapier - stapsgewijze Zapier-setup
- Make - stapsgewijze Make-setup
- n8n - stapsgewijze n8n-setup
- Todoist - dedicated tweerichtings tasksync (geen webhooks nodig)
- Notion - dedicated Notion-integratie
- E-mail doorsturen - notitiedata via e-mail ontvangen