//
🇨🇳 中文
🇺🇸 English
🇯🇵 日本語
🇰🇷 한국어
🇫🇷 Français
🇩🇪 Deutsch
🇪🇸 Español
🇷🇺 Русский

本文详解如何在自托管n8n中集成Strava API。内容涵盖从开发者后台获取Client ID/Secret,到解决OAuth2回调域名(Callback Domain)配置难点的全流程。文章还提供了两套实用的自动化部署方案:一是利用Webhook将新运动数据实时备份至Notion或Google Sheets;二是配置每日定时任务自动推送运动简报。适合希望实现运动数据私有化管理的极客用户。


将 n8n 与 Strava 联动是一个非常经典的自动化场景,既可以用来做数据备份,也可以用来做社交分享。
由于 Strava 使用 OAuth2 认证,配置的核心难点在于“回调地址(Callback URL)”的填写
以下是详细的分步指南和两个实用的自动化示例。


第一阶段:在 Strava 开发者中心获取 API Key

在 n8n 中操作之前,你必须先在 Strava 中创建一个“应用”来获取凭证。

  1. 登录 Strava Settings > API
  2. 创建一个应用(如果还没创建)。

    • Application Name: 随便填(例如 My n8n Automation)。
    • Category:Data ImporterVisualizer 均可。
    • Club: 可以留空。
    • Website: 填写你的 n8n 访问地址(例如 https://n8n.yourdomain.com)。
    • Authorization Callback Domain (关键步骤): 这里只填域名,不要填 https:// 或路径。
    • 如果你是本地部署并通过隧道访问:填写 localhost 或者你的隧道域名。
    • 如果你是服务器部署:填写你的 n8n 域名,例如 n8n.yourdomain.com
  3. 创建成功后,记下 Client IDClient Secret,并保存好一张包含 Access Token 的图片或文本(n8n 会帮你自动刷新,但第一次连接需要 ID 和 Secret)。

第二阶段:在 n8n 中配置凭证 (Credential)

  1. 打开你的 n8n 面板。
  2. 点击左侧的 Credentials -> Add Credential
  3. 搜索 Strava OAuth2 API
  4. 填入刚才获取的信息:

    • Client ID: 填入 Strava 的 Client ID。
    • Client Secret: 填入 Strava 的 Client Secret。
  5. Authorization URL: 保持默认。
  6. Access Token URL: 保持默认。
  7. Scope: 建议至少勾选 activity:read_all (读取所有活动) 和 activity:write (如果你想修改活动)。
  8. OAuth Redirect URL: n8n 会自动显示这个地址(通常是 https://你的域名/rest/oauth2-credential/callback)。确保这个地址的域名部分与你在 Strava 第一步填写的 Authorization Callback Domain 一致。
  9. 点击 Connect my account,会跳转到 Strava 授权页面,点击授权即可。

第三阶段:部署示例 (Workflow Examples)

这里提供两个最实用的场景。你可以根据需求选择构建。

示例 1:新活动自动同步到 Notion/Google Sheets (备份数据)

这个工作流适合做数据归档。

  • 逻辑: 当 Strava 有新活动 -> 获取活动详情 -> 写入表格。

节点配置思路:

  1. Trigger 节点 (Strava Trigger):

    • Event: Activity Created
    • 这会通过 Webhook 实时监听。注意:Webhook 需要你的 n8n 公网可访问。
  2. Action 节点 (Strava):

    • Resource: Activity
    • Operation: Get
    • Activity ID: 使用上一步 Trigger 输出的 ID。
    • 原因: Trigger 节点只推送基础信息,这一步是为了获取详细数据(如配速、心率、功率)。
  3. Action 节点 (Notion 或 Google Sheets):

    • Operation: Create Database Item (Notion) 或 Append (Sheets)。
    • Mapping: 将 Strava 的数据(Distance, Moving Time, Average Speed 等)映射到表格列中。
💡 小贴士: Strava 的速度单位通常是“米/秒”,你需要加一个 Set 节点或在表达式中进行数学转换(转换为 km/h 或 min/km)。

示例 2:每日定时拉取并发送简报到 Telegram/钉钉

如果你不想用 Webhook(或者 n8n 部署在内网无法接收 Webhook),可以使用定时拉取。

  • 逻辑: 每天晚上 -> 查询当天的运动 -> 发送消息。

节点配置思路:

  1. Trigger 节点 (Schedule): 设置为每天 22:00。
  2. Action 节点 (Date & Time): 计算出“今天 00:00”的时间戳 (Epoch time)。Strava API 查询需要 after 参数。
  3. Action 节点 (Strava):

    • Resource: Activity
    • Operation: Get Many
    • After: 填入步骤 2 的时间戳。
  4. If 节点: 判断 Items 是否为空(今天有没有运动)。

    • True: 继续。
    • False: 结束。
  5. Action 节点 (Telegram/DingTalk): 拼接文本,例如:“今天跑了 {{distance}} 米,平均心率 {{average_heartrate}}。”

常见问题排查 (Troubleshooting)

  1. Callback URL Mismatch 错误:

    • 这是最常见的错误。请检查 Strava 设置里的 "Authorization Callback Domain" 是否仅仅是域名(例如 n8n.example.com),而 n8n 里的 Redirect URL 是完整的路径。两者必须匹配。
  2. Webhook 无法触发:

    • Strava 的 Webhook 需要验证。当你激活 Strava Trigger 节点时,n8n 会自动处理验证握手。如果你的 n8n 是本地启动且没有公网 IP,Trigger 节点将无法工作。你需要使用 Polling(定时轮询,如示例 2)或者使用 Cloudflare Tunnel / ngrok 暴露端口。
  3. 权限不足:
  4. 如果在 n8n 只能读到公开活动,读不到私密活动,请检查 Credential 里的 Scope 是否勾选了 activity:read_all




*如有疏漏,欢迎指正。

欢迎访问>>小札在线<<讨论或在下方留言区分享你的看法或经验!



<-本篇完->

标签: strava, 自动化, n8n, OAuth2, Webhook, 数据同步, 自托管

添加新评论