Перейти к основному содержимому

Вебхук-автоматизации

План Basic и выше

Вебхуки требуют платный план. Basic: 1 вебхук, Pro: 3, Ultra: 10.

Вебхуки позволяют подключить TellDone к любому внешнему сервису. Когда ты создаешь голосовую заметку, TellDone обрабатывает ее и автоматически отправляет извлеченные данные - заметки, задачи, события и отчеты - на указанный тобой URL. Каждая задача и событие отправляются отдельной доставкой, чтобы твой инструмент автоматизации мог обрабатывать их по отдельности.

Что отправлять

У каждой автоматизации свои переключатели payload. Выбери один или любую комбинацию:

  • Заметки - обработанная заметка целиком (заголовок, транскрипция, резюме, теги, язык)
  • Аудио - на плане Ultra прикладывает к заметке ссылку на аудиофайл, действительную 24 часа
  • Задачи - одна доставка на каждую извлеченную задачу
  • События - одна доставка на каждое извлеченное событие календаря
  • Отчеты - одна доставка на каждый сгенерированный ежедневный, еженедельный, ежемесячный или годовой отчет

Переключатели можно менять в любой момент в настройках автоматизации - изменения применяются только к новым событиям.

Настройка вебхука

Настройки автоматизаций для Zapier, Make и n8n

  1. Зайди в Настройки > Интеграции > Webhook Automations
  2. Нажми Новая автоматизация

Настройка нового вебхука

  1. Введи название (например, "Мой вебхук Zapier")
  2. Вставь URL вебхука из твоего сервиса автоматизации
  3. Выбери, какие данные отправлять: заметки, задачи, события, отчеты (или любую комбинацию)
  4. При необходимости добавь auth header - токен, который отправляется в заголовке Authorization для защищенных эндпоинтов
  5. Нажми Сохранить
  6. Скопируй секрет подписи - он показывается полностью только при первом создании или после ротации. Он понадобится, если захочешь проверять подлинность вебхуков
  7. Нажми "Test", чтобы отправить тестовый payload на эндпоинт без создания реального события
подсказка

URL вебхука должен использовать HTTPS. HTTP-адреса и IP-адреса частных сетей не принимаются.

Что отправляется

Каждая доставка - это JSON-объект с тремя полями: event (тип события), timestamp и data (содержимое). Вот как выглядит каждый тип события.

Заметки (note.created)

Содержит AI-генерированный заголовок, полную транскрипцию, резюме, тип заметки, теги, приоритет, язык и дату создания.

{
"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 доставки заметок могут также включать ссылку на аудиозапись (audio_url, audio_format, duration_seconds). Ссылка действительна 24 часа. Включи это опцией "Note + Audio" при создании автоматизации.

Задачи (task.created)

Одна доставка на задачу. Одна заметка с 3 задачами отправляет 3 отдельных вебхука.

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

События (calendar_event.created)

Одна доставка на событие календаря.

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

Отчеты (report.created)

Отправляется при генерации ежедневного, еженедельного, ежемесячного или годового отчета.

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

Безопасность

Каждая доставка подписана HMAC-SHA256 с использованием секрета подписи твоей автоматизации. С каждой доставкой отправляются следующие заголовки:

  • X-LP-Signature - подпись HMAC-SHA256 (sha256=...)
  • X-LP-Timestamp - временная метка Unix, использованная при подписи
  • X-LP-Event - тип события (note.created, task.created, calendar_event.created, report.created)
  • X-LP-Delivery-Id - уникальный ID доставки (полезен для дедупликации)
  • User-Agent - всегда TellDone-Webhooks/1.0

Заголовки подписи отправляются с каждой доставкой, независимо от других настроек.

По умолчанию каждая доставка включает секрет подписи автоматизации в заголовке Authorization - поэтому инструменты вроде n8n Header Auth работают из коробки: просто вставь секрет как значение auth. Если ты задаёшь кастомный auth header в настройках, он заменяет этот дефолт. Поддерживаются два формата: Header-Name: value (отправляет указанный заголовок) или просто значение (отправляет его как Authorization: <value>).

У каждой автоматизации свой секрет подписи, поэтому ротация одного не затрагивает другие вебхуки. Секрет показывается полностью только при создании или после ротации. Всё остальное время виден только превью (whsec_...last4). Чтобы заменить его, нажми "Rotate secret" в настройках автоматизации - это сгенерирует новый ключ HMAC, не меняя URL и auth header. Старый секрет перестает работать немедленно.

Принимаются только HTTPS URL. HTTP, IP-адреса и адреса частных сетей отклоняются.

Проверка подписи вебхуков

Verify HMAC

Каждая доставка содержит заголовок подписи в формате X-LP-Signature: sha256=<hex>. Пример ниже показывает, как проверить подпись на Python.

Каждый вебхук подписан, чтобы ты мог убедиться, что он действительно пришел от TellDone. Подпись вычисляется как:

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

Результат кодируется в hex и добавляется префикс sha256= в заголовок подписи.

Используй сырое тело запроса

TellDone сериализует JSON с пробелами после разделителей (например, {"event": "note.created"}). Если ты распарсишь и пересериализуешь тело, подпись не совпадет. Всегда проверяй подпись по сырым байтам тела запроса.

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
@app.route("/webhook/telldone", methods=["POST"])
def telldone_webhook():
raw_body = request.get_data() # сырые байты, НЕ 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
# обработка вебхука...

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 (используй express.raw для получения сырого тела)
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);
// обработка вебхука...
});

Защита от повторного воспроизведения (опционально)

Чтобы предотвратить replay-атаки, проверяй что timestamp свежий:

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

Частые ошибки

ОшибкаРешение
Использование распарсенного и пересериализованного телаИспользуй сырое тело запроса
JSON.stringify() в JS (компактный формат, без пробелов)Используй сырое тело или воспроизведи формат Python
Забыть префикс timestampФормат: timestamp + "." + body
Прямое сравнение строкИспользуй hmac.compare_digest или timingSafeEqual

Политика повторных попыток

Если твой эндпоинт не отвечает, TellDone повторяет каждую доставку с экспоненциальным backoff (несколько минут вначале, затем интервалы длиннее):

ПопыткаЗадержка
1-я повторная30 секунд
2-я повторная2 минуты
3-я повторная15 минут
4-я повторная1 час
5-я повторная4 часа

После 5 неудачных попыток доставка помечается как мертвая. Ты все равно можешь повторить ее вручную из Delivery log.

Как TellDone обрабатывает разные ответы:

  • 2xx - доставлено успешно
  • 4xx (кроме 429) - сразу помечается как мертвая, без повторных попыток (эндпоинт явно отклонил данные)
  • 429 (Too Many Requests) - повторяется с учетом заголовка Retry-After
  • 5xx или таймаут - повторяется по расписанию выше

Когда доставки регулярно не проходят

Тебе не нужно сидеть в Delivery log, чтобы заметить, что что-то сломалось. TellDone сам следит за подряд идущими ошибками и сообщает о них в два этапа.

После 3 ошибок: предупреждение в Inbox

После 3 неудачных доставок подряд TellDone создает сообщение в твоем Inbox в категории "Webhook failures". В сообщении указана проблемная автоматизация и есть ссылка прямо на Настройки > Интеграции > Automations > [сломанная автоматизация] > Delivery log, чтобы ты мог посмотреть ответ и решить, что делать.

подсказка

Уведомления в Inbox означают, что ты узнаешь о сломанных автоматизациях по бейджу на иконке приложения, а не через несколько недель по отсутствующим данным в подключенном сервисе.

После 20 ошибок: автоотключение

Auto-disable

Если 20 доставок подряд для одной автоматизации провалятся (счет идет после предупреждения в Inbox), TellDone автоматически выключает ее, чтобы перестать стучать в неработающий эндпоинт и сохранить твою месячную квоту доставок. Исправь проблему на стороне получателя и снова включи автоматизацию в Настройках > Интеграции > Automations.

Счетчик подряд идущих ошибок сбрасывается до нуля при следующей успешной доставке.

Управление вебхуками

  • Пауза/возобновление - отключи любую автоматизацию без удаления, включи заново в любой момент
  • Delivery log - просматривай все доставки со статусом, HTTP-кодом и временем ответа. Фильтруй по Доставленным или Ошибкам. Нажми любую неудачную доставку и выбери "Retry", чтобы переотправить ее, не дожидаясь следующей запланированной попытки
  • Test - нажми "Test", чтобы отправить тестовый payload (с "test": true в теле) на эндпоинт без создания реального события. Тестовые отправки не учитываются в месячной квоте
  • Rotate secret - сгенерируй новый секрет HMAC, не меняя URL и auth header
  • Редактирование - обнови URL, auth header или переключатели payload (заметки / аудио / задачи / события / отчеты). Изменения вступают в силу немедленно
  • Удаление - навсегда удаляет автоматизацию и все логи доставок

Лимиты доставки

У доставки вебхуков два лимита: месячная квота (жесткий лимит, зависит от плана) и часовой антивсплесковый лимит (мягкий лимит, одинаковый на всех платных планах).

ПланВебхукиДоставок в месяцВсплеск в час
Free00-
Basic1300100
Pro33 000100
Ultra1015 000100

На плане Ultra также поддерживаются ссылки на аудио в доставках заметок (срок действия 24 часа).

Как ведут себя лимиты:

  • Месячная квота исчерпана - доставка помечается как неуспешная без повторов. Новые доставки возобновляются 1-го числа следующего месяца, когда счетчик сбрасывается.
  • Часовой лимит исчерпан - доставка откладывается и повторяется примерно через 5 минут, поэтому короткий всплеск не теряет данные. Это мягкая защита от всплесков, а не окончательный отказ.

Тестовые отправки и ручные повторы из журнала доставок не считаются ни в одном из лимитов.

Фильтрация тестовых событий

При нажатии "Test" в тело запроса добавляется "test": true на верхнем уровне. В своем инструменте автоматизации ты можешь проверять это поле и пропускать обработку, когда оно присутствует.

Инструкции для платформ

Пошаговые инструкции по настройке для твоего инструмента автоматизации:

  • Zapier - подключи TellDone к тысячам приложений через Zap
  • Make - строй визуальные сценарии автоматизации (ранее Integromat)
  • n8n - используй вебхуки TellDone в воркфлоу с собственным хостингом или в облаке
  • Свои эндпоинты - любой сервис, принимающий HTTPS POST-запросы, работает с вебхуками TellDone

Популярные сценарии

  • Отправка задач в Google Sheets через Zapier
  • Создание сообщений в Slack из заметок через Make
  • Логирование событий в CRM через n8n
  • Бэкап всех заметок в облачное хранилище
  • Пересылка отчетов на командный дашборд

Смотри также

  • Inbox и поддержка - если вебхук регулярно падает, ты увидишь сообщение в Inbox
  • Zapier - пошаговая настройка Zapier
  • Make - пошаговая настройка Make
  • n8n - пошаговая настройка n8n
  • Todoist - выделенная двусторонняя синхронизация задач (без вебхуков)
  • Notion - выделенная интеграция для Notion
  • Пересылка по email - получай данные заметок по email