n8n与Strava联动配置实战
本文详解如何在自托管n8n中集成Strava API。内容涵盖从开发者后台获取Client ID/Secret,到解决OAuth2回调域名(Callback Domain)配置难点的全流程。文章还提供了两套实用的自动化部署方案:一是利用Webhook将新运动数据实时备份至Notion或Google Sheets;二是配置每日定时任务自动推送运动简报。适合希望实现运动数据私有化管理的极客用户。
将 n8n 与 Strava 联动是一个非常经典的自动化场景,既可以用来做数据备份,也可以用来做社交分享。
由于 Strava 使用 OAuth2 认证,配置的核心难点在于“回调地址(Callback URL)”的填写。
以下是详细的分步指南和两个实用的自动化示例。
第一阶段:在 Strava 开发者中心获取 API Key
在 n8n 中操作之前,你必须先在 Strava 中创建一个“应用”来获取凭证。
- 登录 Strava Settings > API。
创建一个应用(如果还没创建)。
- Application Name: 随便填(例如
My n8n Automation)。 - Category: 选
Data Importer或Visualizer均可。 - Club: 可以留空。
- Website: 填写你的 n8n 访问地址(例如
https://n8n.yourdomain.com)。 - Authorization Callback Domain (关键步骤): 这里只填域名,不要填
https://或路径。 - 如果你是本地部署并通过隧道访问:填写
localhost或者你的隧道域名。 - 如果你是服务器部署:填写你的 n8n 域名,例如
n8n.yourdomain.com。
- Application Name: 随便填(例如
- 创建成功后,记下 Client ID 和 Client Secret,并保存好一张包含 Access Token 的图片或文本(n8n 会帮你自动刷新,但第一次连接需要 ID 和 Secret)。
第二阶段:在 n8n 中配置凭证 (Credential)
- 打开你的 n8n 面板。
- 点击左侧的 Credentials -> Add Credential。
- 搜索 Strava OAuth2 API。
填入刚才获取的信息:
- Client ID: 填入 Strava 的 Client ID。
- Client Secret: 填入 Strava 的 Client Secret。
- Authorization URL: 保持默认。
- Access Token URL: 保持默认。
- Scope: 建议至少勾选
activity:read_all(读取所有活动) 和activity:write(如果你想修改活动)。 - OAuth Redirect URL: n8n 会自动显示这个地址(通常是
https://你的域名/rest/oauth2-credential/callback)。确保这个地址的域名部分与你在 Strava 第一步填写的 Authorization Callback Domain 一致。 - 点击 Connect my account,会跳转到 Strava 授权页面,点击授权即可。
第三阶段:部署示例 (Workflow Examples)
这里提供两个最实用的场景。你可以根据需求选择构建。
示例 1:新活动自动同步到 Notion/Google Sheets (备份数据)
这个工作流适合做数据归档。
- 逻辑: 当 Strava 有新活动 -> 获取活动详情 -> 写入表格。
节点配置思路:
Trigger 节点 (Strava Trigger):
- Event:
Activity Created - 这会通过 Webhook 实时监听。注意:Webhook 需要你的 n8n 公网可访问。
- Event:
Action 节点 (Strava):
- Resource:
Activity - Operation:
Get - Activity ID: 使用上一步 Trigger 输出的 ID。
- 原因: Trigger 节点只推送基础信息,这一步是为了获取详细数据(如配速、心率、功率)。
- Resource:
Action 节点 (Notion 或 Google Sheets):
- Operation:
Create Database Item(Notion) 或Append(Sheets)。 - Mapping: 将 Strava 的数据(Distance, Moving Time, Average Speed 等)映射到表格列中。
- Operation:
💡 小贴士: Strava 的速度单位通常是“米/秒”,你需要加一个 Set 节点或在表达式中进行数学转换(转换为 km/h 或 min/km)。示例 2:每日定时拉取并发送简报到 Telegram/钉钉
如果你不想用 Webhook(或者 n8n 部署在内网无法接收 Webhook),可以使用定时拉取。
- 逻辑: 每天晚上 -> 查询当天的运动 -> 发送消息。
节点配置思路:
- Trigger 节点 (Schedule): 设置为每天 22:00。
- Action 节点 (Date & Time): 计算出“今天 00:00”的时间戳 (Epoch time)。Strava API 查询需要
after参数。 Action 节点 (Strava):
- Resource:
Activity - Operation:
Get Many - After: 填入步骤 2 的时间戳。
- Resource:
If 节点: 判断
Items是否为空(今天有没有运动)。- True: 继续。
- False: 结束。
- Action 节点 (Telegram/DingTalk): 拼接文本,例如:“今天跑了 {{distance}} 米,平均心率 {{average_heartrate}}。”
常见问题排查 (Troubleshooting)
Callback URL Mismatch 错误:
- 这是最常见的错误。请检查 Strava 设置里的 "Authorization Callback Domain" 是否仅仅是域名(例如
n8n.example.com),而 n8n 里的 Redirect URL 是完整的路径。两者必须匹配。
- 这是最常见的错误。请检查 Strava 设置里的 "Authorization Callback Domain" 是否仅仅是域名(例如
Webhook 无法触发:
- Strava 的 Webhook 需要验证。当你激活 Strava Trigger 节点时,n8n 会自动处理验证握手。如果你的 n8n 是本地启动且没有公网 IP,Trigger 节点将无法工作。你需要使用 Polling(定时轮询,如示例 2)或者使用 Cloudflare Tunnel / ngrok 暴露端口。
- 权限不足:
- 如果在 n8n 只能读到公开活动,读不到私密活动,请检查 Credential 里的 Scope 是否勾选了
activity:read_all。
*如有疏漏,欢迎指正。
欢迎访问>>小札在线<<讨论或在下方留言区分享你的看法或经验!