Przejdź do głównej zawartości

Automatyzacje webhookami

Plan Basic i wyższe

Webhooki wymagają płatnego planu. Basic: 1 webhook, Pro: 3, Ultra: 10.

Webhooki pozwalają połączyć TellDone z dowolną usługą zewnętrzną. Gdy tworzysz notatkę głosową, TellDone ją przetwarza i automatycznie wysyła wyodrębnione dane - notatki, zadania, wydarzenia i raporty - na podany przez ciebie URL. Każde zadanie i wydarzenie wysyłane jest jako osobna dostawa, więc twoje narzędzie automatyzacji może je obsługiwać pojedynczo.

Wybór tego, co wysyłać

Każda automatyzacja ma własne przełączniki ładunku. Wybierz jeden lub dowolną kombinację:

  • Notes - pełna przetworzona notatka (tytuł, transkrypt, podsumowanie, tagi, język)
  • Audio - w planie Ultra dołącz 24-godzinny link do pobrania pliku audio obok ładunku notatki
  • Tasks - jedna dostawa na wyodrębnione zadanie
  • Events - jedna dostawa na wyodrębnione wydarzenie kalendarzowe
  • Reports - jedna dostawa na wygenerowany raport dzienny, tygodniowy, miesięczny lub roczny

Przełączniki możesz zmieniać w dowolnej chwili z ustawień automatyzacji - zmiany dotyczą tylko nowych zdarzeń.

Konfiguracja webhooka

Ustawienia automatyzacji dla Zapier, Make i n8n

  1. Wejdź w Ustawienia > Integracje > Automatyzacje webhookami
  2. Naciśnij Nowa automatyzacja

Konfiguracja nowej automatyzacji webhooka

  1. Wpisz nazwę (np. "Mój webhook Zapier")
  2. Wklej URL webhooka z usługi automatyzacji
  3. Wybierz, jakie dane wysyłać: notatki, zadania, wydarzenia, raporty (lub dowolną kombinację)
  4. Opcjonalnie dodaj nagłówek auth - wartość jest domyślnie wysyłana w nagłówku Authorization. Jeśli twój endpoint używa innej nazwy nagłówka, możesz ją dostosować w polu nagłówka auth
  5. Naciśnij Zapisz
  6. Skopiuj sekret podpisu - pojawia się tylko przy tworzeniu lub rotacji. Zapisz go teraz; nie możesz go zobaczyć ponownie bez rotacji
  7. Naciśnij "Test", by wysłać przykładowy ładunek do endpointa bez tworzenia prawdziwego zdarzenia
wskazówka

URL webhooka musi używać HTTPS. Adresy HTTP i adresy z sieci prywatnej nie są akceptowane.

Co jest wysyłane

Każda dostawa to obiekt JSON z trzema polami: event (typ zdarzenia), timestamp i data (faktyczna treść). Oto, jak wygląda każdy typ zdarzenia.

Notatki (note.created)

Zawiera tytuł wygenerowany przez AI, pełny transkrypt, podsumowanie, typ notatki, tagi, priorytet, język i datę utworzenia.

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

W planie Ultra dostawy notatek mogą zawierać też link do nagrania audio (audio_url, audio_format, duration_seconds). Link wygasa po 24 godzinach. Włącz to opcją "Note + Audio" przy tworzeniu automatyzacji.

Zadania (task.created)

Jedna dostawa na zadanie. Pojedyncza notatka z 3 zadaniami wysyła 3 osobne webhooki.

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

Wydarzenia (calendar_event.created)

Jedna dostawa na wydarzenie kalendarzowe.

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

Raporty (report.created)

Wysyłane, gdy zostaje wygenerowany raport dzienny, tygodniowy, miesięczny lub roczny.

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

Bezpieczeństwo

Każda dostawa jest podpisywana HMAC-SHA256 z użyciem sekretu podpisu twojej automatyzacji. Z każdą dostawą trafiają następujące nagłówki:

  • X-LP-Signature - podpis HMAC-SHA256 (sha256=...)
  • X-LP-Timestamp - znacznik czasu Unix użyty do podpisania
  • X-LP-Event - typ zdarzenia (note.created, task.created, calendar_event.created, report.created)
  • X-LP-Delivery-Id - unikalne ID dostawy (przydatne do deduplikacji)
  • User-Agent - zawsze TellDone-Webhooks/1.0

Nagłówki podpisu są wysyłane z każdą dostawą, niezależnie od innych ustawień.

Jeśli ustawisz nagłówek auth w ustawieniach automatyzacji, jest on wysyłany domyślnie jako nagłówek Authorization przy każdej dostawie. Możesz zastąpić nazwę nagłówka inną (np. X-API-Key), jeśli twój endpoint tego wymaga. Jeśli pole nagłówka auth jest puste, żaden nagłówek auth nie jest wysyłany.

Każda automatyzacja ma własny sekret podpisu, więc rotacja jednego nie wpływa na inne webhooki. Sekret jest pokazywany tylko przy tworzeniu lub rotacji. Aby go wymienić, naciśnij "Rotuj sekret" w ustawieniach automatyzacji - generuje to nowy klucz HMAC bez zmiany URL ani nagłówka auth. Stary sekret natychmiast przestaje działać.

Akceptowane są tylko URL-e HTTPS. HTTP, adresy IP i adresy sieci prywatnych są odrzucane.

Weryfikacja podpisów webhooków

Zweryfikuj HMAC

Każda dostawa zawiera nagłówek podpisu w postaci X-LP-Signature: sha256=<hex>. Przykład poniżej pokazuje, jak go zweryfikować w Pythonie.

Każdy webhook jest podpisany, byś mógł potwierdzić, że faktycznie pochodzi z TellDone. Podpis liczy się jako:

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

Wynik jest kodowany w hex i poprzedzony sha256= w nagłówku podpisu.

Użyj surowego ciała żądania

TellDone serializuje JSON ze spacjami po separatorach (np. {"event": "note.created"}). Jeśli sparsujesz i ponownie zserializujesz ciało, podpis się nie zgodzi. Zawsze weryfikuj na surowych bajtach ciała żądania.

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

Ochrona przed powtórzeniami (opcjonalnie)

Aby zapobiec atakom typu replay, sprawdź, czy znacznik czasu jest świeży:

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

Częste pomyłki

PomyłkaNaprawa
Użycie sparsowanego i ponownie zserializowanego ciałaUżyj surowego ciała żądania
JSON.stringify() w JS (zwięzły, bez spacji)Użyj surowego ciała albo dopasuj odstępy z Pythona
Pominięcie prefiksu znacznika czasuFormat ładunku to timestamp + "." + body
Bezpośrednie porównanie ciągówUżyj hmac.compare_digest lub timingSafeEqual

Polityka ponawiania

Jeśli twój endpoint zawiedzie, TellDone ponawia każdą dostawę z wykładniczym backoffem (kilka minut, potem dłuższe odstępy):

PróbaOpóźnienie
1. ponowienie30 sekund
2. ponowienie2 minuty
3. ponowienie15 minut
4. ponowienie1 godzina
5. ponowienie4 godziny

Po 5 nieudanych próbach dostawa jest oznaczana jako dead. Wciąż możesz ją ręcznie ponowić z Dziennika dostaw.

Jak TellDone obsługuje różne odpowiedzi:

  • 2xx - dostarczono pomyślnie
  • 4xx (poza 429) - od razu oznaczone jako dead, bez ponowienia (twój endpoint jawnie odrzucił dane)
  • 429 (Too Many Requests) - ponawia, respektuje nagłówek Retry-After
  • 5xx lub timeout - ponawia z harmonogramem powyżej

Gdy dostawy zawodzą wielokrotnie

Nie musisz pilnować Dziennika dostaw, by wiedzieć, że coś jest zepsute. TellDone obserwuje kolejne porażki za ciebie i kontaktuje się w dwóch etapach.

Po 3 porażkach: ostrzeżenie w Skrzynce

Po 3 kolejnych nieudanych dostawach TellDone tworzy wiadomość w twojej Skrzynce odbiorczej w kategorii "Błędy webhooków". Wiadomość nazywa dotkniętą automatyzację i prowadzi cię prosto do Ustawienia > Integracje > Automatyzacje > [zepsuta automatyzacja] > Dziennik dostaw, byś mógł sprawdzić odpowiedź i zdecydować, co dalej.

wskazówka

Powiadomienia w Skrzynce sprawiają, że dowiesz się o zepsutych automatyzacjach z plakietki na ikonie aplikacji, zamiast odkrywać je tygodnie później po brakujących danych w narzędziu docelowym.

Po 20 porażkach: auto-wyłączenie

Auto-wyłączenie

Jeśli 20 kolejnych dostaw dla tej samej automatyzacji zawiedzie (liczone po ostrzeżeniu w Skrzynce), TellDone automatycznie wyłącza automatyzację, by nie pingować zepsutego endpointa i chronić twój miesięczny limit dostaw. Napraw problem po stronie celu, a następnie włącz automatyzację z powrotem w Ustawienia > Integracje > Automatyzacje.

Licznik kolejnych porażek resetuje się do zera przy następnej udanej dostawie.

Zarządzanie webhookami

  • Wstrzymaj/wznów - wyłącz dowolną automatyzację bez usuwania, włącz ponownie kiedy chcesz
  • Dziennik dostaw - zobacz wszystkie dostawy ze statusem, kodem HTTP i czasem odpowiedzi. Filtruj po Dostarczonych lub Błędach. Naciśnij dowolną nieudaną dostawę i wybierz "Ponów", by ją wysłać bez czekania na zaplanowane ponowienie
  • Test - naciśnij "Test", by wysłać przykładowy ładunek (z "test": true w ciele) do endpointa bez tworzenia prawdziwego zdarzenia. Wysyłki testowe nie są wliczane do miesięcznego limitu
  • Rotuj sekret - wygeneruj świeży sekret podpisu HMAC bez zmiany URL ani nagłówka auth
  • Edytuj - zaktualizuj URL, nagłówek auth lub przełączniki ładunku (notatki / audio / zadania / wydarzenia / raporty). Zmiany działają od razu
  • Usuń - trwale usuwa automatyzację i wszystkie jej dzienniki dostaw

Limity dostaw

Dostarczanie webhooków ma dwa limity: miesięczny limit (twardy, zależny od planu) oraz godzinny limit antywybuchowy (miękki, taki sam we wszystkich planach płatnych).

PlanWebhookiMiesięczne dostawyWybuch na godzinę
Free00-
Basic1300100
Pro33 000100
Ultra1015 000100

Plan Ultra obsługuje też linki audio w ładunkach notatek (24-godzinne wygaśnięcie).

Jak zachowują się limity:

  • Przekroczony limit miesięczny: dostawa jest oznaczana jako nieudana bez ponowienia. Nowe dostawy wznawiają się 1. dnia kolejnego miesiąca, gdy licznik się resetuje.
  • Przekroczony limit godzinny: dostawa jest odłożona i ponawiana po około 5 minutach, więc krótki wybuch nie traci danych. To miękkie zabezpieczenie antywybuchowe, a nie ostateczne odrzucenie.

Wysyłki testowe i ręczne ponowienia z dziennika dostaw nie są wliczane do żadnego z limitów.

Filtrowanie zdarzeń testowych

Gdy naciśniesz "Test", ładunek zawiera "test": true na najwyższym poziomie. W swoim narzędziu automatyzacji możesz sprawdzać to pole i pomijać przetwarzanie, gdy jest obecne.

Przewodniki platformowe

Krok po kroku konfiguracja w twoim narzędziu automatyzacji:

  • Zapier - połącz TellDone z tysiącami aplikacji przez Zaps
  • Make - buduj wizualne scenariusze automatyzacji (dawniej Integromat)
  • n8n - używaj webhooków TellDone w workflow self-hosted lub w chmurze
  • Niestandardowe endpointy - każda usługa przyjmująca żądania HTTPS POST działa z webhookami TellDone

Popularne zastosowania

  • Wysyłaj zadania do Google Sheet przez Zapier
  • Twórz wiadomości Slack z notatek przez Make
  • Loguj wydarzenia do własnego CRM przez n8n
  • Twórz kopię zapasową wszystkich notatek w chmurze
  • Przekazuj raporty na zespołowy dashboard

Zobacz też

  • Skrzynka odbiorcza i pomoc - jeśli webhook wielokrotnie zawodzi, zobaczysz wiadomość w Skrzynce
  • Zapier - krok po kroku konfiguracja Zapier
  • Make - krok po kroku konfiguracja Make
  • n8n - krok po kroku konfiguracja n8n
  • Todoist - dedykowana dwukierunkowa synchronizacja zadań (bez webhooków)
  • Notion - dedykowana integracja Notion
  • Przekazywanie e-mailem - otrzymuj dane notatek e-mailem