概念 study · 研习 #server, tooling 2026-06-03

微信 Gateway 接入 Hermes

本文记录如何让 Hermes Agent 接入微信 iLink Bot,实现「在微信里发消息,AI 在服务器上执行任务并回复」。

前置:Hermes Agent 已安装 → Hermes Agent 安装与踩坑实录

🔐 运行公网服务前,建议先做好服务器安全加固 → SSH 异常登录调查与安全加固实录

Gateway 是什么

Gateway 是 Hermes 的消息平台桥梁。它跑在服务器后台,监听微信消息,收到后转发给 Hermes Agent 处理,再把回复发回微信。

简单说:Gateway 让微信变成了 Hermes 的终端。

支持的平台不止微信:Telegram、Discord、Slack、WhatsApp 等 10+ 个平台都可以接。

配置 iLink Bot

~/.hermes/.env 中添加:

WEIXIN_ACCOUNT_ID=你的account_id@im.bot
WEIXIN_TOKEN=你的token
WEIXIN_BASE_URL=https://ilinkai.weixin.qq.com

这三个值从微信 iLink Bot 后台获取:

三种启动方式的对比

方式 优点 缺点
ops gateway run 最简单,前台可见日志 SSH 关了就停
systemctl --user 标准方案,开机自启 headless 环境经常失败
cron @reboot 永远有效,不依赖 systemd 略显 hack

🕳 systemd --user 为什么失败?

Failed to start hermes-gateway.service: Unit hermes-gateway.service not found.

ops gateway install 在 headless(无桌面)环境下可能不会正确创建 service 文件。 这是一个已知问题——没有桌面会话时,systemd --user 的行为不稳定。

解决方法:改用 cron @reboot。

最终方案:cron @reboot

创建启动脚本

mkdir -p ~/.hermes/scripts

cat > ~/.hermes/scripts/start-gateway.sh << 'EOF'
#!/bin/bash
export PATH="$HOME/.local/bin:$HOME/.hermes/hermes-agent/.venv/bin:$PATH"
export HERMES_HOME="$HOME/.hermes"
mkdir -p "$HERMES_HOME/logs"
exec ops gateway run >> "$HERMES_HOME/logs/gateway-cron.log" 2>&1
EOF

chmod +x ~/.hermes/scripts/start-gateway.sh

加入 cron

(crontab -l 2>/dev/null; echo "@reboot sleep 15 && $HOME/.hermes/scripts/start-gateway.sh") | crontab -

验证

ops gateway status
# 应输出:✓ Gateway is running (PID: xxxxx)

配对授权

首次从微信发消息给 Hermes 时,Gateway 不会直接回复——它先要求授权。

你会收到类似这样的消息:

ops pairing approve weixin SQJY4FAK

在服务器上批准:

ops pairing approve weixin SQJY4FAK

为什么需要这一步? 安全机制。避免陌生人找到你的 Bot 就随便发消息、让 AI 执行命令。必须在服务器端手动批准一次,之后该用户永久有效。

双 Gateway 陷阱

🕳 如果你有两台机器都在跑 Gateway(比如家里一台 + 服务器一台),发一条微信会收到两个回复!

原因:iLink Bot 把消息推给了所有在线的 Gateway 实例。

解决:关掉旧的 pkill -f "ops gateway",只保留服务器上的。

日常运维

# 查看状态
ops gateway status

# 查看日志
tail -f ~/.hermes/logs/gateway-cron.log

# 查看进程
ps aux | grep "ops gateway"

# 重启
pkill -f "ops gateway"
sleep 2
~/.hermes/scripts/start-gateway.sh &

验证清单


相关阅读: