开源工作流自动化神器 n8n

8f10b0512454b4a478611d874709f3e4.gif

在『 IFTTT 的开源替代品[1] 』一文中,老苏提到了 n8n ,这是一款基于节点的工作流自动化工具,可以实现当 A 条件发生,触发 B 服务这样的自动工作流程。

什么是 n8n ?

n8n 是免费的基于节点的工作流自动化工具,可以轻松实现跨不同服务的任务自动化。它可以自托管,易于扩展,因此也可以与内部工具一起使用。

老苏一直想写 n8n,9 月份终于开始动笔,写完了安装部分又搁置了下来,主要是没有想好具体用来做点什么。最近后台又有人在问,所以虚构了 1 个应用场景:获取天气预报,并通过微信发送到手机。希望通过案例的讲解让大家了解 n8n 是怎么工作的。

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 n8n ,选择第一个 n8nio/n8n,版本选择 latest

a4ab75101a29ae0717d656865275ffb7.png

docker 文件夹中,创建一个新文件夹,并将其命名为 n8n

文件夹装载路径说明
docker/n8n/home/node/.n8n存放设置和数据库
aaf88be52838de82b5986a0c6b03aefd.png

端口

直接用了默认的端口 5678

本地端口容器端口
56785678
53aabacfc909cee05ee72eadbe77406e.png

环境

可变
TZ时区
N8N_BASIC_AUTH_ACTIVE默认设置为 true
N8N_BASIC_AUTH_USER设置用户名
N8N_BASIC_AUTH_PASSWORD设置密码

如果只是在局域网使用,红框部分(账号密码验证)可以不用设置,但是时区一定要设置正确,否则会影响到定时节点 cron 的执行时间

4b0d42ab823cb992d4f75d883f7d88d3.png

当然也可以在 Settings 中将 TimeZone 设置为 (GMT+08:00)Hong Kong

12356aef49ca32d11bc20f2e54c73586.png

如果你想使用 MySQL 或者 PostgresDB,需通过环境变量参数进行指定,请参考官方文档:https://github.com/n8n-io/n8n/blob/master/docker/images/n8n/README.md#persist-data[2]如果只是个人用,老苏觉得没啥必要。除非你的流程很多,那就另说了。

运行

在浏览器中输入 http://群晖IP:5678,就能看到登录界面

987f9f0173731387284f4fc48a073e82.png

登录之后的主界面

cf4804099fdb14db307c76fbf2eb04bb.png

在官网我们能找到大量的工作流:https://n8n.io/workflows[3],找到适合的可以导入我们的系统中,不过说实话,国外的应用很多我们都用不了。

758eefec099571f7d9d17f223df3958a.png

工作流程

下面开始今天的示例,老苏将按照 事件触发 --> 数据获取 --> 数据处理 --> 执行动作 的流程来详细介绍

事件触发

顾名思义,这是用来触发事件的,老苏用了 Cron 节点,这是一个定时执行的节点

参数说明
ModeEvery Day每天执行
Hour724 小时,早上 7 点开始执行
Minute0分钟

按官方的说法每天更新 4 次数据,所以频繁的抓取只会给服务器增加压力

fe3c3e2c2b169b157669c3159f517f31.png

如果一次不够的话,可以再增加几次,但是一天不要超过 4 次。不管是 weather.api 还是 WxPusher ,虽然使用是免费的,但是维护者还是有成本的,别薅羊毛把羊 🐑 给薅没了

10ba620c8c05d6bf0dd3f7f3cc58e39b.png

数据获取

关于天气数据,可以参考 用 Changedetection 监控网页的变化[4] 一文中的 JSON-API-监控 部分

老苏用了 HTTP Request 节点来获取数据

参数说明
AuthenticationNone不需要认证
Request MethodGET请求方式
URLhttp://t.weather.itboy.net/api/weather/city/101020100注意这是上海的天气
Response FormatJSON返回的数据格式

填完之后点右上角的 Execute Node,不出状况的话会返回相应城市的天气信息

9c7bc539b01033f25e890f412c72d150.png

数据处理

老苏用了 Function 节点来处理数据,这个节点需要自己写点 Javascript 代码。虽然老苏不是程序员,但是在百度和 初冬[5] 小帅哥的帮助,还是完成了目标

其实大部分代码就是对照着下图取数据

041d7fd45753588081f72df334a59eaa.png
// 处理返回的 json 格式的数据并拼接成字符串
// 老苏只处理了当天的数据

shidu = items[0].json.data.shidu;
pm25 = items[0].json.data.pm25;
pm10 = items[0].json.data.pm10;
quality = items[0].json.data.quality;
wendu = items[0].json.data.wendu;
ganmao = items[0].json.data.ganmao;
high = items[0].json.data.forecast[0].high.replace(/\s*/g, '');
low = items[0].json.data.forecast[0].low.replace(/\s*/g, '');
fx = items[0].json.data.forecast[0].fx;
fl = items[0].json.data.forecast[0].fl;
type = items[0].json.data.forecast[0].type;
ymd = items[0].json.data.forecast[0].ymd;
week = items[0].json.data.forecast[0].week;

var yubao = "天气预报:</br>今天是" + ymd + "," + week + ",今天天气" + type + "。最" + high + "度,最" + low + "度,风向" + fx + ",风力" + fl + ",空气质量" + quality + ",湿度" + shidu + "," + ganmao;

// 调试用的
//console.log(encodeURIComponent(yubao).replace(/'/g,"%27").replace(/"/g,"%22"));

// 中文写回到到 json 中
items[0].json.yubao = yubao;
// urlencode 后写回到到 json 中
//items[0].json.yubaoe = encodeURIComponent(yubao).replace(/'/g,"%27").replace(/"/g,"%22");

return items;
84e5bcc228e3cf8b653be74f6184c628.png

执行动作

老苏用了 HTTP Request 节点来触发相应的动作,也就是通过WxPusher 实现微信发送天气预报

关于 WxPusher 的申请请参考 通过 WxPusher 在群晖上实现微信推送[6] 的相关部分

参数说明
AuthenticationNone不需要认证
Request MethodGET请求方式
URLhttp://wxpusher.zjiecode.com/api/send/message/微信发送地址
Response FormatJSON返回的数据格式
1aefa2ccf22052dc26fd902f0126079e.png

除此之外还需要在 Query Parameters 中通过 Add Parameter 增加 3 个参数

参数说明
appToken你的appToken你的 appToken
uid你的UID你的 UID
content
手动选取

第三个参数的 value 值需手动点击后面的齿轮

5687c70a948202394ba76984d9322db6.png

逐级展开 Current Node --> Input Data --> JSON --> data --> yubao

c74916afe2c8d77321c2bec46eccd4a9.png

点右上角的 Execute Node 执行正常

2d103c8c084752ba7d9977f968cfb02c.png

保存成果

记得保存,其实每一步做完后都可以点右上角的 Save 保存的

8b1ea8df81865300a4439e38be14a221.png

要启用记得勾选 Active

a01374ae07488af446f7cda0c2eac934.png

流程自动执行后,可以在 Executions 中看到执行情况

16cc09f7c3b0bca95f45ce5fdf8ea8ac.png

手机上收到的效果

e52f8b314b9a3b8acae20ac5f7f55a41.png

进入后的详情

438331c55feabf269c92c18c9743b0d7.png

小结

有两个方法运行老苏的示例,一种是照着文档一步一步实践,这也是老苏写这篇文档的初衷;另一种是“偷懒”的方法,直接导入老苏的 json 文件,文件中有 3 个地方要修改:

  1. 你的city_code,要换成你所在城市的代码;

  2. 你的appToken,换成你在 WxPusher 中的 appToken

  3. 你的uid:需换成你在 WxPusher 获取到的 uid

导入的方法可以是通过 Import from URL 在线导入,之后再去节点修改上面 3 个参数;

438640ef87ab53f35b3940c116fb2719.png

还有

36104b8573c1df87a0f23b5b93ef2332.png

也可以先下载,修改完之后再通过 Import from File 导入。

json 文件的地址在下面 👇:

  • 国外用户:https://raw.githubusercontent.com/wbsu2003/n8n/main/weather2wx.json

  • 国内用户:https://raw.fastgit.org/wbsu2003/n8n/main/weather2wx.json

参考文档

  • n8n.io - Free and Open Workflow Automation Tool[7]

  • n8n-io/n8n: Free and open fair-code licensed node based Workflow Automation Tool. Easily automate tasks across different services[8]

  • n8n/README.md at master · n8n-io/n8n[9]

  • Automatically pulling and visualizing data with n8n 📈 [10]

  • How To Automate Your Processes Using HTTP Request Node From n8n | Hacker Noon[11]

引用链接

[1]

IFTTT 的开源替代品: https://laosu.ml/2020/10/10/IFTTT%E7%9A%84%E5%BC%80%E6%BA%90%E6%9B%BF%E4%BB%A3%E5%93%81

[2]

https://github.com/n8n-io/n8n/blob/master/docker/images/n8n/README.md#persist-data: https://github.com/n8n-io/n8n/blob/master/docker/images/n8n/README.md#persist-data

[3]

https://n8n.io/workflows: https://n8n.io/workflows

[4]

用 Changedetection 监控网页的变化: https://laosu.ml/2021/09/03/%E7%94%A8Changedetection%E7%9B%91%E6%8E%A7%E7%BD%91%E9%A1%B5%E7%9A%84%E5%8F%98%E5%8C%96#JSON-API-%E7%9B%91%E6%8E%A7

[5]

初冬: https://github.com/chudongvip

[6]

通过 WxPusher 在群晖上实现微信推送: https://laosu.ml/2021/06/18/%E9%80%9A%E8%BF%87WxPusher%E5%9C%A8%E7%BE%A4%E6%99%96%E4%B8%8A%E5%AE%9E%E7%8E%B0%E5%BE%AE%E4%BF%A1%E6%8E%A8%E9%80%81/

[7]

n8n.io - Free and Open Workflow Automation Tool: https://n8n.io/

[8]

n8n-io/n8n: Free and open fair-code licensed node based Workflow Automation Tool. Easily automate tasks across different services: https://github.com/n8n-io/n8n

[9]

n8n/README.md at master · n8n-io/n8n: https://github.com/n8n-io/n8n/blob/master/docker/images/n8n/README.md

[10]

Automatically pulling and visualizing data with n8n 📈 : https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/

[11]

How To Automate Your Processes Using HTTP Request Node From n8n | Hacker Noon: https://hackernoon.com/how-to-automate-your-processes-using-http-request-node-from-n8n-gk383ud0

43df493e5bb1538c620225a00337f3ab.gif

a5c13560ef66b1d39a1e0ad1a78e716e.png

你可能还喜欢

点击下方图片即可阅读

ba9843ade0362c536bf6d97055862ad2.png

OpenFunction CLI: 5 分钟安装与上手云原生函数计算平台

a24bb7a0b8c6679d19e0819b06fa3ebd.gif

云原生是一种信仰 🤘

关注公众号

后台回复◉k8s◉获取史上最方便快捷的 Kubernetes 高可用部署工具,只需一条命令,连 ssh 都不需要!

d7aee9d5d56291cc459041ef9eee3abb.gif

f323cd1cbaee8b3e14c5b2ab7079dcd0.gif

点击 "阅读原文" 获取更好的阅读体验!

发现朋友圈变“安静”了吗?

31817bfe33371a4dd03adb7d7e7be69d.gif

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个开源Java开发框架,用于快速创建独立的、可运行的基于Spring的应用程序。Spring Boot的特点是简化了Spring应用程序的开发和部署过程,提供了一种约定大于配置的开发模式,减少了开发者的配置工作量,使得开发者可以更加专注于业务逻辑的实现。 工作流是一种在企业应用中常见的业务流程管理方式,通过自动化的程序来驱动和管理业务流程。Spring Boot并不直接提供工作流的功能,但可以与其他工作流引擎集成使用,比如Activiti、Camunda等。这些工作流引擎也都是开源的,提供了完整的工作流实现方案。 如果想要查看Spring Boot与工作流引擎的集成源码,可以先选择一个工作流引擎,比如Activiti。然后在Spring Boot应用中添加相应的依赖,配置相关的配置文件,就可以与工作流引擎进行集成了。 在集成过程中,可以使用Spring Boot的特性来简化工作流的配置和使用,比如自动装配、注解驱动等。可以自定义Spring Boot的各种组件和配置,以适应具体的业务需求。 通过查看Spring Boot与工作流引擎集成的源码,可以了解到如何在Spring Boot应用中使用工作流引擎来管理业务流程,包括创建和定义流程、部署和执行流程、管理流程的状态和任务等。 总之,Spring Boot是一个开源Java开发框架,可以与开源工作流引擎集成使用。通过查看源码,可以了解到如何在Spring Boot应用中使用工作流引擎来实现业务流程管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值