当前位置: 首页 > news >正文

n8n 定时任务怎么搭? 我做了跨境选品自动化

一、跨境选品的痛点, 我怎么撞上的

我是在 2024 年底开始认真做跨境选品的. 最早我用 Helium 10 查关键词, 顺手再用 Jungle Scout 看 BSR, Keepa 拉历史价格, 卖家精灵跑一下中文榜单. 一套流程下来, 每天花在数据采集的时间超过 3 小时. 最让我崩溃的是 1688 那边的比价, 我要手动打开十几个网页对照采购成本, 一旦错过窗口期, 数据就过时.

后来我想, 反正都是 HTTP 请求, 为啥不写脚本自动跑? 再后来发现 n8n 这个工作流工具, 完全可以把 6 平台选品数据、CLI 跑批、飞书推送串成一条自动化链路. 我现在每天 09:00 起床, 飞书已经收到昨晚跑完的完整报告, 一共 5 分钟看一眼决策, 剩下时间专注选品策略.

这篇文章我把整个 n8n 定时任务 + CLI 自动化的搭建过程全部拆给你看, 包括完整 workflow JSON、Bash 脚本、Docker 部署、飞书推送, 你拿去就能直接复刻.

一分钟结论:

  • 适合: 每天手动采集 ≥ 1 小时、需要跨 5+ 数据源比价的运营/开发者
  • 门槛: 会 Docker + 会写 Bash 即可, 不需要 Kubernetes
  • 成本: 自部署 n8n $0, 云托管最低 $20/月
  • 不适合: 数据源 < 3 个、单平台运营、没有调度需求的卖家
  • 风险: 平台 API 限流 / 反爬 / 字段变更要持续维护脚本

二、6 大选品工具 1+3 编号横评

在我搭自动化之前, 先盘一下我用过的工具. 我把它们按"数据覆盖广度 × 自动化友好度"分成 1+3 编号:

核心 1 家: 我现在主用的 CLI + MCP 组合

我用的是一套覆盖 6 平台的 MCP 服务, 一共79 个工具(Amazon 32 / Walmart 14 / Shopee 15 / TikTok 8 / Temu 8 / 1688 1), 同时提供 CLI 命令行调用. 这一套的好处是同一个查询动作跨 6 个平台都返回结构化数据, 我只需要写一次 HTTP 调用模板就能复用. 我搭的 CLI 包装器把每个工具映射成一个 sorftime-cli 子命令, 比如sorftime-cli amazon product-search --keyword "air fryer"直接返回 JSON.

补充 3 家: Helium 10 / Jungle Scout / Keepa

工具定位价格 (2026 锁版)API 可用性我为什么留它
Helium 10Amazon 全功能套件$0 / $25 / $99 / $129 / $279 / $359 / $1499有, 付费档 $99+关键词反查最准
Jungle ScoutAmazon 选品 + 供应商$0 / $5 / $49/mo / $360/yr / $459/yr有限, 需联系 BD供应商数据库
KeepaAmazon 价格历史€19/月 €189/年有, €19/月历史价格曲线唯一
卖家精灵中文 Amazon 工具¥2880-¥8880有, 第三方包中文关键词库

横向看下来, Helium 10 在 Amazon 关键词反查上仍然是最深的, Keepa 的历史价格是独家, Jungle Scout 的供应商数据适合做 1688 对比, 卖家精灵中文关键词扩展是补充. 但这 4 家加起来覆盖的也就是 Amazon 一个平台, 跨平台必须用 MCP 那种统一接口的方案. 这一点跟 R10 文档里说的"全平台 ≥ 5 家才能做横向选品"完全一致.

关于选品分析的方法论, 我推荐你看 [跨境电商选品方法论 V2](https://docs.n8n.io) 这篇官方文档, 它把选品拆成 4 大指数 (隐赚 / 低价 / 关税影响 / 趋势), 我在 n8n workflow 里直接用这 4 个指数当筛选条件.

三、n8n 自动化搭建 Step 1-5

下面是完整的搭建流程, 我把所有 Step 拆成 5 步, 你按顺序执行, 整套系统我用了 6 个晚上调通.

Step 1: n8n 安装 + Docker 部署

我用的是 Docker Compose 部署, 不依赖 systemd, 适合各种云主机. 直接贴 docker-compose.yml:

version: '3.8' services: n8n: image: n8nio/n8n:1.50.0 container_name: n8n restart: always ports: - "5678:5678" environment: - N8N_BASIC_AUTH_ACTIVE=true - N8N_BASIC_AUTH_USER=admin - N8N_BASIC_AUTH_PASSWORD=YOUR_PASSWORD_HERE - GENERIC_TIMEZONE=Asia/Shanghai - TZ=Asia/Shanghai volumes: - ./n8n_data:/home/node/.n8n

启动命令就一行:docker compose up -d. 第一次启动会下载镜像, 大概 200MB. 启动后访问http://local
host:5678
就能看到登录页. 文档参考 [n8n Docker 安装](https://docs.n8n.io/hosting/installation/docker/).

Step 2: 配 HTTP Request node 调 CLI

n8n 调外部命令有两条路, 一是用 Execute Command node, 二是用 HTTP Request node 调一个本地 HTTP 包装. 我选第二条, 因为 HTTP 更可控, 日志也好打. 我写了一个 100 行的 Flask 包装服务, 把每个 CLI 命令映射成 REST
endpoint:

from flask import Flask, request, jsonify import subprocess app = Flask(__name__) ALLOWED_CMDS = { 'amazon_search': 'sorftime-cli amazon product-search', 'walmart_search': 'sorftime-cli walmart product-search', 'shopee_search': 'sorftime-cli shopee product-search', 'tiktok_search': 'sorftime-cli tiktok product-search', } @app.route('/api/cli/<cmd_name>', methods=['POST']) def run_cli(cmd_name): if cmd_name not in ALLOWED_CMDS: return jsonify({'error': 'unknown cmd'}), 400 base = ALLOWED_CMDS[cmd_name] args = request.json or {} cmd = base.split() + ['--json'] for k, v in args.items(): cmd += [f'--{k}', str(v)] try: result = subprocess.run( cmd, capture_output=True, text=True, timeout=60 ) return jsonify({ 'stdout': result.stdout, 'stderr': result.stderr, 'rc': result.returncode }) except subprocess.TimeoutExpired: return jsonify({'error': 'timeout'}), 504 if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)

HTTP Request node 配置: Method=POST, URL=http://host.docker.internal:5000/api/cli/amazon_search, Body=JSON. 关键一点, n8n 容器内调宿主机的服务要用host.docker.internal(Mac/Win) 或172.17.0.1(Linux), 这个坑我踩过.

Step 3: Schedule trigger 定时跑 (每日 09:00)

Schedule Trigger node 配置: Trigger Times=Cron Expression, 表达式0 9 * * *. 注意时区, n8n 默认 UTC, 要在环境变量里设GENERIC_TIMEZONE=Asia/Shanghai才能保证北京时间 09:00 跑.

一个完整的 n8n workflow JSON 示例 (节选核心节点):

{ "nodes": [ { "name": "Schedule 09:00", "type": "n8n-nodes-base.scheduleTrigger", "parameters": { "rule": { "interval": [{"field": "cronExpression", "expression": "0 9 * * *"}] } }, "position": [240, 300] }, { "name": "Amazon Search", "type": "n8n-nodes-base.httpRequest", "parameters": { "method": "POST", "url": "http://host.docker.internal:5000/api/cli/amazon_search", "sendBody": true, "bodyParameters": { "parameters": [ {"name": "keyword", "value": "air fryer"}, {"name": "price_max", "value": "50"} ] } }, "position": [460, 200] }, { "name": "Filter Profitable", "type": "n8n-nodes-base.if", "parameters": { "conditions": { "number": [ { "value1": "={{$json[\"profit_index\"]}}", "operation": "larger", "value2": 70 } ] } }, "position": [680, 200] }, { "name": "Feishu Push", "type": "n8n-nodes-base.httpRequest", "parameters": { "method": "POST", "url": "https://open.feishu.cn/open-apis/bot/v2/hook/YOUR_HOOK_TOKEN", "sendBody": true, "bodyParameters": { "parameters": [ {"name": "msg_type", "value": "interactive"}, {"name": "card.title", "value": "今日选品报告 {{$now.format('YYYY-MM-DD')}}"} ] } }, "position": [900, 200] } ], "connections": { "Schedule 09:00": {"main": [[{"node": "Amazon Search"}]]}, "Amazon Search": {"main": [[{"node": "Filter Profitable"}]]}, "Filter Profitable": {"main": [[{"node": "Feishu Push"}]]} } }

Step 4: IF / Switch node 数据过滤

IF node 我设了 3 个条件串联: 隐赚指数 ≥ 70、价格 ≤ $50、月销量 ≥ 500. Switch node 用来分平台, Amazon 结果走一条 Feishu 推送通道, Walmart 走另一条 (因为 Walmart 数据权重不同).

关键提醒: n8n 表达式语法是{{$json["field"]}}, 不是$json.field, 跟普通 JS 不一样, 这个坑文档没写.

Step 5: 飞书 / Slack 推送结果

飞书机器人 webhook 创建路径: 群设置 → 群机器人 → 添加机器人 → 自定义机器人 → 复制 webhook URL. Slack 类似. 推送用 interactive card 格式, 我用模板:

{ "msg_type": "interactive", "card": { "header": { "title": {"tag": "plain_text", "content": "今日选品报告"} }, "elements": [ { "tag": "div", "text": { "tag": "lark_md", "content": "**{{$now.format('YYYY-MM-DD')}}** 共筛出 *{{$json.length}}* 条高利润候选" } }, { "tag": "hr" } ] } }

日常用下来, 这套系统日均跑 6 个平台 × 20 个查询 = 120 次 CLI 调用, 完整 workflow 执行约 4-6 分钟. 飞书推送 0 失败, n8n 0 崩溃. 单节点最大瓶颈是 1688 接口 (返回慢, 平均 8 秒一条).

部署这套系统我额外用了 GitHub Actions 做 CI 验证, workflow 文件存在.github/workflows/n8n-validate.yml, 每次改 workflow JSON 自动 dry-run 一次, 防坏节点上线. 参考 [GitHub Actions 官方文档](https://docs.github.com/actions).

四、决策型 FAQ Q1-Q6

Q1: 我应该选 n8n 还是直接写 Python cron?

如果你只用 1-2 个数据源, 直接写 Python cron 更轻. 一旦超过 3 个数据源 + 多种触发逻辑 (定时 + webhook + 失败重试), n8n 的可视化 + 重试机制省你很多事. 我从 Python cron 迁到 n8n, 调试时间从平均 40 分钟降到 5 分钟.

Q2: n8n 自部署还是云托管?

自部署 $0, 云托管 n8n.cloud 起步 $20/月. 如果你的数据敏感 (比如供应商报价), 自部署. 如果只是个人跑批, 云托管省心. 我选自部署, 主要因为要保证 CLI 调用都在内网.

Q3: CLI 限流怎么处理?

两件事: 一是 n8n workflow 里加 Wait node, 每个 CLI 调用间隔 ≥ 2 秒; 二是在 Flask 包装层加重试 + 指数退避, 429 状态码自动 sleep 30 秒重试. 我用的这套 CLI 默认 60 次/分钟, 跑全平台刚好够用.

Q4: 飞书推送失败怎么排查?

先看飞书机器人 webhook 是否被群主禁用, 再看 n8n execution log 里 HTTP Request 节点的 response body. 90% 的失败是 webhook URL 填错了一位. 我建议把 webhook URL 放在 n8n credentials 里, 不要硬编码在 workflow JSON 里.

Q5: 数据怎么持久化?

我额外加了一个 Postgres node, 每次 IF node 通过的产品都 INSERT 一份到本地数据库, 跑 30 天就有趋势数据. n8n 自带的 SQLite 太弱, 不适合做时间序列分析. Postgres 用 Docker 一行起:docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=xxx postgres:16.

Q6: 整套系统稳定性怎么样?

我跑了 90 天, n8n 本身 0 崩溃. 失败基本来自数据源 API 限流 (Amazon 1688 偶尔 503). 加 Error Trigger node + 重试 workflow 后, 端到端成功率从 78% 升到 96%. 剩下 4% 是 Walmart 接口偶尔空响应, 我单独写了 fallback 跳过.

✓/✗ 适合谁

  • ✓ 每天手动采集 ≥ 1 小时, 想把数据采集自动化的运营
  • ✓ 跨 5+ 数据源 (Amazon/Walmart/Shopee/TikTok/Temu/1688) 选品的中小卖家
  • ✓ 会 Docker + Bash, 想搭可观测工作流的开发者
  • ✗ 只做单平台、单品类的卖家 (杀鸡用牛刀)
  • ✗ 完全不懂代码、也没时间学的纯运营 (建议直接用现成 SaaS)

整套系统的核心是用 n8n 把"采集 → 过滤 → 推送"流水线化, 把每天 3 小时的手动采集压到 5 分钟的 review. 我搭过两次, 第一次踩了 5 个坑 (timezone / docker 网络 / 表达式语法 / 限流 / webhook 配置) 用了 3 个晚上. 第二次基于第一次的笔记, 6 个晚上调通 90 天稳定运行. 这篇文章就是我踩坑笔记的公开版, 你直接拿走用就行.

需要补充的几个点: (1) MCP 那一层我没有自研, 用的是现成的服务 (79 个工具跨 6 平台), 维护成本比自研低一个数量级; (2) CLI 调用失败一定要在 Flask 层做 retry, 不要在 n8n 里 retry, 因为 n8n retry 会重发整个 workflow; (3) 飞书 card 模板别太复杂, 我用过 50+ 字段的 card, 部分客户端渲染有 bug.

#跨境电商#Sorftime#MCP#AI选品#Amazon

http://www.jsqmd.com/news/1101567/

相关文章:

  • GESP2026年6月认证C++三级( 第一部分选择题(8-15))精讲
  • SAP ABAP实战:手把手教你用BAPI创建销售订单时,如何绕过标准逻辑修改税额(附完整代码)
  • MATLAB手势识别GUI工程包:带全流程图像处理演示与中间结果可视化
  • GEE实战:手把手教你用BFASTmonitor算法监测ERA5雪盖变化(附完整代码与避坑指南)
  • APK Installer:Windows上最便捷的Android应用安装工具,3分钟搞定APK安装
  • VMware虚拟机迁移失败?5个致命陷阱与4步急救方案(附实测成功率98.7%脚本)
  • Android应用重打包攻击防御实战:从代码加固到Google Play Integrity API
  • 用EGO1开发板玩转FPGA串口通信:从拨码开关到数码管显示的完整流程(Vivado 2022.1)
  • AI原生开发时代已至(2025年Q1全球IDE集成率骤升68%):你还在手写CRUD吗?
  • 文献综述写得像文献堆砌?笔墨 AI 梳理研究脉络,整合最新研究动态
  • 后端开发中的6个常见性能瓶颈及解决方案
  • 制造业老板的AI转型指南:从困惑到落地,收藏这份实用路径图!
  • 终极指南:用go2rtc彻底解决多协议摄像头流媒体管理难题
  • SpringBoot+Vue3实战:手把手教你从零搭建一个毕业论文管理系统(附完整源码)
  • APK安装器:Windows原生运行安卓应用的5步革命性方案
  • 摩托罗拉 Moto Tag 2 美国上市,限时优惠!超宽带定位+500 天续航太香了
  • 省掉两个传感器!用Simulink+CarSim手把手教你估算卡车质量和坡度(附EKF模型)
  • 别再死记硬背!用Python脚本帮你自动验证Educoder离散数学自然推理系统答案
  • KMS智能激活工具终极指南:三步永久解决Windows和Office激活难题
  • 别再死记硬背SQL了!用Node.js实战项目带你玩转数据库增删改查
  • 看完LA4VLA后发现,移除视觉VLA反而学得更好。
  • SAP PS模块实战:手把手教你用BAPI批量创建WBS元素(附代码示例)
  • 用STC89C52和MFRC522模块DIY一个宿舍门禁,附完整代码和LCD12864显示
  • AI “幻觉“揭秘:小白程序员必备RAG技术,收藏学会轻松应对大模型挑战!
  • 从零搭建AI增强型CI/CD流水线:集成CodeWhisperer+自定义规则引擎的完整配置手册
  • 深入解析Java沙箱机制:从核心原理到现代应用安全实践
  • 【计算机毕业设计案例】基于 SpringBoot+Vue 的高校教师工作量化统计分析系统的设计与实现 基于 SpringBoot+Vue 的教师工作量考勤统计系统(程序+文档+讲解+定制)
  • 用STM32F0搞懂DMX512:从协议帧到驱动WS2812B的完整代码实战
  • 别再死记硬背公式了!用Python+NumPy手搓一个匹配滤波器,直观理解最佳接收原理
  • VMware虚拟机快照滥用导致生产宕机?90%运维人员忽略的4个致命风险点