Skip to content

zj1123581321/Im2Memo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ImRobot — IM 消息 → Memos 笔记系统

多 IM 平台消息自动保存到 Memos 笔记。支持飞书、企业微信和 Telegram,发送文本/图片消息给机器人,自动创建 Memos 并回复笔记 URL。

支持 // 评论合并:转发消息后在评论框以 // 前缀追加评论,评论与正文自动合并为一条笔记。

架构

单个 FastAPI 进程
├── 飞书: WebSocket 长连接 (后台线程,SDK 内置鉴权)
├── 企微: POST /webhook/wecom (Cloudflare Tunnel 暴露)
├── Telegram: POST /webhook/telegram (Cloudflare Tunnel 暴露)
└── 共享: Memos service 创建笔记

快速开始

# 1. 安装依赖
uv sync

# 2. 配置环境变量
cp .env.example .env
# 编辑 .env 填入实际配置

# 3. 启动服务
uv run uvicorn imrobot.main:app --host 0.0.0.0 --port 8000

配置说明

变量 说明 必填
ENABLED_PLATFORMS 启用的平台 (逗号分隔: feishu, wecom, telegram)
MEMOS_URL Memos 实例地址 (内网 API 调用)
MEMOS_PUBLIC_URL Memos 公网地址 (IM 回复链接,默认同 MEMOS_URL)
MEMOS_TOKEN Memos Personal Access Token
FEISHU_APP_ID 飞书应用 ID 启用飞书时
FEISHU_APP_SECRET 飞书应用 Secret 启用飞书时
WECOM_TOKEN 企微机器人 Token 启用企微时
WECOM_ENCODING_AES_KEY 企微 EncodingAESKey (43位) 启用企微时
TELEGRAM_BOT_TOKEN Telegram Bot Token 启用 Telegram 时
TELEGRAM_ALLOWED_USERS 允许的用户 ID (逗号分隔,为空则不限制)
TELEGRAM_WEBHOOK_BASE_URL 公网地址 (用于自动注册 webhook)
AGGREGATOR_TIMEOUT 评论聚合超时秒数 (默认 10)

飞书配置指南

  1. 进入 飞书开放平台 → 创建企业自建应用
  2. 开启 机器人 能力
  3. 在「权限管理」中添加以下权限:
    • im:message.p2p_msg:readonly — 读取用户发给机器人的单聊消息
    • im:message.group_at_msg:readonly — 接收群聊中 @机器人的消息
    • im:message:send_as_bot — 以机器人身份发送消息
    • im:resource — 获取消息中的资源文件(用于下载图片)
  4. 在「事件与回调」中选择 长连接 模式(无需公网地址),订阅事件:
    • im.message.receive_v1 — 接收消息
  5. 获取 App IDApp Secret,填入 .env
  6. 发布应用版本并通过审核

本项目使用 WebSocket 长连接方式,无需配置回调 URL 和公网域名

企业微信配置指南

  1. 进入 企业微信管理后台 → 应用管理 → 创建「智能机器人」
  2. 在机器人配置页获取:
    • Token — 填入 .envWECOM_TOKEN
    • EncodingAESKey — 填入 .envWECOM_ENCODING_AES_KEY(43 位)
  3. 配置「接收消息 URL」为你的公网地址:
    https://your-domain.com/webhook/wecom
    
    保存时企微会发送 GET 验证请求,服务需先启动
  4. 公网暴露方式推荐使用 Cloudflare Tunnel:
    cloudflared tunnel --url http://localhost:8000

企微「智能机器人」的回调消息是加密的(AES-256-CBC),本项目已内置加解密处理。 图片/文件也是加密传输的,下载后自动解密。

Telegram 配置指南

  1. 在 Telegram 中搜索 @BotFather,发送 /newbot 创建机器人
  2. 获取 Bot Token,填入 .envTELEGRAM_BOT_TOKEN
  3. 获取你的 user ID(可通过 @userinfobot 查询),填入 TELEGRAM_ALLOWED_USERS
  4. 配置公网暴露(复用 Cloudflare Tunnel),webhook 路径为:
    https://your-domain.com/webhook/telegram
    
  5. 自动注册 webhook:设置 TELEGRAM_WEBHOOK_BASE_URL=https://your-domain.com,服务启动时会自动调用 setWebhook
  6. 手动注册 webhook(可选):
    curl "https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://your-domain.com/webhook/telegram"

通过 TELEGRAM_ALLOWED_USERS 限制仅授权用户可使用,多个用户用逗号分隔。留空则不限制。

评论合并 (// 前缀)

转发消息给机器人后,紧接着发送 // 你的评论,评论会自动合并到刚才的笔记中:

评论内容

---

原始转发内容

回复策略:每条 memo 只回复一次

  • 评论合并成功 → "Merged & saved to Memos: URL"
  • 无评论 → 延迟 2 秒后回复 "Saved to Memos: URL"
  • 飞书回复消息(有 parent_id)自动视为评论,无需 // 前缀

支持的消息类型

平台 文本 图片 富文本/图文混排 语音
飞书 text image post (富文本) -
企微 text image (单聊) mixed (图文混排) voice (转文本)
Telegram text photo (含 caption) - -

测试

# 单元测试
uv run pytest tests/test_wecom_crypto.py tests/test_telegram.py tests/test_aggregator.py -v

# 集成测试 (需要 Memos 实例)
uv run pytest tests/test_memos.py -v

# 类型检查
uv run mypy src/imrobot/

项目结构

src/imrobot/
├── main.py               # FastAPI 入口 + lifespan
├── config.py             # 统一配置
├── log.py                # 统一日志
├── services/
│   ├── memos.py          # Memos API 客户端
│   ├── aggregator.py     # 评论聚合器 (// 合并逻辑)
│   └── reply.py          # 统一回复文案
└── platforms/
    ├── feishu/
    │   ├── auth.py       # tenant_access_token 管理
    │   └── bot.py        # WS 长连接 + 消息处理
    ├── wecom/
    │   ├── crypto.py     # AES-256-CBC 加解密
    │   └── handler.py    # webhook 路由 + 消息处理
    └── telegram/
        └── handler.py    # webhook 路由 + 消息处理

About

在飞书、企微等 im 平台发送文本或图片,在 memo 里创建相关笔记。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors