《用OpenClaw打造竞赛情报助手:自动识别+智能提醒》
本文介绍如何基于OpenClaw框架打造竞赛情报自动监听与报名系统。系统通过飞书群机器人监听竞赛信息,结合关键词过滤与AI智能验证自动识别有效竞赛,支持PDF/文档解析、多维表格顺序存储、云文档自动生成备赛攻略,并可通过定时提醒功能在竞赛截止前自动通知用户。本文详细阐述系统在Lighthouse服务器上的部署步骤、核心代码实现及实际运行效果,为高校学生、社团等提供了一套高效的信息管理解决方案。
一、前言
在大学生活中,各类学科竞赛、创新创业大赛是提升能力、丰富履历的重要途径。从含金量极高的“挑战杯”、“互联网+”,到各类专业领域的建模赛、程序设计赛、外语演讲赛,竞赛信息如同雨后春笋般涌现。然而,竞赛信息分散在官网、公众号、群聊等多个渠道,容易错过报名截止时间。本篇文章将介绍如何基于OpenClaw打造一个竞赛情报自动监听与报名系统,实现竞赛信息的自动识别、智能过滤、及时提醒,让大学生不再错过任何重要比赛。
二、核心痛点
1.信息的“碎片化”与“孤岛化”
竞赛通知散落在学校官网的角落、导师的微信群、学长的转发、以及层出不穷的公众号推文中。这些信息没有统一的入口,往往当我们看到某个极具吸引力的竞赛时,报名链接可能早已失效,或者已经在聊天记录中被海量的“收到”淹没。
2.文本内容的“高熵化”与“低效率”
一份正规的竞赛通知往往伴随着长达十几甚至几十页的PDF、word文件,或者长达数千字的纯文字公告。学生需要从这些“高熵”内容中艰难地抠出报名时间、参赛资格、作品要求等核心要素。这种机械的提取工作极大地消耗了宝贵的科研精力,甚至让人因为“文档太长”而产生畏难情绪。
三、方案设计
1.技术选型
-
Openclaw:开源AI Agent框架,支持多种IM(企业微信、飞书、Telegram等)
-
飞书:国内广泛使用的企业协作平台,支持群聊、机器人、多维表格、云文档等
-
多维表格:用于存储竞赛情报数据
-
云文档:用于生成详细的备赛攻略
-
定时任务(Cron):实现每日定时提醒
2.系统架构
用户(飞书群) → OpenClaw Agent → AI处理 → 多维表格/云文档
↓
定时提醒Cron → 用户(私信)
核心流程:
1.监听群消息 → 2. 关键词过滤 → 3. AI验证 → 4. 提取信息 → 5. 写表+写文档 → 6. 定时提醒
四、部署说明
1.环境准备
(1)服务器:通过Lighthouse服务器(轻量应用服务器)来安装运行OpenClaw。应用创建方式:应用模板 > OpenClaw(Clawdbot)。由于 OpenClaw 运行涉及 AI 逻辑处理,建议选择 2核4G 或以上配置。

(2)为OpenClaw配置模型和通道
在创建好服务器后,打开服务器的管理应用,进入OpenClaw的配置面板,如下图,我们需要在这里配置模型与通道。
首先是配置模型,这里支持多种国内大模型API Key一键配置,也支持配置其他的自定义模型(如OpenAI GPT、Gemini、Claude等),这里我配置了MiniMax M2模型,在开放平台的API Key管理页获取了API Key,填写到面板的“API Key”输入框,点击添加并应用按钮保存模型API Key。配置具体步骤可以参考链接 :一键秒级部署:https://cloud.tencent.com/developer/article/2624003
接着是配置通道,这里我接入了飞书,需要在飞书开放平台创建企业自建应用,在凭证与基础信息获取App ID以及App Secret,之后在“通道配置”输入框,选择“飞书”,输入前面步骤中查询到的飞书机器人的App ID和App Secret,并点击应用并确定执行操作。
2.配置飞书机器人
基本操作步骤如下:
(1)登录飞书开放平台:https://open.feishu.cn/
(2)创建企业自建应用
(3)添加应用权限(我这里添加了所有的应用权限,以下是部分核心权限):
-
im:message(接收消息)
-
im:chat:member(群成员管理)
-
bitable:table(多维表格操作)
-
docx:file(云文档操作)
(4)在群里添加机器人为成员
这里具体配置步骤不做过多展示。
3.配置文件
在 /root/.openclaw/openclaw.json 中配置:
{
"channels": {
"feishu": {
"enabled": true,
"appId": "cli_xxxxxxxxxxxxx",
"appSecret": "xxxxxxxxxxxxxxxx",
"domain": "feishu",
"groupPolicy": "open"
}
}
}
五、核心功能实现
1.创建Skill目录结构
在OpenClaw工作空间创建技能目录:
mkdir -p /root/.openclaw/workspace/skills/competition-listener
cd /root/.openclaw/workspace/skills/competition-listener
2.关键词过滤模块
监听群消息,自动检测竞赛相关关键词:
// 关键词列表
const KEYWORDS = ['竞赛', '比赛', '征集', '报名', '截止', '大赛', '征稿', '挑战杯', '互联网+'];
// 检查消息是否包含竞赛关键词
function isCompetitionMessage(message) {
if (!message) return false;
return KEYWORDS.some(kw => message.includes(kw));
}
// 检查是否是PDF文件
function isPDFMessage(message, attachments) {
return attachments && attachments.some(a => a.type === 'file' && a.name.endsWith('.pdf'));
}
3.AI预处理模块
使用AI验证内容是否与竞赛相关,并提取关键信息:
// AI验证是否与竞赛相关
async function isCompetitionRelated(content) {
const prompt = `请判断以下内容是否与大学生竞赛/比赛/征集活动相关。
只需要回答"相关"或"不相关"。
内容:${content.substring(0, 500)}`;
const response = await callAI(prompt);
return response.includes('相关');
}
// AI提取竞赛关键信息
async function extractCompetitionInfo(content) {
const prompt = `请从以下内容中提取竞赛关键信息,JSON格式:
{
"竞赛名称": "",
"主办单位": "",
"报名截止日期": "",
"报名链接": "",
"参赛对象": "",
"竞赛简介": ""
}
内容:${content}`;
const response = await callAI(prompt);
return JSON.parse(response);
}
4.多维表格写入
按顺序填充,从上到下查找空行:
async function writeToBitable(competitionInfo) {
// 1. 获取所有记录
const records = await feishu_bitable_list_records({
app_token: APP_TOKEN,
table_id: TABLE_ID
});
// 2. 找到第一个空行
let emptyRecordId = null;
for (const r of records.records) {
if (!r.fields || !r.fields['竞赛名称']) {
emptyRecordId = r.record_id;
break;
}
}
// 3. 写入空行
await feishu_bitable_update_record({
app_token: APP_TOKEN,
table_id: TABLE_ID,
record_id: emptyRecordId,
fields: {
'竞赛名称': competitionInfo.竞赛名称,
'主办单位': competitionInfo.主办单位,
'报名截止日期': parseDate(competitionInfo.报名截止日期),
'详细攻略链接': { text: '备赛全攻略', link: docLink },
'提醒状态': '开启'
}
});
}
5.备赛攻略生成
自动生成详细的备赛文档:
async function createGuideDoc(competitionInfo) {
const doc = await feishu_doc({
action: 'create',
title: `关于《${competitionInfo.竞赛名称}》的备赛全攻略`
});
const content = `一、竞赛速览
【竞赛名称】${competitionInfo.竞赛名称}
【主办单位】${competitionInfo.主办单位}
...
二、报名指南
【报名截止日期】${competitionInfo.报名截止日期}
...
三、备赛方案
【团队配置建议】...
...
四、注意事项
以上信息仅供参考,具体请以官方通知为准。`;
await feishu_doc({
action: 'append',
content: content,
doc_token: doc.document_id
});
return `https://feishu.cn/docx/${doc.document_id}`;
}
6.定时提醒模块
每天10:00检查即将截止的竞赛:
/ Cron任务配置
{
schedule: { kind: 'cron', expr: '0 10 * * *', tz: 'Asia/Shanghai' },
payload: {
kind: 'agentTurn',
message: '检查竞赛截止日期,给3天内截止的竞赛发送提醒'
}
}
// 提醒逻辑
async function checkDeadlines() {
const records = await feishu_bitable_list_records({...});
const now = Date.now();
const threeDaysLater = now + 3 * 24 * 60 * 60 * 1000;
for (const r of records.records) {
const deadline = r.fields['报名截止日期'];
const status = r.fields['提醒状态'];
if (status === '开启' && deadline && deadline <= threeDaysLater) {
// 发送私信提醒
await sendDM(userId, `提醒:${r.fields['竞赛名称']} 将在3天内截止!`);
}
}
}
六、效果展示
1.自动识别
用户在群里发送竞赛通知文件PDF或者word格式,并@机器人。实现功能:群里任何成员发送竞赛文件以后,机器人就可以自动开始识别并检测竞赛信息,如果检测到与竞赛相关,机器人就会私信群里的所有成员,询问他是否要报名比赛,如果用户回复“需要报名”之类的意思,机器人会确认并准备写入表格以及自动生成攻略(下一步操作)。



2.自动写表与生成攻略
确认后自动写入多维表格(按顺序填充空行)并生成详细的备赛攻略云文档:


其中需要注意的是,用户需要在飞书开放平台配置多维表格的相关权限。
3.定时提醒
每天10:00自动检查,给3天内截止的竞赛发送私信提醒。这里我分别做了模拟测试和真实的定时提醒。
七、总结与展望
本文详细介绍了如何基于OpenClaw打造竞赛情报助手,实现了:
1.关键词+AI双重过滤:避免误报,提高准确性
2.PDF/文档自动解析:从各类文件中提取竞赛信息
3.多维表格顺序存储:规范管理竞赛数据
4.自动生成备赛攻略:提供详细的参赛指导
5.定时提醒功能:确保不会错过截止日期
该系统可广泛应用于:
-
学生社团:自动收集整理各类竞赛信息
-
教务处:统一管理校内竞赛通知
-
创新创业学院:跟踪各类创业大赛
-
所有参加竞赛的大学生:获取竞赛攻略
未来进一步扩展:
-
支持更多IM平台(企业微信、Telegram)
-
提升PDF、word解析能力
-
实现群里全员@通知
-
对接更多数据源(官网RSS、公众号)
更多推荐




所有评论(0)