Maintain separate memory contexts per WhatsApp conversation — both groups and direct messages (DMs). Use when: tracking what was discussed with a specific person or in a specific group, recalling past context before responding, logging decisions or key facts from a conversation, or preventing context bleed between different chats.
没有对话记忆,不同聊天中的上下文会相互干扰,你无法回顾每个群组或个人的历史决策。该技能为每个群组和私信提供独立的上下文文件。
memory/
whatsapp/
groups/
120363408613668489-g-us/ ← 经过净化的JID
meta.json ← 群组名称、JID、参与者
context.md ← 持续更新的对话上下文
decisions.md ← 关键决策
people.md ← 参与者及其角色
dms/
972XXXXXXXXX/ ← 经过净化的电话号码
meta.json ← 姓名、电话、关系
context.md ← 持续更新的私信上下文
notes.md ← 任务、偏好、重要事实
bash
initwhatsappmemory() {
TYPE=$1 # group 或 dm
ID=$2 # JID 或电话号码
NAME=$3 # 可读名称
# 净化ID以用作目录名
SAFE_ID=$(echo $ID | tr @.+ ---)
if [ $TYPE = group ]; then
DIR=$HOME/.openclaw/workspace/memory/whatsapp/groups/$SAFE_ID
mkdir -p $DIR
# 写入元数据文件
cat > $DIR/meta.json << EOF
{type: group, jid: $ID, name: $NAME, created: $(date -u +%Y-%m-%dT%H:%M:%SZ)}
EOF
# 创建空日志文件
touch $DIR/context.md $DIR/decisions.md $DIR/people.md
else
DIR=$HOME/.openclaw/workspace/memory/whatsapp/dms/$SAFE_ID
mkdir -p $DIR
# 写入元数据文件
cat > $DIR/meta.json << EOF
{type: dm, phone: $ID, name: $NAME, created: $(date -u +%Y-%m-%dT%H:%M:%SZ)}
EOF
# 创建空日志文件
touch $DIR/context.md $DIR/notes.md
fi
echo 已初始化WhatsApp记忆:$NAME
}
bash
wa_log() {
TYPE=$1 # group 或 dm
ID=$2 # JID 或电话
CONTENT=$3 # 要记录的内容
FILE_NAME=${4:-context.md} # context.md / decisions.md / notes.md
# 净化ID
SAFE_ID=$(echo $ID | tr @.+ ---)
BASE=$HOME/.openclaw/workspace/memory/whatsapp
# 选择正确的目录
if [ $TYPE = group ]; then
FILE=$BASE/groups/$SAFEID/$FILENAME
else
FILE=$BASE/dms/$SAFEID/$FILENAME
fi
# 如果文件不存在则创建
if [ ! -f $FILE ]; then
mkdir -p $(dirname $FILE)
touch $FILE
fi
# 添加带时间戳的条目
echo [$(date -u +%Y-%m-%d\ %H:%M)] $CONTENT >> $FILE
}
bash
wa_context() {
TYPE=$1
ID=$2
LINES=${3:-20}
# 净化ID
SAFE_ID=$(echo $ID | tr @.+ ---)
BASE=$HOME/.openclaw/workspace/memory/whatsapp
# 选择目录
if [ $TYPE = group ]; then
DIR=$BASE/groups/$SAFE_ID
else
DIR=$BASE/dms/$SAFE_ID
fi
# 检查记忆是否存在
if [ ! -d $DIR ]; then
echo 该对话尚无记忆。
return
fi
# 从meta.json读取对话名称
NAME=$(python3 -c
import json
with open($DIR/meta.json) as f:
print(json.load(f).get(name, ?))
2>/dev/null || echo ?)
echo === $NAME ===
echo --- 近期 ---
tail -$LINES $DIR/context.md 2>/dev/null || echo (空)
echo --- 备注/决策 ---
cat $DIR/notes.md $DIR/decisions.md 2>/dev/null | tail -10 || echo (无)
}
bash
wa_search() {
QUERY=$1
BASE=$HOME/.openclaw/workspace/memory/whatsapp
echo 正在搜索WhatsApp记忆:$QUERY
# 查找包含查询内容的所有markdown文件
grep -r $QUERY $BASE --include=*.md -l 2>/dev/null | while read file; do
DIR=$(dirname $file)
# 从meta.json获取对话名称
NAME=$(python3 -c
import json
with open($DIR/meta.json) as f:
print(json.load(f).get(name, ?))
2>/dev/null || echo ?)
echo 在以下位置找到:$NAME
# 显示匹配行及行号
grep -n $QUERY $file | head -3
echo
done
}
| 文件 | 用途 |
|---|---|
| context.md | 持续进行的对话事件 |
| decisions.md |
每条入站消息处理流程:
这些规则防止消息循环和重复发送——从多PA群组场景中总结得出。
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 whatsapp-memory-1775884456 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 whatsapp-memory-1775884456 技能
skillhub install whatsapp-memory-1775884456
文件大小: 4.16 KB | 发布时间: 2026-4-12 11:58