Track and find unanswered messages using a local file-based inbox. No DB required. Use when asked to find unanswered messages, missed messages, people waiting for a response, or to log a new incoming message.
技能名称: unanswered-messages
详细描述:
追踪发送给Heleni但尚未回复的消息。
无需数据库 — 使用 /opt/ocana/openclaw/workspace/inbox/pending.json。
/opt/ocana/openclaw/workspace/inbox/pending.json:
json
{
version: 1,
messages: [
{
id: MSG_ID,
ts: 2026-04-01T14:30:00Z,
chat_id: +972XXXXXXXXX,
chat_name: Netanel,
chat_type: direct,
sender_name: Netanel,
sender_phone: +972XXXXXXXXX,
body: message text...,
answered: false,
answered_at: null
}
]
}
当需要回复的消息到达时,将其添加到文件中:
python
import json, datetime
INBOX = /opt/ocana/openclaw/workspace/inbox/pending.json
with open(INBOX) as f:
data = json.load(f)
data[messages].append({
id:
ts: datetime.datetime.utcnow().isoformat() + Z,
chatid:
chatname:
chat_type: direct, # 或 group
sendername:
senderphone:
body:
answered: False,
answered_at: None
})
with open(INBOX, w) as f:
json.dump(data, f, indent=2)
回复后,将其标记为已完成:
python
import json, datetime
INBOX = /opt/ocana/openclaw/workspace/inbox/pending.json
with open(INBOX) as f:
data = json.load(f)
for msg in data[messages]:
if msg[id] ==
msg[answered] = True
msg[answered_at] = datetime.datetime.utcnow().isoformat() + Z
with open(INBOX, w) as f:
json.dump(data, f, indent=2)
python
import json
from datetime import datetime, timedelta, timezone
INBOX = /opt/ocana/openclaw/workspace/inbox/pending.json
MAXAGEHOURS = 24 # 忽略非常旧的消息
with open(INBOX) as f:
data = json.load(f)
cutoff = datetime.now(timezone.utc) - timedelta(hours=MAXAGEHOURS)
unanswered = [
m for m in data[messages]
if not m[answered]
and datetime.fromisoformat(m[ts].replace(Z, +00:00)) > cutoff
]
for m in sorted(unanswered, key=lambda x: x[ts]):
ts = datetime.fromisoformat(m[ts].replace(Z, +00:00)).strftime(%d/%m %H:%M)
print(f📩 {m[sendername]} | {m[chatname]} | {ts})
print(f > {m[body][:100]})
print(f Message ID: {m[id]})
定期运行(例如通过心跳每周一次)以保持文件小巧:
python
import json
from datetime import datetime, timedelta, timezone
INBOX = /opt/ocana/openclaw/workspace/inbox/pending.json
with open(INBOX) as f:
data = json.load(f)
cutoff = datetime.now(timezone.utc) - timedelta(days=7)
data[messages] = [
m for m in data[messages]
if not m[answered]
or datetime.fromisoformat(m[ts].replace(Z, +00:00)) > cutoff
]
with open(INBOX, w) as f:
json.dump(data, f, indent=2)
print(fKept {len(data[messages])} messages)
在心跳期间,检查过去2小时内未回复的消息:
python
import json
from datetime import datetime, timedelta, timezone
INBOX = /opt/ocana/openclaw/workspace/inbox/pending.json
with open(INBOX) as f:
data = json.load(f)
cutoff = datetime.now(timezone.utc) - timedelta(hours=2)
unanswered = [
m for m in data[messages]
if not m[answered]
and datetime.fromisoformat(m[ts].replace(Z, +00:00)) > cutoff
]
if unanswered:
# 提醒Netanel或直接处理
for m in unanswered:
print(f⚠️ לא ענינו ל-{m[sender_name]}: {m[body][:80]})
将此检查添加到 HEARTBEAT.md 的 Heartbeat Checks 部分下。
报告未回复消息的格式为:
如果来自同一对话的多条消息,则按聊天分组。
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 unanswered-messages-1775884741 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 unanswered-messages-1775884741 技能
skillhub install unanswered-messages-1775884741
文件大小: 2.26 KB | 发布时间: 2026-4-12 11:47