メインコンテンツまでスキップ

Webhook自動化

Basic以上のプラン

Webhookには有料プランが必要です。Basic: Webhook 1、Pro: 3、Ultra: 10。

WebhookはTellDoneを任意の外部サービスに接続できるようにします。音声ノートを作成すると、TellDoneが処理して、抽出されたデータ(ノート、タスク、イベント、レポート)を指定したURLに自動送信します。各タスクとイベントは個別の配信として送信されるので、自動化ツールで個別に処理できます。

何を送るかを選ぶ

各自動化には独自のペイロードトグルがあります。1つまたは任意の組み合わせを選んでください:

  • ノート - 完全に処理されたノート(タイトル、文字起こし、要約、タグ、言語)
  • オーディオ - Ultraプランでは、オーディオファイルへの24時間ダウンロードリンクをノートペイロードとともに添付
  • タスク - 抽出された各タスクごとに1配信
  • イベント - 抽出された各カレンダーイベントごとに1配信
  • レポート - 生成された日次、週次、月次、年次レポートごとに1配信

トグルは自動化の設定からいつでも変更できます。変更は新しいイベントにのみ適用されます。

Webhookのセットアップ

Zapier、Make、n8n用の設定自動化

  1. 設定 > 連携 > Webhook自動化へ進む
  2. 新しい自動化をタップ

新しい自動化Webhookセットアップ

  1. 名前を入力(例: 「My Zapier webhook」)
  2. 自動化サービスからのWebhook URLを貼り付け
  3. 送信するデータを選択: ノート、タスク、イベント、レポート(または任意の組み合わせ)
  4. 任意で認証ヘッダーを追加 - セキュアなエンドポイント用にAuthorizationヘッダーとして送信されるトークン
  5. 保存をタップ
  6. 署名シークレットをコピー - 自動化を最初に作成したときか、ローテーション後にのみ全文が表示されます。Webhookの真正性を検証したい場合に必要です
  7. **「テスト」**をタップして、実際のイベントを作成せずにサンプルペイロードをエンドポイントに送信
ヒント

Webhook URLはHTTPSを使う必要があります。HTTPアドレスとプライベートネットワークIPは受け付けられません。

送信内容

各配信は3つのフィールド(event(イベントタイプ)、timestampdata(実際のコンテンツ))を持つJSONオブジェクトです。各イベントタイプは以下のようになります。

ノート(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_urlaudio_formatduration_seconds)を含めることもできます。リンクは24時間後に期限切れになります。自動化を作成するときに「ノート + オーディオ」オプションで有効化してください。

タスク(task.created)

タスクごとに1配信。3つのタスクを持つ1つのノートは3つの個別Webhookを送信します。

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

カレンダーイベントごとに1配信。

{
"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.createdtask.createdcalendar_event.createdreport.created)
  • X-LP-Delivery-Id - 一意の配信ID(重複排除に便利)
  • User-Agent - 常にTellDone-Webhooks/1.0

署名ヘッダーは他の設定にかかわらず、すべての配信で送信されます。

デフォルトでは、すべての配信に自動化の署名シークレットがAuthorizationヘッダーで含まれます。n8nのHeader Authなどのツールはシークレットをauth値として貼り付けるだけで動作します。設定でカスタム認証ヘッダーを設定すると、このデフォルトが置き換えられます。2つの形式が使えます: Header-Name: value(指定のヘッダーを送信)またはプレーンな値(Authorization: <value>として送信)。

各自動化には独自の署名シークレットがあるので、1つをローテーションしても他のWebhookには影響しません。シークレットは自動化を最初に作成したときか、ローテーション後にのみ全文が表示されます。それ以外の場合はプレビュー(whsec_...last4)のみ表示されます。新しいものに交換するには、自動化設定の**「シークレットをローテーション」**をタップしてください。これによりURLや認証ヘッダーを変更せずに新しいHMACキーが生成されます。古いシークレットはすぐに動作しなくなります。

HTTPSのURLのみが受け付けられます。HTTP、IPアドレス、プライベートネットワークアドレスは拒否されます。

Webhook署名の検証

HMACの検証

各配信にはX-LP-Signature: sha256=<hex>形式の署名ヘッダーが含まれます。以下の例はPythonでの検証方法です。

各WebhookはTellDoneから本当に来たことを確認できるように署名されています。署名は次のように計算されます:

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

結果は16進エンコードされ、署名ヘッダーで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 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...
});

リプレイ保護(任意)

リプレイ攻撃を防ぐために、タイムスタンプが最近のものか確認してください:

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

よくある間違い

間違い修正
解析+再シリアル化したボディを使う生のリクエストボディを使う
JSのJSON.stringify()(コンパクト、スペースなし)生のボディを使うかPythonのスペーシングに合わせる
タイムスタンププレフィックスを忘れるペイロード形式はtimestamp + "." + body
文字列を直接比較hmac.compare_digestまたはtimingSafeEqualを使う

リトライポリシー

エンドポイントが失敗すると、TellDoneは指数バックオフ(数分から始まり、より長い間隔)で各配信をリトライします:

試行遅延
1回目のリトライ30秒
2回目のリトライ2分
3回目のリトライ15分
4回目のリトライ1時間
5回目のリトライ4時間

5回失敗すると、配信はデッドとしてマークされます。配信ログから手動でリトライできます。

TellDoneがさまざまな応答を処理する方法:

  • 2xx - 正常に配信
  • 4xx(429を除く) - すぐにデッドとしてマーク、リトライなし(エンドポイントが明示的にデータを拒否)
  • 429(Too Many Requests) - リトライし、Retry-Afterヘッダーを尊重
  • 5xxまたはタイムアウト - 上記のスケジュールでリトライ

配信が繰り返し失敗するとき

何かが壊れていることを知るために配信ログを見続ける必要はありません。TellDoneが連続失敗を監視し、2段階で連絡します。

3回失敗後: 受信箱の警告

3回連続で配信が失敗した後、TellDoneは**「Webhookエラー」**カテゴリーで受信箱にメッセージを作成します。メッセージは影響を受ける自動化に名前を付け、設定 > 連携 > 自動化 > [失敗した自動化] > 配信ログに直接リンクするので、レスポンスを調べて何をすべきか判断できます。

ヒント

受信箱アラートは、下流ツールの欠落データから何週間も後に気づく代わりに、アプリアイコンバッジから壊れた自動化を発見できることを意味します。

20回失敗後: 自動無効化

自動無効化

同じ自動化で20回連続配信が失敗すると(受信箱警告の後にカウント)、TellDoneは壊れたエンドポイントへの送信を止め、月間配信クォータを保護するために自動化を自動的にオフにします。送信先で問題を修正してから、設定 > 連携 > 自動化で自動化を再度有効化してください。

連続失敗カウンターは次の正常な配信でゼロにリセットされます。

Webhookの管理

  • 一時停止/再開 - 削除せずに任意の自動化を無効化、いつでも再有効化
  • 配信ログ - すべての配信をステータス、HTTPコード、応答時間とともに表示。Delivered または Errors でフィルター。失敗した配信をタップして**「リトライ」**を選ぶと、次のスケジュールリトライを待たずに再送できます
  • テスト - **「テスト」**をタップして、実際のイベントを作成せずにサンプルペイロード(ボディに"test": true付き)をエンドポイントに送信。テスト送信は月間クォータにカウントされません
  • シークレットをローテーション - URLや認証ヘッダーを変更せずに新しいHMAC署名シークレットを生成
  • 編集 - URL、認証ヘッダー、またはペイロードトグル(ノート / オーディオ / タスク / イベント / レポート)を更新。変更はすぐに反映されます
  • 削除 - 自動化とそのすべての配信ログを永続的に削除

配信の上限

Webhook配信には2つの上限があります: 月間クォータ(ハード上限、プランごとに異なる)と毎時バースト上限(ソフト上限、すべての有料プランで共通)です。

プランWebhook月間配信毎時バースト
Free00-
Basic1300100
Pro33,000100
Ultra1015,000100

Ultraプランはノートペイロードでのオーディオリンク(24時間有効)もサポートします。

上限の挙動:

  • 月間上限を超過: 配信は失敗としてマークされ、再試行は行われません。カウンターがリセットされる翌月1日に新しい配信が再開されます。
  • 毎時上限を超過: 配信は約5分後に延期して再試行されるため、短時間のバーストではデータが失われません。これはソフトなバースト防止であり、恒久的な拒否ではありません。

テスト送信や配信ログからの手動再配信は、どちらの上限にもカウントされません。

テストイベントのフィルタリング

**「テスト」**をタップすると、ペイロードのトップレベルに"test": trueが含まれます。自動化ツールでこのフィールドをチェックし、存在する場合は処理をスキップできます。

プラットフォームガイド

自動化ツール別のステップバイステップのセットアップ手順:

  • Zapier - ZapでTellDoneを数千のアプリに接続
  • Make - ビジュアル自動化シナリオを構築(旧Integromat)
  • n8n - セルフホストまたはクラウドのワークフローでTellDone Webhookを使用
  • カスタムエンドポイント - HTTPS POSTリクエストを受け付ける任意のサービスはTellDone Webhookで動作します

人気の利用例

  • Zapier経由でタスクをGoogle Sheetに送信
  • Make経由でノートからSlackメッセージを作成
  • n8n経由でカスタムCRMにイベントを記録
  • すべてのノートをクラウドストレージにバックアップ
  • レポートをチームダッシュボードに転送

関連項目

  • 受信箱とサポート - Webhookが繰り返し失敗すると、受信箱にメッセージが表示されます
  • Zapier - ステップバイステップのZapierセットアップ
  • Make - ステップバイステップのMakeセットアップ
  • n8n - ステップバイステップのn8nセットアップ
  • Todoist - 専用の双方向タスク同期(Webhook不要)
  • Notion - 専用のNotion連携
  • メール転送 - メールでノートデータを受信