跳到主要内容

n8n

Basic 套餐及以上

Webhook 需要付费套餐。限制和详情见 Webhook 自动化

n8n 是一个可自托管或在云端使用的自动化平台。使用 Webhook 节点把 TellDone 连接到 n8n。你的 n8n 实例必须有可从公网访问的 HTTPS URL。

设置

在 n8n 中

  1. 在你的工作流中添加一个 Webhook 节点
  2. 设置 HTTP 方法为 POST
  3. 设置路径(例如 telldone
  4. (可选)启用 Header Auth:Name = Authorization,Value = 你的密钥令牌
  5. 复制 Production URL(不是测试 URL)

在 TellDone 中

  1. 进入**「设置 > 集成 > Webhook 自动化」**
  2. 点按新建自动化并粘贴 n8n 的生产 URL
  3. 如果你在 n8n 启用了 Header Auth,请把同样的令牌作为认证头输入到 TellDone
  4. 选择要发送的数据类型
  5. 点按保存,再点按测试以发送示例载荷

检查 n8n 的执行日志 - 你应该看到一个带 "test": true 的载荷。

按事件类型路由

在 Webhook 节点后添加一个 Switch 节点,按事件类型路由数据:

  • 路由字段:来自传入数据的 event
  • 规则 1:等于 note.created - 路由到你的笔记操作
  • 规则 2:等于 task.created - 路由到你的任务操作
  • 规则 3:等于 calendar_event.created - 路由到你的日历操作
  • 规则 4:等于 report.created - 路由到你的报告操作

把每个 Switch 输出连接到合适的操作节点(Todoist、Google Calendar、Slack 等)。

有用的表达式

配置操作节点时,使用这些 n8n 表达式访问 TellDone 数据:

表达式说明
{{ $json.data.title }}笔记、任务或事件的标题
{{ $json.data.tags.join(', ') }}以逗号分隔的标签字符串
{{ $json.data.priority }}优先级
{{ $json.data.due_date }}截止日期(任务)
{{ $json.data.summary }}AI 生成的摘要(笔记)
{{ $json.event }}事件类型

每种数据类型的完整字段列表见 Webhook 自动化 - 发送的内容

过滤测试事件

在 Webhook 节点后立即添加一个 IF 节点:

  • 条件:{{ $json.test }} 不为 true
  • True 路径:你的工作流其余部分
  • False 路径:No Operation(丢弃测试事件)

示例工作流

  • Webhook - Switch - Todoist:创建带优先级和截止日期的任务
  • Webhook - Switch - Google Calendar:创建带时间、地点和参与人的事件
  • Webhook - Switch - Slack:把每日报告发布到频道
  • Webhook - Switch - Google Sheets:把所有笔记记录为表格行
  • Webhook - Switch - Notion:保存带标签和摘要的笔记

验证 Webhook 签名(可选)

n8n 中的原始请求体限制

n8n Code 节点只暴露解析后的 JSON 对象,而不是原始请求体。签名验证需要 TellDone 签名时的原始字节。在实际使用中,大多数 n8n 用户选择使用默认的 Authorization: <signing_secret> 头进行认证,而不是 HMAC 验证。

在生产中使用时,你可以通过检查 HMAC-SHA256 签名来验证 Webhook 数据确实来自 TellDone。在 Webhook 节点之后立即添加一个 Code 节点:

const crypto = require('crypto');

const secret = 'whsec_your_signing_secret_here';
const signature = $input.first().headers['x-lp-signature'];
const timestamp = $input.first().headers['x-lp-timestamp'];
const body = JSON.stringify($input.first().json);

const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(timestamp + '.' + body)
.digest('hex');

if (signature !== expected) {
throw new Error('Invalid webhook signature');
}

// Reject timestamps older than 5 minutes
const age = Math.floor(Date.now() / 1000) - parseInt(timestamp);
if (age > 300) {
throw new Error('Webhook timestamp too old');
}

return $input.all();

whsec_your_signing_secret_here 替换为你在 TellDone 创建自动化时复制的签名密钥。

断开连接

要停止向 n8n 发送数据:

  • 在 n8n 中停用工作流,或
  • 在 **TellDone「设置 > 集成 > Webhook 自动化」**中禁用或删除该自动化

另见