Webhook otomasyonları
Webhook'lar ücretli plan gerektirir. Basic: 1 webhook, Pro: 3, Ultra: 10.
Webhook'lar, TellDone'u herhangi bir dış servise bağlamana izin verir. Sesli bir not oluşturduğunda, TellDone bunu işler ve çıkarılan veriyi - notlar, görevler, etkinlikler ve raporlar - belirttiğin URL'ye otomatik olarak gönderir. Her görev ve etkinlik ayrı bir teslim olarak gönderilir, böylece otomasyon aracın bunları bireysel olarak işleyebilir.
Ne gönderileceğini seçme
Her otomasyonun kendi yük anahtarları vardır. Bir veya herhangi bir kombinasyonu seç:
- Notlar - tam işlenmiş not (başlık, transkript, özet, etiketler, dil)
- Ses - Ultra planında, not yüküne ses dosyasına 24 saatlik bir indirme bağlantısı ekle
- Görevler - çıkarılan görev başına bir teslim
- Etkinlikler - çıkarılan takvim etkinliği başına bir teslim
- Raporlar - oluşturulan günlük, haftalık, aylık veya yıllık rapor başına bir teslim
Anahtarları otomasyonun ayarlarından istediğin zaman değiştirebilirsin - değişiklikler yalnızca yeni olaylara uygulanır.
Bir webhook kurma

- Ayarlar > Entegrasyonlar > Webhook Otomasyonları'na git
- Yeni Otomasyon'a dokun

- Bir ad gir (örneğin, "Zapier webhook'um")
- Otomasyon servisinden webhook URL'sini yapıştır
- Hangi veriyi göndereceğini seç: notlar, görevler, etkinlikler, raporlar (veya herhangi bir kombinasyon)
- İsteğe bağlı olarak, bir auth header ekle - güvenli uç noktalar için
Authorizationbaşlığı olarak gönderilen bir token - Kaydet'e dokun
- İmzalama gizli anahtarını kopyala - otomasyonu ilk oluşturduğunda veya döndürdükten sonra yalnızca tam olarak gösterilir. Webhook orijinalliğini doğrulamak istersen ihtiyacın olur
- Gerçek bir olay oluşturmadan uç noktana örnek bir yük göndermek için "Test"'e dokun
Webhook URL'si HTTPS kullanmalıdır. HTTP adresleri ve özel ağ IP'leri kabul edilmez.
Ne gönderilir
Her teslim üç alanlı bir JSON nesnesidir: event (olay türü), timestamp ve data (gerçek içerik). Her olay türünün nasıl göründüğü:
Notlar (note.created)
AI ile oluşturulmuş başlığı, tam transkripti, özeti, not türünü, etiketleri, önceliği, dili ve oluşturma tarihini içerir.
{
"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"
}
}
Ultra planında, not teslimleri ses kaydına bir bağlantı (audio_url, audio_format, duration_seconds) da içerebilir. Bağlantı 24 saat sonra sona erer. Bunu otomasyonu oluştururken "Not + Ses" seçeneğiyle etkinleştir.
Görevler (task.created)
Görev başına bir teslim. 3 görevli tek bir not 3 ayrı webhook gönderir.
{
"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"
}
}
Etkinlikler (calendar_event.created)
Takvim etkinliği başına bir teslim.
{
"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"
}
}
Raporlar (report.created)
Günlük, haftalık, aylık veya yıllık bir rapor oluşturulduğunda gönderilir.
{
"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"
}
}
Güvenlik
Her teslim, otomasyonunun imzalama gizli anahtarı kullanılarak HMAC-SHA256 ile imzalanır. Aşağıdaki başlıklar her teslimle birlikte gönderilir:
X-LP-Signature- HMAC-SHA256 imzası (sha256=...)X-LP-Timestamp- imzalama için kullanılan Unix zaman damgasıX-LP-Event- olay türü (note.created,task.created,calendar_event.created,report.created)X-LP-Delivery-Id- benzersiz teslim kimliği (deduplikasyon için yararlı)User-Agent- her zamanTellDone-Webhooks/1.0
İmza başlıkları, diğer ayarlardan bağımsız olarak her teslimle gönderilir.
Varsayılan olarak, her teslim Authorization başlığında otomasyonun imzalama gizli anahtarını içerir; bu sayede n8n Header Auth gibi araçlar gizli anahtarı auth değeri olarak yapıştırarak kutudan çıkar çalışır. Ayarlarda özel bir auth header belirlersen, bu varsayılanın yerini alır. İki biçim kullanabilirsin: Header-Adı: değer (adlandırılmış başlığı gönderir) veya düz bir değer (Authorization: <değer> olarak gönderir).
Her otomasyonun kendi imzalama gizli anahtarı vardır, bu nedenle birini döndürmek diğer webhook'larından hiçbirini etkilemez. Gizli anahtar yalnızca otomasyonu ilk oluşturduğunda veya döndürdükten sonra tam olarak gösterilir. Diğer zamanlarda yalnızca bir önizleme (whsec_...son4) gösterilir. Yenisiyle değiştirmek için, otomasyon ayarlarında "Gizli anahtarı döndür"'e dokun - bu, URL'yi veya auth header'ı değiştirmeden yeni bir HMAC anahtarı oluşturur. Eski gizli anahtar hemen çalışmayı durdurur.
Yalnızca HTTPS URL'leri kabul edilir. HTTP, IP adresleri ve özel ağ adresleri reddedilir.
Webhook imzalarını doğrulama
Her teslim, X-LP-Signature: sha256=<hex> biçiminde bir imza başlığı içerir. Aşağıdaki örnek, bunu Python'da nasıl doğrulayacağını gösterir.
Her webhook imzalanır, böylece gerçekten TellDone'dan geldiğini onaylayabilirsin. İmza şöyle hesaplanır:
HMAC-SHA256(signing_secret, timestamp + "." + raw_body)
Sonuç hex kodlanır ve imza başlığında sha256= ile öneklenir.
TellDone JSON'u ayırıcılardan sonra boşluklarla serileştirir (örneğin {"event": "note.created"}). Gövdeyi ayrıştırıp yeniden serileştirirsen, imza eşleşmez. Her zaman istek gövdesinin ham byte'ları üzerinden doğrula.
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 örneği
@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
# webhook'u işle...
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 örneği (ham gövdeyi almak için express.raw kullan)
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);
// webhook'u işle...
});
Tekrar saldırılarına karşı koruma (isteğe bağlı)
Tekrar saldırılarını önlemek için, zaman damgasının yakın zamanda olduğunu kontrol et:
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
Yaygın hatalar
| Hata | Düzeltme |
|---|---|
| Ayrıştırılmış + yeniden serileştirilmiş gövde kullanma | Ham istek gövdesini kullan |
JS'de JSON.stringify() (kompakt, boşluksuz) | Ham gövde kullan veya Python boşluğuyla eşleştir |
| Zaman damgası önekini unutma | Yük biçimi timestamp + "." + body |
| Dizeleri doğrudan karşılaştırma | hmac.compare_digest veya timingSafeEqual kullan |
Yeniden deneme politikası
Uç noktan başarısız olursa, TellDone her teslimi üstel geri çekilmeyle yeniden dener (birkaç dakika, sonra daha uzun aralıklarla):
| Deneme | Gecikme |
|---|---|
| 1. yeniden deneme | 30 saniye |
| 2. yeniden deneme | 2 dakika |
| 3. yeniden deneme | 15 dakika |
| 4. yeniden deneme | 1 saat |
| 5. yeniden deneme | 4 saat |
5 başarısız denemeden sonra, teslim ölü olarak işaretlenir. Bunu yine de Teslim günlüğü'nden manuel olarak yeniden deneyebilirsin.
TellDone farklı yanıtları nasıl ele alır:
- 2xx - başarıyla teslim edildi
- 4xx (429 hariç) - hemen ölü olarak işaretlenir, yeniden deneme yok (uç noktan veriyi açıkça reddetti)
- 429 (Çok Fazla İstek) - yeniden dener,
Retry-Afterbaşlığına saygı gösterir - 5xx veya zaman aşımı - yukarıdaki programla yeniden dener
Teslimler tekrar tekrar başarısız olduğunda
Bir şeyin bozulduğunu bilmek için Teslim günlüğüne göz kulak olmana gerek yok. TellDone art arda hataları senin için izler ve iki aşamada sana ulaşır.
3 hatadan sonra: Gelen kutusu uyarısı
3 art arda başarısız teslimden sonra, TellDone Gelen kutunda "Webhook hataları" kategorisi altında bir mesaj oluşturur. Mesaj etkilenen otomasyonu adlandırır ve seni doğrudan Ayarlar > Entegrasyonlar > Otomasyonlar > [başarısız otomasyon] > Teslim günlüğü'ne bağlar, böylece yanıtı inceleyebilir ve ne yapacağına karar verebilirsin.
Gelen kutusu uyarıları, alt akış aracında eksik veriden haftalar sonra keşfetmek yerine bozulan otomasyonları uygulama simgesi rozetinden öğrenmen anlamına gelir.
20 hatadan sonra: Otomatik devre dışı bırakma
Aynı otomasyon için 20 art arda teslim başarısız olursa (Gelen kutusu uyarısından sonra sayılır), TellDone bozuk bir uç noktayı pinglemeyi durdurmak ve aylık teslim kotanı korumak için otomasyonu otomatik olarak kapatır. Sorunu hedefte düzelt, sonra Ayarlar > Entegrasyonlar > Otomasyonlar'dan otomasyonu yeniden etkinleştir.
Art arda hata sayacı, sonraki başarılı teslimde sıfıra döner.
Webhook'ları yönetme
- Duraklat/devam ettir - herhangi bir otomasyonu silmeden devre dışı bırak, istediğin zaman yeniden etkinleştir
- Teslim günlüğü - durum, HTTP kodu ve yanıt süresiyle tüm teslimleri görüntüle. Teslim Edildi veya Hatalar'a göre filtrele. Başarısız bir teslime dokun ve sonraki planlanmış yeniden denemeyi beklemeden yeniden göndermek için "Yeniden Dene"'yi seç
- Test - gerçek bir olay oluşturmadan uç noktana örnek bir yük (
"test": truegövdede) göndermek için "Test"'e dokun. Test gönderimleri aylık kotandan düşülmez - Gizli anahtarı döndür - URL'yi veya auth header'ı değiştirmeden yeni bir HMAC imzalama gizli anahtarı oluştur
- Düzenle - URL'yi, auth header'ı veya yük anahtarlarını (notlar / ses / görevler / etkinlikler / raporlar) güncelle. Değişiklikler hemen geçerli olur
- Sil - otomasyonu ve tüm teslim günlüklerini kalıcı olarak kaldırır
Teslim limitleri
Webhook tesliminin iki limiti vardır: aylık kota (plana göre değişen sert limit) ve saatlik patlama önleyici limit (tüm ücretli planlarda aynı, esnek limit).
| Plan | Webhook'lar | Aylık teslimler | Saatlik patlama |
|---|---|---|---|
| Free | 0 | 0 | - |
| Basic | 1 | 300 | 100 |
| Pro | 3 | 3,000 | 100 |
| Ultra | 10 | 15,000 | 100 |
Ultra planı, not yüklerinde ses bağlantılarını da destekler (24 saatlik son kullanma).
Limitler nasıl davranır:
- Aylık kota aşıldı: teslim, yeniden deneme yapılmadan başarısız olarak işaretlenir. Yeni teslimler, sayaç sıfırlandığında yani sonraki ayın 1'inde yeniden başlar.
- Saatlik limit aşıldı: teslim ertelenir ve yaklaşık 5 dakika sonra yeniden denenir, böylece kısa bir patlama veri kaybetmez. Bu, kalıcı bir reddetme değil, esnek bir patlama önleyici korumadır.
Test gönderimleri ve Teslim günlüğünden yapılan manuel yeniden teslimler iki limite de sayılmaz.
Test olaylarını filtreleme
"Test"'e dokunduğunda, yük en üst seviyede "test": true içerir. Otomasyon aracında bu alanı kontrol edebilir ve mevcut olduğunda işlemeyi atlayabilirsin.
Platform rehberleri
Otomasyon aracınla adım adım kurulum talimatları için:
- Zapier - Zap'larla TellDone'u binlerce uygulamaya bağla
- Make - görsel otomasyon senaryoları kur (eski adıyla Integromat)
- n8n - kendi sunucunda barındırılan veya bulut iş akışlarında TellDone webhook'larını kullan
- Özel uç noktalar - HTTPS POST isteklerini kabul eden herhangi bir servis TellDone webhook'larıyla çalışır
Popüler kullanım örnekleri
- Zapier üzerinden bir Google Sheet'e görevler gönder
- Make üzerinden notlardan Slack mesajları oluştur
- n8n üzerinden özel bir CRM'e etkinlikler kaydet
- Tüm notları bulut depolamaya yedekle
- Raporları bir ekip panosuna ilet
Ayrıca bkz.
- Gelen kutusu ve destek - bir webhook tekrar tekrar başarısız olursa, Gelen kutunda bir mesaj görürsün
- Zapier - adım adım Zapier kurulumu
- Make - adım adım Make kurulumu
- n8n - adım adım n8n kurulumu
- Todoist - özel iki yönlü görev senkronu (webhook gerekmez)
- Notion - özel Notion entegrasyonu
- E-posta iletme - not verilerini e-postayla al