ai_member_xiaokui/skills/feishu-group-msg-sync/references/query_examples.md
--git_token 1dae909219 完善引用回复关系文档:修正技术说明、统一飞书/微信查询示例
- feishu-group-msg-sync/SKILL.md: 修正引用关系识别机制说明(reply_to字段)
- feishu-group-msg-sync/references/query_examples.md: 重写引用查询文档,增加多级追溯、字段对照
- user-feedback-collector/SKILL.md: 新增飞书+微信引用关系统一查询章节
- sync_group_to_mysql.py: 修复extract_quote_message_id从reply_to提取
- sync_feishu_full_history.py: 同步修复
2026-04-23 19:43:37 +08:00

5.0 KiB
Raw Permalink Blame History

飞书群消息查询示例

数据库表结构

lark_group_message 表包含以下关键字段:

字段 类型 说明
message_id varchar(128) 消息唯一IDom_xxx
quote_message_id varchar(128) 引用消息ID — 当消息是引用回复时,记录被引用消息的 message_id
parent_id varchar(128) 父消息ID话题根消息预留字段
root_id varchar(128) 根消息ID话题根消息预留字段
sender_id varchar(128) 发送者IDopen_id
sender_name varchar(255) 发送者显示名称
msg_type varchar(32) 消息类型text/post/image/media/audio/file/sticker
content text 消息文本内容或描述
media_url varchar(1024) 媒体文件COS URL
msg_time datetime 消息发送时间
msg_timestamp bigint 消息时间戳(毫秒)

引用回复关系

数据来源

飞书中用户点击"回复"某条消息时lark-cli 返回的消息数据中包含 reply_to 字段(字符串类型,值为被引用消息的 message_id)。同步脚本提取后存入 quote_message_id 字段。

判断一条消息是否是引用回复

-- quote_message_id 不为 NULL 的消息就是引用回复
SELECT * FROM lark_group_message WHERE quote_message_id IS NOT NULL;

与微信数据表的对应关系

飞书表字段 微信表字段 类型差异 说明
message_id (varchar) svr_msg_id (bigint) 飞书是字符串、微信是数字 消息唯一标识
quote_message_id (varchar) refer_msg_svrid (bigint) 飞书是字符串、微信是数字 被引用消息的ID

两张表的引用关系逻辑完全一致:

  • 飞书:quote_message_id 指向被引用消息的 message_id
  • 微信:refer_msg_svrid 指向被引用消息的 svr_msg_id

引用回复查询

1. 查询某条消息的所有回复

-- 查询某条消息被哪些消息引用回复了
SELECT message_id, sender_name, content, msg_time
FROM lark_group_message 
WHERE quote_message_id = 'om_xxx'
ORDER BY msg_timestamp;

2. 查询完整对话链(原消息 + 所有回复)

SELECT 
    message_id,
    sender_name,
    content,
    media_url,
    msg_time,
    CASE 
        WHEN quote_message_id IS NULL THEN '📝 原消息'
        ELSE CONCAT('↳ 回复 ', quote_message_id)
    END AS message_role
FROM lark_group_message 
WHERE message_id = 'om_xxx' OR quote_message_id = 'om_xxx'
ORDER BY msg_timestamp;

3. 多级引用链追溯A → B → C

当存在多级引用时C 引用 BB 引用 A需要递归查询

-- 第一步:找到目标消息(起点)
SELECT message_id, sender_name, content, quote_message_id, msg_time
FROM lark_group_message WHERE message_id = 'om_目标消息ID';

-- 第二步:向上追溯(找到被引用的原消息)
SELECT message_id, sender_name, content, quote_message_id, msg_time
FROM lark_group_message WHERE message_id = '上一步的quote_message_id';

-- 第三步:向下展开(找到引用目标消息的所有回复)
SELECT message_id, sender_name, content, quote_message_id, msg_time
FROM lark_group_message WHERE quote_message_id = 'om_目标消息ID'
ORDER BY msg_timestamp;

4. 统计热门话题(被回复最多的消息)

SELECT 
    m1.message_id,
    m1.sender_name,
    LEFT(m1.content, 80) AS content_preview,
    m1.msg_time,
    COUNT(m2.id) AS reply_count
FROM lark_group_message m1
INNER JOIN lark_group_message m2 ON m1.message_id = m2.quote_message_id
WHERE m1.chat_id = 'oc_fabff7672e62a9ced7b326ee4a286c26'
  AND m1.msg_time >= DATE_SUB(NOW(), INTERVAL 7 DAY)
GROUP BY m1.message_id
ORDER BY reply_count DESC
LIMIT 10;

5. 查看某人发出的消息中,哪些收到了回复

SELECT 
    m1.message_id,
    LEFT(m1.content, 60) AS original_content,
    m1.msg_time,
    COUNT(m2.id) AS reply_count,
    GROUP_CONCAT(m2.sender_name SEPARATOR ', ') AS replied_by
FROM lark_group_message m1
INNER JOIN lark_group_message m2 ON m1.message_id = m2.quote_message_id
WHERE m1.sender_name = '胡陈辰'
GROUP BY m1.message_id
ORDER BY m1.msg_timestamp DESC;

常用查询

6. 查询最近7天的所有消息

SELECT message_id, sender_name, msg_type, content, media_url, quote_message_id, msg_time
FROM lark_group_message 
WHERE chat_id = 'oc_fabff7672e62a9ced7b326ee4a286c26'
  AND msg_time >= DATE_SUB(NOW(), INTERVAL 7 DAY)
ORDER BY msg_timestamp DESC;

7. 按消息类型统计

SELECT msg_type, COUNT(*) AS count
FROM lark_group_message 
WHERE chat_id = 'oc_fabff7672e62a9ced7b326ee4a286c26'
  AND msg_time >= DATE_SUB(NOW(), INTERVAL 7 DAY)
GROUP BY msg_type
ORDER BY count DESC;

8. 关键词搜索

SELECT message_id, sender_name, content, quote_message_id, msg_time
FROM lark_group_message 
WHERE chat_id = 'oc_fabff7672e62a9ced7b326ee4a286c26'
  AND content LIKE '%闪退%'
ORDER BY msg_timestamp DESC;