| name | lark-group-sentinel |
| version | 1.0.0 |
| description | 飞书群舆情监控与智能预警:实时监听指定群聊消息,进行情绪分析、关键词检测、话题聚类和异常预警,支持生成舆情日报/周报并推送到飞书文档或多维表格。当用户需要监控群聊舆情、分析群消息情绪、检测关键词或敏感词、生成群聊舆情报告、设置群消息预警规则时使用。 |
| metadata | {"requires":{"bins":["lark-cli"]},"cliHelp":"lark-cli event --help && lark-cli im --help"} |
飞书群舆情监控与智能预警 (lark-group-sentinel)
前置条件: 先阅读 ../lark-shared/SKILL.md 了解认证、权限处理和安全规则。
概述
本 Skill 将飞书 CLI 的实时事件订阅(lark-event)、消息管理(lark-im)、文档(lark-doc)和多维表格(lark-base)能力编排为一个完整的群舆情监控工作流,实现:
- 实时监听 — 通过 WebSocket 长连接捕获指定群聊的每条消息
- 智能分析 — 对消息进行情绪分析、关键词命中检测、话题聚类
- 异常预警 — 当负面情绪激增或敏感词命中时,立即推送预警
- 报告生成 — 定时生成舆情日报/周报,输出为飞书文档或多维表格
架构
┌─────────────────────────────────────────────────────────┐
│ lark-group-sentinel │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ 实时监听 │───→│ 智能分析 │───→│ 异常预警推送 │ │
│ │(lark-event)│ │(AI Agent) │ │ (lark-im send) │ │
│ └──────────┘ └────┬─────┘ └──────────────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────┐ ┌──────────────────┐ │
│ │ 数据持久化 │───→│ 舆情报告生成 │ │
│ │ (lark-base) │ │ (lark-doc/sheets)│ │
│ └────────────────┘ └──────────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
前置配置
平台侧配置(飞书开放平台后台)
- 事件订阅方式:进入应用 → 事件与回调 → 订阅方式 → 选择「使用长连接接收事件」
- 添加事件类型:
im.message.receive_v1 — 接收消息(必须)
im.message.reaction.created_v1 — 表情回应(可选,用于情绪辅助判断)
im.chat.member.user.added_v1 — 成员加入(可选,用于监控群规模变化)
- 开通权限:
im:message:receive_as_bot — 机器人接收消息
im:message — 发送消息(预警推送)
im:chat:read — 读取群信息
im:message:readonly — 读取消息记录
im:chat.members:read — 读取群成员
- 将机器人加入目标监控群
身份要求
| 操作 | 身份 | 说明 |
|---|
| 事件监听 | --as bot | WebSocket 长连接仅支持 bot 身份 |
| 发送预警 | --as bot | 以机器人身份发送预警消息 |
| 搜索历史消息 | --as user | 用户身份可搜索更多历史消息 |
| 创建文档/表格 | --as user 或 --as bot | 均可,user 归属用户,bot 归属应用 |
工作流
工作流一:实时舆情监控管道
实时监听群消息,逐条分析并触发预警。
lark-cli event +subscribe \
--event-types im.message.receive_v1 \
--compact --quiet
输出格式(每行一条消息):
{"type":"im.message.receive_v1","id":"om_xxx","message_id":"om_xxx","chat_id":"oc_xxx","chat_type":"group","message_type":"text","content":"大家好,今天产品上线了","sender_id":"ou_xxx","create_time":"1773491924409","timestamp":"1773491924409"}
AI Agent 处理逻辑(对每条消息执行):
- 过滤目标群:检查
chat_id 是否在监控列表中
- 情绪分析:分析
content 的情绪倾向(正面/负面/中性)
- 关键词检测:检查
content 是否命中预设关键词/敏感词列表
- 话题分类:将消息归类到话题标签(产品反馈、技术问题、投诉建议、日常闲聊等)
- 触发预警:如果负面情绪得分超过阈值或命中敏感词,立即发送预警
工作流二:发送预警消息
当检测到异常时,向管理员群或指定人员发送预警卡片。
lark-cli im +messages-send \
--chat-id "oc_<管理员群ID>" \
--msg-type text \
--text "⚠️ 舆情预警\n群:产品反馈群\n时间:2026-04-15 17:30\n消息:「这个功能太烂了,完全不能用」\n情绪:负面 (得分 -0.85)\n命中关键词:[功能, 烂]"
lark-cli im +messages-send \
--chat-id "oc_<管理员群ID>" \
--msg-type post \
--title "⚠️ 舆情预警" \
--content "**群名称**:产品反馈群\n**时间**:2026-04-15 17:30\n**发送者**:张三\n**消息内容**:这个功能太烂了,完全不能用\n**情绪分析**:🔴 负面 (得分 -0.85)\n**命中关键词**:功能、烂\n**建议**:建议产品经理关注"
工作流三:历史消息批量分析
对指定群的历史消息进行批量舆情分析,生成分析报告。
lark-cli im +messages-search \
--chat-id "oc_<目标群ID>" \
--start-time "2026-04-14T00:00:00+08:00" \
--end-time "2026-04-15T00:00:00+08:00" \
--page-all \
--format json
lark-cli im chat.members get \
--chat-id "oc_<目标群ID>" \
--format json
AI Agent 批量分析逻辑:
- 解析搜索结果中的所有消息
- 逐条进行情绪分析和关键词检测
- 统计汇总:
- 消息总量、活跃人数
- 情绪分布(正面/负面/中性占比)
- 高频关键词 TOP 10
- 话题分布
- 负面消息列表(按严重程度排序)
- 生成结构化报告
工作流四:生成舆情报告文档
将分析结果输出为飞书文档。
lark-cli docs +create \
--title "📊 群舆情日报 - 产品反馈群 (2026-04-15)" \
--markdown "# 群舆情日报
## 基本信息
- **监控群**:产品反馈群
- **统计周期**:2026-04-14 00:00 ~ 2026-04-15 00:00
- **消息总量**:156 条
- **活跃人数**:23 人
## 情绪分布
| 情绪 | 数量 | 占比 |
|------|------|------|
| 正面 | 89 | 57% |
| 中性 | 45 | 29% |
| 负面 | 22 | 14% |
## 高频关键词 TOP 10
| 排名 | 关键词 | 出现次数 |
|------|--------|---------|
| 1 | 上线 | 18 |
| 2 | 功能 | 15 |
| 3 | 问题 | 12 |
| 4 | 体验 | 9 |
| 5 | 慢 | 8 |
## 话题分布
- 产品反馈:45%
- 技术问题:25%
- 日常闲聊:20%
- 投诉建议:10%
## ⚠️ 负面消息 TOP 5
1. **[17:30] 张三**:「这个功能太烂了,完全不能用」(情绪得分: -0.85)
2. **[15:12] 李四**:「加载太慢了,等了半分钟」(情绪得分: -0.72)
3. ...
## 建议
- 关注「功能」相关负面反馈,建议产品经理跟进
- 「慢」相关投诉集中在下午时段,可能与服务器负载有关"
工作流五:数据持久化到多维表格
将每条分析结果记录到多维表格,便于长期追踪和可视化。
lark-cli api POST /open-apis/bitable/v1/apps/<app_token>/tables/<table_id>/records \
--data '{
"fields": {
"消息ID": "om_xxx",
"群名称": "产品反馈群",
"群ID": "oc_xxx",
"发送者": "张三",
"发送时间": 1773491924409,
"消息内容": "这个功能太烂了",
"消息类型": "text",
"情绪倾向": "负面",
"情绪得分": -0.85,
"命中关键词": "功能, 烂",
"话题分类": "产品反馈",
"是否预警": true,
"预警级别": "高"
}
}' \
--as bot
工作流六:完整管道示例(Bash 脚本)
将以上工作流组合为一个完整的监控管道:
#!/bin/bash
MONITORED_CHATS="oc_<群1>,oc_<群2>"
ALERT_CHAT="oc_<管理员群ID>"
KEYWORDS="功能,烂,慢,崩,退款,投诉,差评"
NEGATIVE_THRESHOLD=-0.7
lark-cli event +subscribe \
--event-types im.message.receive_v1 \
--compact --quiet \
| while IFS= read -r line; do
chat_id=$(echo "$line" | jq -r '.chat_id // empty')
content=$(echo "$line" | jq -r '.content // empty')
message_id=$(echo "$line" | jq -r '.message_id // empty')
sender_id=$(echo "$line" | jq -r '.sender_id // empty')
msg_type=$(echo "$line" | jq -r '.message_type // empty')
[[ -z "$chat_id" ]] && continue
echo "$MONITORED_CHATS" | grep -q "$chat_id" || continue
[[ "$msg_type" != "text" ]] && continue
[[ -z "$content" ]] && continue
echo "[$(date)] 收到消息: chat=$chat_id content=$content"
done
注意:上述脚本中的 AI 分析部分(情绪打分、关键词匹配、话题分类)需要由 AI Agent 在管道中完成。AI Agent 读取每条消息后进行分析,然后决定是否触发预警和记录。
权限表
| 操作 | 身份 | 所需 scope |
|---|
| 事件监听(WebSocket) | bot | im:message:receive_as_bot |
| 发送预警消息 | bot | im:message |
| 搜索历史消息 | user | im:message:readonly, im:message.group_msg:get_as_user |
| 获取群成员 | bot/user | im:chat.members:read |
| 获取群信息 | bot/user | im:chat:read |
| 创建文档 | user/bot | docx:document:create |
| 更新文档 | user/bot | docx:document:write_only |
| 写入多维表格 | bot | base:record:create |
| 读取多维表格 | bot | base:record:read |
安全规则
- 隐私保护:监控前必须获得群管理员和成员的知情同意
- 数据最小化:仅采集和分析必要的数据字段,避免存储敏感个人信息
- 预警克制:避免预警疲劳,同一话题短时间内不重复预警(去重窗口建议 30 分钟)
- 写入确认:首次写入多维表格或创建文档前,使用
--dry-run 预览
- 禁止公开:舆情分析结果仅限授权人员查看,不得转发到被监控群
使用场景
| 场景 | 说明 |
|---|
| 产品反馈监控 | 监控用户群的产品反馈,及时发现负面体验 |
| 客户服务质检 | 监控客服群的服务质量,检测不当言论 |
| 内部舆情预警 | 监控公司大群,预防负面情绪蔓延 |
| 竞品动态追踪 | 监控行业群中的竞品讨论 |
| 社区健康度 | 定期生成社区群活跃度和情绪健康报告 |
相关 Skill