介绍
# iMessage Auto-Responder
使用符合你的语气和对话上下文的 AI 生成回复,自动回复来自特定联系人的 iMessage/SMS。
## ⚠️ 要求清单
在使用此技能之前,请确保你已完成以下操作:
- [ ] 已登录 iMessage 的 **macOS** 上的 Messages.app - [ ] 已安装 **imsg CLI**:`brew install steipete/tap/imsg` - [ ] 在 Clawdbot 配置中配置了 **OpenAI API 密钥** - [ ] 已向 Terminal/iTerm 授予 **完全磁盘访问权限** - [ ] **Messages 自动化权限**(首次使用时 macOS 会提示)
## 功能特性
- 🤖 **AI 驱动的回复**,使用 OpenAI GPT-4 - 📱 **基于联系人的提示词** - 每个联系人拥有不同的 AI 个性 - ⏱️ **速率限制** - 可配置的自动回复之间的延迟 - 💬 **上下文感知** - AI 可以查看最近的对话历史 - 📊 **Telegram 管理** - 斜杠命令 + 自然语言 - 🔄 **后台监控** - 持续轮询新消息 - 🔧 **自动清理** - 重启时清除过期的锁(防止联系人卡住) - 🧪 **测试模式** - 生成真实的 AI 回复但不发送 - ⏰ **时间窗口** - 仅在特定时间段内回复(例如:上午 9 点 - 晚上 10 点) - 🔑 **关键词触发** - 仅当消息包含特定关键词时才回复(例如:“urgent”、“help”) - 📊 **统计跟踪** - 跟踪总回复数、每日计数和每个联系人的平均值 - 🚦 **每日上限** - 限制每个联系人每天的最大回复数(安全功能)
## 快速开始
### 1. 添加联系人到监视列表
```bash cd ~/clawd/imsg-autoresponder/scripts node manage.js add "+15551234567" "Reply with a middle finger emoji" "Best Friend" node manage.js add "+15559876543" "You are my helpful assistant. Reply warmly and briefly, as if I'm responding myself. Keep it under 160 characters." "Mom" ```
### 2. 启动监视器
```bash node watcher.js ```
监视器在前台运行,并记录日志到 `~/clawd/logs/imsg-autoresponder.log`。
### 3. 在后台运行(推荐)
```bash # Start in background nohup node ~/clawd/imsg-autoresponder/scripts/watcher.js > /dev/null 2>&1 &
# Or use screen/tmux screen -S imsg-watcher node ~/clawd/imsg-autoresponder/scripts/watcher.js # Ctrl+A, D to detach ```
## 配置
配置文件:`~/clawd/imsg-autoresponder.json`
```json { "enabled": true, "defaultMinMinutesBetweenReplies": 15, "watchList": [ { "identifier": "+15551234567", "name": "Best Friend", "prompt": "Reply with a middle finger emoji", "minMinutesBetweenReplies": 10, "enabled": true } ] } ```
## 通过 Telegram 管理(推荐)
可以通过 Telegram 使用 **斜杠命令** 或 **自然语言** 直接管理自动回复器。
### 斜杠命令
同时支持空格和下划线格式:
``` /autorespond list OR /autorespond_list /autorespond status OR /autorespond_status /autorespond add OR /autorespond_add <number> <name> <prompt> /autorespond remove OR /autorespond_remove <number> /autorespond edit OR /autorespond_edit <number> <prompt> /autorespond delay OR /autorespond_delay <number> <minutes> /autorespond history OR /autorespond_history <number> /autorespond test OR /autorespond_test <number> <message> /autorespond toggle OR /autorespond_toggle /autorespond restart OR /autorespond_restart
Bulk Operations: /autorespond set-all-delays OR /autorespond_set_all_delays <minutes> /autorespond enable-all OR /autorespond_enable_all /autorespond disable-all OR /autorespond_disable_all
Time Windows: /autorespond set-time-window OR /autorespond_set_time_window <number> <start> <end> /autorespond clear-time-windows OR /autorespond_clear_time_windows <number>
Keyword Triggers: /autorespond add-keyword OR /autorespond_add_keyword <number> <keyword> /autorespond remove-keyword OR /autorespond_remove_keyword <number> <keyword> /autorespond clear-keywords OR /autorespond_clear_keywords <number>
Statistics & Limits: /autorespond stats OR /autorespond_stats [<number>] /autorespond set-daily-cap OR /autorespond_set_daily_cap <number> <max> ```
**示例:** ``` /autorespond_list /autorespond_status /autorespond_edit +15551234567 Be more sarcastic /autorespond_delay +15551234567 30 /autorespond_history +15551234567 /autorespond_set_time_window +15551234567 09:00 22:00 /autorespond_clear_time_windows +15551234567 /autorespond_add_keyword +15551234567 urgent /autorespond_add_keyword +15551234567 help /autorespond_clear_keywords +15551234567 /autorespond_stats /autorespond_stats +15551234567 /autorespond_set_daily_cap +15551234567 10 /autorespond_set_all_delays 30 /autorespond_disable_all /autorespond_restart ```
### 自然语言
你也可以自然地询问:
- “显示自动回复器状态” - “将 +15551234567 添加到监视列表,提示词:要讽刺一点” - “把 Scott 的提示词改得更友善些” - “禁用对 Mom 的自动回复” - “自动回复器最近给 Foxy 发了什么?” - “重启自动回复器”
Agent 将使用 `telegram-handler.js` 脚本理解并执行命令。
## 命令行管理(高级)
```bash cd ~/clawd/imsg-autoresponder/scripts
# List all contacts node manage.js list
# Add contact node manage.js add "+15551234567" "Your custom prompt here" "Optional Name"
# Remove contact node manage.js remove "+15551234567"
# Enable/disable contact node manage.js enable "+15551234567" node manage.js disable "+15551234567"
# Set custom delay for contact (in minutes) node manage.js set-delay "+15551234567" 30
# Toggle entire system on/off node manage.js toggle ```
## 工作原理
1. **监视器**通过 `imsg watch` 监控所有传入消息 2. **检查监视列表**以查看发送者是否配置了自动回复 3. **速率限制**确保我们不会刷屏(可配置回复之间的分钟数) 4. **获取消息历史**,用于对话(最近 20 条消息) 5. **生成 AI 回复**,使用 Clawdbot + 联系人配置的提示词 6. **发送回复**,通过 `imsg send` 7. **记录所有内容**到 `~/clawd/logs/imsg-autoresponder.log`
## 状态跟踪
响应时间记录在 `~/clawd/data/imsg-autoresponder-state.json` 中:
```json { "lastResponses": { "+15551234567": 1706453280000 } } ```
这确保了速率限制在重启后仍能正常工作。
## 提示词
提示词定义了 AI 应该如何回复每个联系人。请务必具体!
**示例:**
``` "Reply with a middle finger emoji"
"You are my helpful assistant. Reply warmly and briefly, as if I'm responding myself. Keep it under 160 characters."
"You are my sarcastic friend. Reply with witty, slightly snarky responses. Keep it short."
"Politely decline any requests and say I'm busy. Be brief but friendly." ```
AI 将会看到: - 联系人的自定义提示词 - 最近的消息历史(最近 5 条消息) - 最新传入的消息
## 要求
- 已登录 iMessage 的 macOS - 已安装 `imsg` CLI(`brew install steipete/tap/imsg`) - Terminal 的完全磁盘访问权限 - 已安装并配置 Clawdbot - Anthropic API 密钥(在 `~/.clawdbot/clawdbot.json` 中配置或 `ANTHROPIC_API_KEY` 环境变量) - `curl`(macOS 上预装)
## 安全性
- **速率限制**防止刷屏(默认:每个联系人每次回复间隔 15 分钟) - **手动覆盖**,通过配置中的 `enabled: false` 或 `node manage.js disable <number>` - **系统开关**,用于禁用所有自动回复:`node manage.js toggle` - **日志**记录所有活动以供审查
## 故障排除
**监视器无响应:** - 检查 `~/clawd/logs/imsg-autoresponder.log` 查看错误 - 手动验证 `imsg watch` 是否工作:`imsg watch --json` - 确保联系人在监视列表中:`node manage.js list`
**速率限制过于激进:** - 调整延迟:`node manage.js set-delay "+15551234567" 5` - 或编辑配置中的 `defaultMinMinutesBetweenReplies`
**AI 回复不准确:** - 优化该联系人的提示词 - 检查消息历史记录是否被正确捕获(查看日志)
## Agent 命令处理
当用户使用斜杠命令或自然语言提及自动回复器时,使用 `telegram-handler.js` 脚本。
### 命令映射(支持两种格式)
| 用户输入 | 规范化为 | 处理器调用 | |------------|--------------|--------------| | `/autorespond list` 或 `/autorespond_list` | list | `node telegram-handler.js list` | | `/autorespond status` 或 `/autorespond_status` | status | `node telegram-handler.js status` | | `/autorespond add` 或 `/autorespond_add <args>` | add | `node telegram-handler.js add <number> <name> <prompt>` | | `/autorespond remove` 或 `/autorespond_remove <num>` | remove | `node telegram-handler.js remove <number>` | | `/autorespond edit` 或 `/autorespond_edit <args>` | edit | `node telegram-handler.js edit <number> <prompt>` | | `/autorespond delay` 或 `/autorespond_delay <args>` | delay | `node telegram-handler.js delay <number> <minutes>` | | `/autorespond history` 或 `/autorespond_history <num>` | history | `node telegram-handler.js history <number> [limit]` | | `/autorespond test` 或 `/autorespond_test <num> <msg>` | test | `node telegram-handler.js test <number> <message>` | | `/autorespond toggle` 或 `/autorespond_toggle` | toggle | `node telegram-handler.js toggle` | | `/autorespond restart` 或 `/autorespond_restart` | restart | `node telegram-handler.js restart` | | `/autorespond set-all-delays` 或 `/autorespond_set_all_delays <min>` | set-all-delays | `node telegram-handler.js set-all-delays <minutes>` | | `/autorespond enable-all` 或 `/autorespond_enable_all` | enable-all | `node telegram-handler.js enable-all` | | `/autorespond disable-all` 或 `/autorespond_disable_all` | disable-all | `node telegram-handler.js disable-all` | | `/autorespond set-time-window` 或 `/autorespond_set_time_window <num> <s> <e>` | set-time-window | `node telegram-handler.js set-time-window <number> <start> <end>` | | `/autorespond clear-time-windows` 或 `/autorespond_clear_time_windows <num>` | clear-time-windows | `node telegram-handler.js clear-time-windows <number>` | | `/autorespond add-keyword` 或 `/autorespond_add_keyword <num> <word>` | add-keyword | `node telegram-handler.js add-keyword <number> <keyword>` | | `/autorespond remove-keyword` 或 `/autorespond_remove_keyword <num> <word>` | remove-keyword | `node telegram-handler.js remove-keyword <number> <keyword>` | | `/autorespond clear-keywords` 或 `/autorespond_clear_keywords <num>` | clear-keywords | `node telegram-handler.js clear-keywords <number>` | | `/autorespond stats` 或 `/autorespond_stats [<num>]` | stats | `node telegram-handler.js stats [<number>]` | | `/autorespond set-daily-cap` 或 `/autorespond_set_daily_cap <num> <max>` | set-daily-cap | `node telegram-handler.js set-daily-cap <number> <max>` |
**处理步骤:** 1. 检测 `/autorespond` 或 `/autorespond_` 前缀 2. 提取子命令(将下划线规范化为空格) 3. 解析剩余参数 4. 使用适当的参数调用 telegram-handler.js
### 自然语言模式匹配
- “show/list/view auto-responder”(显示/列出/查看自动回复器) → `node telegram-handler.js list` - “add [contact] to auto-responder”(添加 [联系人] 到自动回复器) → `node telegram-handler.js add <number> <name> <prompt>` - “change/edit/update [contact]'s prompt”(更改/编辑/更新 [联系人] 的提示词) → `node telegram-handler.js edit <number> <prompt>` - “set delay for [contact]”(设置 [联系人] 的延迟) → `node telegram-handler.js delay <number> <minutes>` - “disable/remove [contact] from auto-responder”(从自动回复器禁用/移除 [联系人]) → `node telegram-handler.js remove <number>` - “auto-responder status”(自动回复器状态) → `node telegram-handler.js status` - “what has auto-responder sent to [contact]”(自动回复器给 [联系人] 发了什么) → `node telegram-handler.js history <number>` - “restart auto-responder”(重启自动回复器) → `node telegram-handler.js restart` - “enable/disable auto-responder”(启用/禁用自动回复器) → `node telegram-handler.js toggle`
**联系人解析:** - 当用户提及联系人姓名时,从配置中查找其电话号码 - 始终使用完整的 E.164 格式(例如 `+15551234567`)
**配置更改后:** 如果命令输出提及,务必提醒用户重启监视器。
## 故障排除
### 监视器无响应
**检查状态:** ``` /autorespond_status ```
**查看日志:** ```bash tail -f ~/clawd/logs/imsg-autoresponder.log ```
**重启:** ``` /autorespond_restart ```
### 常见问题
**“OPENAI_API_KEY not found”(未找到 OPENAI_API_KEY)** - 将 API 密钥添加到 `~/.clawdbot/clawdbot.json`: ```json { "skills": { "openai-whisper-api": { "apiKey": "sk-proj-YOUR_KEY_HERE" } } } ``` - 添加密钥后重启监视器
**权限错误** - 在系统设置中授予 Terminal 完全磁盘访问权限 - 授予权限后重启 Terminal - 手动验证 `imsg chats --json` 是否工作
**未检测到消息** - 检查 Messages.app 是否已登录 - 验证联系人在监视列表中:`/autorespond_list` - 确保监视器正在运行:`/autorespond_status`
**重复回复** - 当前版本已通过处理锁修复此问题 - 重启监视器以应用修复:`/autorespond_restart`
### 测试
生成真实的 AI 回复但不发送(预览模式): ``` /autorespond_test +15551234567 Hey what's up? ```
这将: - 使用联系人的实际提示词 - 通过 OpenAI 生成真实的 AI 回复 - 显示确切将发送的内容 - **不实际发送**消息
非常适合在上线前测试新的提示词!
## 隐私与安全
⚠️ **重要提示:** 此工具代表你自动发送消息。
- 仅添加知道他们在与 AI 对话或不会介意的联系人 - 定期通过 `/autorespond_history` 查看回复 - 使用速率限制以避免刷屏 - 在适当的时候保持透明 - 如需要,立即禁用:`/autorespond_toggle`
## 未来增强功能
- 基于对话模式的智能速率限制 - 群聊支持 - Web 仪表盘 - 语音消息转文字