SimpleX Chat
SimpleX Chat 是一个私密、去中心化的消息平台,用户拥有自己的联系人和群组。与其他平台不同,SimpleX 不分配持久的用户 ID — 每个联系人都由一个在连接时生成的不透明内部 ID 标识,这使其成为最私密的信使之一。
运行
hermes gateway setup并选择 SimpleX 以获取引导式 walkthrough。
先决条件
- 安装并作为守护进程运行的 simplex-chat CLI
- Python 包 websockets (
pip install websockets)
安装 simplex-chat
从 simplex-chat GitHub releases 页面下载最新版本:
# Linux / macOS binary
curl -L https://github.com/simplex-chat/simplex-chat/releases/latest/download/simplex-chat-ubuntu-22_04-x86_64 -o simplex-chat
chmod +x simplex-chat
SimpleX Chat 项目未发布聊天客户端的预构建 Docker 镜像;要在 Docker 下运行它,请从 simplex-chat repository 源码构建。
启动守护进程
simplex-chat -p 5225
默认情况下,守护进程在 ws://127.0.0.1:5225 监听 WebSocket。
配置 Hermes
通过设置向导
hermes gateway setup
选择 SimpleX Chat 并按照提示操作。
通过环境变量
将这些添加到 ~/.hermes/.env:
SIMPLEX_WS_URL=ws://127.0.0.1:5225
SIMPLEX_ALLOWED_USERS=<contact-id-1>,<contact-id-2>
SIMPLEX_HOME_CHANNEL=<contact-id>
| 变量 | 必需 | 描述 |
|---|---|---|
SIMPLEX_WS_URL | 是 | simplex-chat 守护进程的 WebSocket URL |
SIMPLEX_ALLOWED_USERS | 推荐 | 逗号分隔的允许列表。每个条目可以是数字 contactId 或 显示名称 — 两种形式均有效。 |
SIMPLEX_ALLOW_ALL_USERS | 可选 | 设置为 true 以允许所有联系人(请谨慎使用) |
SIMPLEX_AUTO_ACCEPT | 可选 | 自动接受传入的联系人请求(默认:true) |
SIMPLEX_GROUP_ALLOWED | 可选 | 机器人参与的群组 ID 的逗号分隔列表,或 * 表示任何群组。省略则完全忽略群组消息 |
SIMPLEX_HOME_CHANNEL | 可选 | 用于 cron 作业交付的默认联系人/群组 ID |
SIMPLEX_HOME_CHANNEL_NAME | 可选 | 主通道的人类可读标签 |
HERMES_SIMPLEX_TEXT_BATCH_DELAY | 可选 | 静默期秒数(默认:0.8),用于将快速连续的入站文本消息合并为一个事件 |
查找您的联系人 ID 或显示名称
启动守护进程后,打开与您代理联系人的对话。数字 contactId 出现在会话日志中,或通过 hermes send_message action=list 查看。如果您更愿意使用 SimpleX UI 中显示的显示名称,那也是可以的 — SIMPLEX_ALLOWED_USERS 接受这两种形式。
授权
默认情况下 所有联系人都被拒绝。您必须:
- 将
SIMPLEX_ALLOWED_USERS设置为contactId和/或显示名称的逗号分隔列表(例如SIMPLEX_ALLOWED_USERS=4,alice匹配 contactId 4 或显示名称为 "alice" 的联系人),或者 - 使用 DM 配对 — 向机器人发送任何消息,它将回复一个配对代码。通过
hermes pairing approve simplex <CODE>输入该代码。
群组聊天
默认情况下,适配器忽略群组消息 — 否则群组中的机器人会处理每个成员的流量。需显式选择加入:
SIMPLEX_GROUP_ALLOWED=12,34 # specific group IDs
# or
SIMPLEX_GROUP_ALLOWED=* # any group the bot is in
通过在聊天 ID 前添加 group: 前缀来寻址群组,例如在 send_message 中或作为 cron deliver= 目标时使用 simplex:group:12。
附件
适配器支持双向的原生 SimpleX 附件:
- 入站 — 传入的图片、语音笔记和文件通过守护进程的 XFTP 流程接受(
rcvFileDescrReady→/freceive→ 等待rcvFileComplete),并作为带有适当MessageType(PHOTO、VOICE、TEXT+ 文档)的MessageEvent.media_urls呈现。 - 出站 —
send_image_file、send_voice、send_document和send_video都使用带有filePath的结构化/_send表单,因此接收方的 SimpleX 客户端会内联渲染图片并内联播放语音笔记,而不是将其作为下载提供。
代理回复也可以在纯文本中嵌入 MEDIA:/path/to/file 标签 — 适配器会从正文中剥离该标签,并将文件作为语音笔记(音频扩展名)或文档发送。
在 cron 作业中使用 SimpleX
cronjob(
action="create",
schedule="every 1h",
deliver="simplex", # uses SIMPLEX_HOME_CHANNEL
prompt="Check for alerts and summarise."
)
或定位特定联系人:
send_message(target="simplex:<contact-id>", message="Done!")
隐私说明
- SimpleX 从不泄露电话号码或电子邮件地址 — 联系人使用不透明 ID
- Hermes 与守护进程之间的连接是本地 WebSocket (
ws://127.0.0.1:5225) — 没有数据离开您的机器 - 消息在到达守护进程之前由 SimpleX 协议进行端到端加密
故障排除
"Cannot reach daemon" — 确保 simplex-chat -p 5225 正在运行且端口与 SIMPLEX_WS_URL 匹配。
"websockets not installed" — 运行 pip install websockets。
Messages not received — 检查联系人的 ID 是否在 SIMPLEX_ALLOWED_USERS 中,或通过 DM 配对批准他们。