四维视界 fancyoung

n8n:用“屠龙刀”杀鸡?自动化神器降维打击日常琐事

May 03, 2025

Tag: [ Dev ]
...

一、n8n 是什么?

n8n 是一款开源的 workflow 自动化工具,采用节点式可视化编程方式,让非技术人员也能轻松构建复杂的自动化流程。其名称源自 nodemationnode(节点)+ automation(自动化))。或许这个数字8也象征着无限的可能性。

小知识:Numeronym(数字缩写)命名规则 核心特征是用首尾字母加中间字母数的组合来简化长单词。 其命名公式可表示为: Numeronym=首字母+(中间字母数)+尾字母

如:i18n (Internationalization,国际化)、l10n (Localization,本地化)、k8s (Kubernetes)、n8n (nodemation)、……

核心特点

  • 可本地部署:完全掌控数据隐私
  • 可视化编辑器:拖拽节点构建流程
  • 丰富连接器:支持400+应用/服务
  • 开源协议:公平代码许可证(Fair-code License),可商用
  • 集成 AI 能力:通过社区节点(n8n-nodes-mcp)无缝接入MCP协议,赋予AI工作流调用外部工具与服务的标准化能力

一些使用场景

  • 用 Python 清洗数据 → MCP 调用 AI 分析 → 结果自动推送
  • 热点新闻监控 → 大模型摘要生成 → 推送Slack/电报
  • 定时抓取多源数据 → 用 Python 清洗数据 → 生成PDF/Excel报告 → 下载到本地/邮件/飞书推送

二、常见技术概念横向对比

  • MCP:协议层​​,AI 领域的“通用插座”​
  • Dify:应用层,专注AI工作流集成的“组装车间”
  • n8n:应用层,专注流程自动化的“乐高积木”

三、三大维度实现便捷与深度定制化:

  1. ​灵活集成逻辑与应用​

    • 可视化拖拽 400+ 应用节点,构建跨平台自动化流程
    • 原生支持 REST/GraphQL 等协议,无缝对接企业现有系统
  2. ​多语言脚本扩展能力​

    • 通过 ​​JavaScript/Python​​ 注入自定义逻辑
    • 支持调用 npm/pip 生态库,实现复杂数据处理
  3. ​AI 与 MCP 服务深度集成​

    • 内置 ​​LangChain 节点​​,直接调用 GPT/Claude 等大模型
    • 通过 ​​n8n-nodes-mcp​​ 社区模块接入 Model Context Protocol
    • 标准化调度 AI 工具链(如语音合成/地图 API)

四、实战入门(每周导出任务)

注:虽然 n8n 非常强大,但此处还是从一个小任务开始。

需求

定期下载网站中的一些表单数据,并处理成期望的格式,作为附件邮件发送 / 下载到本地。(暂时手动,不用 Cron 自动执行)

配置流程

配置就不一一细说,下面就几个特殊点展开讲一下

登录 & 权限管理

  • 登录权限配置:先请求登录接口,后续请求可从登录响应中取权限信息。我这个应用是需要从 header 里取 cookie,其他如 JWT 等的配置略有不同。

  • 身份信息的隐私处理:用户名密码不建议直接储存在工作流中,n8n 有一个单独配置凭证的地方,再按需引入登录接口 (后续的邮箱登录信息,也储存在这)。

    • 右上角小箭头,选择Create Credential

    • 在里面填入登录需要的信息(我这里填入的是 Login 提交的 body)

代码节点

以处理 excel 数据为例,需要 3 步:

  1. Data transformation -> Extract from File节点将 excel 转为 json 数组
  2. 再用Core -> Code节点处理数据
  3. 最后通过 Data transformation -> Convert to File 转回 excel

具体代码节点,可使用 JavaScript 或 Python。 节点的内置方法/变量有:$binary$input$json$today$response等,详情参见文档

发送邮件

  • 邮箱配置:在邮箱服务端的设置中,打开 SMTP 设置。我用的是飞书,设置如下图:

  • 配置 SMTP:在 Credentials 里新建 SMTP 账号,配置身份信息、Host、Port。此处可以发现非常人性化,配置是否正确都会在页面实时测试提示。 n8n 更多邮箱配置详情参见Send Email credentials

  • 发送邮件节点配置:节点配置时,都可以实时看到 Input(左) 和 Output(右) 数据,来方便调整配置参数。我的邮件的重点是附件,可以在 Options 里添加

问题解决

1. 文件下载时,中文会变成一串包括百分号的字符串

原因:​在文件下载过程中,若文件名包含中文字符,可能会被浏览器自动进行 URL 编码,显示为类似 %E6%B5%8B%E8%AF%95 的形式。​为恢复原始的中文文件名,需使用 decodeURIComponent() 方法对编码后的文件名进行解码。

如果是下载到本地,在Read/Write Files from Disk节点的文件名参数中直接处理即可,如:/...[文件路径].../{{ decodeURIComponent($json.headers['content-disposition'].match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/)[1].replace(/['"]/g, '')) }}。 也可以加一层更通用的 Code 节点处理:

return items.map(item => {
  item.binary.data.fileName = decodeURIComponent(item.binary.data.fileName)
  return item
})

2. Outlook SMTP 发邮件报错:

Couldn’t connect with these settings 

...:error:xxx:SSL routines:ssl3_get_record:wrong version number:../deps/openssl/openssl/ssl/record/ssl3_record.c:355:

原因:协议问题​。但关闭 SSL/TLS开关(使用STARTTLS)后仍有报错:

Invalid login: ... Authentication unsuccessful, basic authentication is disabled....

原因:Basic Auth (邮箱+密码) 已在 2023 年被微软禁用,需要用 OAuth 2.0。​(我选择了更换邮箱服务)

结尾

鸡呢?鸡呢?!

© 2025, Built with @思扬