Reference Article
- https://n8n.io/
- GitHub - n8n-io/n8n: Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
- GitHub - Obito-404/RuoYuBot: 若愚bot是n8n对接个人微信
- 手把手教你搭建智能工作流基础篇,n8n+Deepseek大模型保姆级教程 – AI-人工智能-1ai.net
- n8n 中文教程:AI 代理(AI Agent) – 翔宇工作流
- docker 安装Redis (全网最详细:附带配置文件)-CSDN博客
- Docker安装PostgreSQL数据库 - 极客子羽 - 博客园
Thrust
博客教程
微信竟然还能这么玩?AI自动回复+群聊秒响应,朋友以为我开了挂! | Obito’s Blog
效果图
流程
好友发送信息→微信机器人监听→发送回调地址→n8n监听→ai大模型处理→n8n发送http请求→微信机器人发回好友
注意
不添加memory,ai是没有上下文记忆的,需要自行添加数据库如redis或postgresql,我也会在下面演示。
微信
1.安装微信
微信版本需要是3.9.x,微信版本4.0不支持。
微信3.9.11.17地址:
2.登陆微信
必须先登录微信号后运行RuoYuBot
3.取消自动更新微信
N8N
1.Install N8N
官网默认是必须使用ssl加密,可以使用参数N8N_SECURE_COOKIE=false
docker volume create n8n_data
docker network create n8n_network
#取消强制加密,使用http访问
docker run -d -e N8N_SECURE_COOKIE=false --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n n8nio/n8n
docker run -d \
-e N8N_SECURE_COOKIE=false \
-e N8N_HOST="私网或公网ip或域名,为了让内部工作流互相调用" \
--name n8n \
--hostname n8n \
--network n8n_network \
--restart=always \
-p 5678:5678 \
-v n8n_data:/home/node/.n8n \
n8nio/n8n
2.Access the editor
RuoYuBot
1.下载RuoYuBot
运行后会在当前目录生成一个config.ini文件
[DEFAULT]
listen_list = 好友名称或备注,群名称
webhook_urls = [http://ip](http://ip/):port
port = 5000
retry_count = 3
retry_delay = 5
log_level = INFO
api_token =
n8n
方式一:上传配置文件
工作流导入后,需要自己对一些凭证参数进行调整
方式二:手动创建n8n的ai工作流
1.创建webhook监听
2.复制test url
3.创建AI Agent
4.点击AI Agent,这里定义ai收到的信息字段
选择Define below,选择Expression,输入prompt{{ $json.body.message }}
5.点击Chat Model,选择你想接入的大模型提供商
6.创建凭证,需要获取对应的api
7.选择使用的ai模型
8.创建Code,目的转换ai回复信息的特殊字符
// 输入项中的文本数据
const textData = $input.first().json.output;
// 清理文本以适应JSON格式的函数
function cleanTextForJson(text) {
// 使用JSON.stringify来转义所有必要的字符,并去除两端的引号
let cleanedText = JSON.stringify(text).slice(1, -1);
// 替换不可见字符(如换行符、制表符等)
cleanedText = cleanedText.replace(/\n/g, '\\n').replace(/\t/g, '\\t');
return cleanedText;
}
// 示例输入数据
const exampleInput = $input.first().json.output
// 使用函数清理文本
const cleanedText = cleanTextForJson(exampleInput);
// 将清理后的文本放入输出对象
return { cleanedText };
9.创建HTTP Request
10.修改配置
修改请求方式和url
Method: post
URL: http://ruoyubot-ip:7777/webhook
#认证方式
Authentication:Generic Credential Type
Generic Auth Type:Header Auth
Header Auth:Create new credential
#下面Authorization的value格式为Bearer+空格+api token,api token在RuoYuBot上面自定义
创建凭证
修改body
json参数可以自己从左边拖拉到json表达式
**Send Body**:
{
"target_user": "{{ $('Webhook').item.json.body.target_user }}",
"message": "{{ $json.body.message }}",
"is_group": "{{ $json.body.is_group }}"
}
#发送消息格式说明
#{
# "target_user": "群聊名称/好友名称",
# "message": "要发送的消息",
# "is_group": true/false,
# "at_list": ["要@的成员列表"]
#}
11.更新RuoYubot的配置文件
API Token: 自定义
本地端口: 自定义
监听对象: 好友名或群名
12.测试工作流
点击测试
13.启用工作流
14.更新回调地址
把webhook-test变成webhook
Redis
1.创建配置文件
#新建文件夹
mkdir -p /data/dockerData/redis/conf
cd /data/dockerData/redis/conf
#创建文件
touch redis.config
#编写文件内容 (进入后 i 子母键插入,黏贴下面配置,:wq! 保存并退出)
vim redis.config
# Redis服务器配置
# 绑定IP地址
#解除本地限制 注释bind 127.0.0.1
#bind 127.0.0.1
# 服务器端口号
port 6379
#配置密码,不要可以删掉
requirepass password
#这个配置不要会和docker -d 命令 冲突
# 服务器运行模式,Redis以守护进程方式运行,默认为no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败,如果后面redis启动失败,就将这个注释掉
daemonize no
#当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定(自定义)
#pidfile /data/dockerData/redis/run/redis6379.pid
#默认为no,redis持久化,可以改为yes
appendonly yes
#当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 60
# 服务器系统默认配置参数影响 Redis 的应用
maxclients 10000
tcp-keepalive 300
#指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合(分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改)
save 900 1
save 300 10
save 60 10000
# 按需求调整 Redis 线程数
tcp-backlog 511
# 设置数据库数量,这里设置为16个数据库
databases 16
# 启用 AOF, AOF常规配置
appendonly yes
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 慢查询阈值
slowlog-log-slower-than 10000
slowlog-max-len 128
# 是否记录系统日志,默认为yes
syslog-enabled yes
#指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
loglevel notice
# 日志输出文件,默认为stdout,也可以指定文件路径
logfile stdout
# 日志文件
#logfile /var/log/redis/redis-server.log
# 系统内存调优参数
# 按需求设置
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
2.运行容器,使用上面配置文件启动
docker run -p 6379:6379 --hostname redis --network n8n_network --restart=always --name redis6.2.6 -v /data/dockerData/redis/conf/redis.config:/etc/redis/redis.conf -v /data/dockerData/redis/data:/data -v /data/dockerData/redis/logs:/logs -d redis:6.2.6 redis-server /etc/redis/redis.conf
上面命令参数解释
–privileged=true :容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
- p:端口映射,此处映射 主机6379端口 到 容器的6379端口
- v:主机和容器的目录映射关系,":"前为主机目录,之后为容器目录
新建配置文件书卷: -v /data/dockerData/redis/conf/redis.config:/etc/redis/redis.config
redis数据保存数据卷 -v /data/dockerData/redis/data:/data
reids日志文数据卷 -v /data/dockerData/redis/logs:/logs
- d : 表示使得容器后台一直运行
redis-server /etc/redis/redis.conf:指定配置文件启动redis-server进程
–appendonly yes:开启数据持久化
–requirepass password :设置你的密码,设置密码比较安全
3.测试
#进入redis容器
docker exec -it a34aff536643 bash
#连接redis
redis-cli
#输入密码
127.0.0.1:6379> auth password
OK
4.开放防火墙
#开放防火墙指定端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
#重新加载防火墙
firewall-cmd --reload
5.添加redis作为memory
创建凭证,我们设置了同一个docker网络并映射了主机名,所以这里写redis就行了,密码在配置文件
自定义上下文长度可以设置
{{ $json.body.is_group ? $json.body.sender : $json.body.chat_name }}






















