当前位置:首页 > 未命名 > 正文内容

从零到一:手把手教你开发OpenClaw高级技能

移动端优化文章

从零到一:手把手教你开发OpenClaw高级技能

!OpenClaw技能开发

你是不是已经用上了OpenClaw,但总觉得内置技能不够用? 看到别人家的AI助理能自动处理邮件、监控服务器、生成周报,而你的龙虾只会基础对话?

别急!今天我就带你从零开始,开发一个真正实用的OpenClaw高级技能——「智能周报生成器」。学完这篇教程,你不仅能掌握技能开发全流程,还能让龙虾成为你的专属生产力工具!

🎯 我们要开发什么?

「智能周报生成器」技能功能:
  • 自动收集Git提交记录
  • 分析Jira/Trello任务完成情况
  • 提取Slack/企业微信工作讨论
  • 智能生成结构化周报
  • 自动发送到指定邮箱或聊天工具

🛠️ 开发环境准备

1. 创建技能目录结构

bash

进入OpenClaw技能目录

cd ~/.openclaw/extensions

创建技能文件夹

mkdir my-weekly-report-skill cd my-weekly-report-skill

创建标准目录结构

mkdir -p scripts references

2. 编写SKILL.md(技能说明书)

markdown

智能周报生成器技能

描述

自动收集工作数据,生成结构化周报并发送到指定渠道。

适用场景

  • 每周五下午自动生成周报
  • 手动触发生成指定时间段的报告
  • 集成到工作流中作为自动化环节

前置条件

  • Git仓库访问权限
  • Jira/Trello API密钥(可选)
  • 邮件/Slack/企业微信发送权限

使用示例

帮我生成这周的周报 生成上周的工作报告 设置每周五17:00自动生成周报

3. 创建主脚本文件

python
#!/usr/bin/env python3

scripts/weekly_report.py

""" 智能周报生成器 - 主逻辑 """

import os import sys import json import datetime from typing import Dict, List, Optional import subprocess import requests

class WeeklyReportGenerator: def init(self, config_path: str = None): """初始化周报生成器""" self.config = self.loadconfig(config_path) self.week_start = None self.week_end = None def loadconfig(self, config_path: str) -> Dict: """加载配置文件""" default_config = { "git_repos": [], "jira_url": "", "jira_token": "", "slack_webhook": "", "email_recipients": [], "output_format": "markdown" } if configpath and os.path.exists(configpath): with open(config_path, 'r', encoding='utf-8') as f: return {default_config, json.load(f)} return default_config def setdaterange(self, startdate: str = None, enddate: str = None): """设置时间范围""" if not start_date: # 默认本周 today = datetime.date.today() self.week_start = today - datetime.timedelta(days=today.weekday()) self.weekend = self.weekstart + datetime.timedelta(days=6) else: self.weekstart = datetime.datetime.strptime(startdate, "%Y-%m-%d").date() self.weekend = datetime.datetime.strptime(enddate, "%Y-%m-%d").date() def collectgitcommits(self) -> List[Dict]: """收集Git提交记录""" commits = [] for repopath in self.config.get("gitrepos", []): if not os.path.exists(repo_path): print(f"⚠️ 仓库不存在: {repo_path}") continue try: # 切换到仓库目录 original_cwd = os.getcwd() os.chdir(repo_path) # 获取本周提交 cmd = [ "git", "log", "--since", self.week_start.isoformat(), "--until", (self.week_end + datetime.timedelta(days=1)).isoformat(), "--pretty=format:%H|%an|%ad|%s", "--date=short" ] result = subprocess.run(cmd, capture_output=True, text=True) for line in result.stdout.strip().split('\n'): if line: hash_val, author, date, message = line.split('|', 3) commits.append({ "repo": os.path.basename(repo_path), "hash": hash_val[:8], "author": author, "date": date, "message": message }) os.chdir(original_cwd) except Exception as e: print(f"❌ 收集Git提交失败 {repo_path}: {e}") return commits def collectjiratasks(self) -> List[Dict]: """收集Jira任务(需要API配置)""" tasks = [] jiraurl = self.config.get("jiraurl") jiratoken = self.config.get("jiratoken") if not jiraurl or not jiratoken: return tasks try: # Jira API调用示例 headers = { "Authorization": f"Bearer {jira_token}", "Content-Type": "application/json" } jql = f'updated >= "{self.weekstart}" AND updated <= "{self.weekend}" AND assignee = currentUser()' params = { "jql": jql, "maxResults": 50, "fields": "key,summary,status,assignee,updated" } response = requests.get( f"{jira_url}/rest/api/3/search", headers=headers, params=params, timeout=10 ) if response.status_code == 200: issues = response.json().get("issues", []) for issue in issues: tasks.append({ "key": issue["key"], "summary": issue["fields"]["summary"], "status": issue["fields"]["status"]["name"], "updated": issue["fields"]["updated"][:10] }) except Exception as e: print(f"❌ 收集Jira任务失败: {e}") return tasks def generatereport(self, gitcommits: List, jira_tasks: List) -> str: """生成周报内容""" # 统计信息 totalcommits = len(gitcommits) completedtasks = len([t for t in jiratasks if t["status"] in ["Done", "Closed"]]) inprogresstasks = len([t for t in jira_tasks if t["status"] in ["In Progress", "开发中"]]) # 按仓库分组提交 repo_stats = {} for commit in git_commits: repo = commit["repo"] repo_stats.setdefault(repo, {"count": 0, "commits": []}) repo_stats[repo]["count"] += 1 repo_stats[repo]["commits"].append(commit) # 生成Markdown报告 report = f"""# 工作周报 ({self.weekstart} ~ {self.weekend})

📊 本周概览

  • 总提交次数: {total_commits} 次
  • 完成任务: {completed_tasks} 个
  • 进行中任务: {inprogresstasks} 个
  • 报告生成时间: {datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")}

💻 代码提交情况

""" for repo, stats in repo_stats.items(): report += f"\n### {repo} ({stats['count']}次提交)\n" for commit in stats["commits"][:5]: # 显示最近5条 report += f"- {commit['hash']} {commit['message']} - {commit['author']} ({commit['date']})\n" if stats["count"] > 5: report += f"- ... 还有 {stats['count'] - 5} 次提交\n" if jira_tasks: report += "\n## 📋 任务完成情况\n" for task in jira_tasks: status_emoji = "✅" if task["status"] in ["Done", "Closed"] else "🔄" report += f"- {status_emoji} {task['key']} {task['summary']} - {task['status']} (更新于{task['updated']})\n" # 本周总结与下周计划 report += f"""

🎯 本周工作总结

  1. 主要成果: 完成了核心功能开发,代码质量保持稳定
  2. 遇到的问题: {"" if total_commits > 0 else "本周提交较少,需关注进度"}
  3. 解决方案: 通过代码审查和自动化测试保障质量

📅 下周工作计划

  1. 继续推进剩余功能开发
  2. 优化性能瓶颈
  3. 准备下一阶段的技术方案

--- 本报告由 OpenClaw 智能周报生成器自动生成 """ return report def sendreport(self, reportcontent: str, channel: str = "console"): """发送周报到指定渠道""" if channel == "console": print("\n" + "="*60) print("📋 生成的周报内容:") print("="*60) print(report_content) print("="*60) elif channel == "slack" and self.config.get("slack_webhook"): # 发送到Slack payload = { "text": "📊 本周工作周报已生成", "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": f"本周工作周报 ({self.weekstart} ~ {self.weekend})" } }, { "type": "section", "text": { "type": "mrkdwn", "text": reportcontent[:3000] + ("..." if len(reportcontent) > 3000 else "") } } ] } try: response = requests.post( self.config["slack_webhook"], json=payload, timeout=10 ) print(f"✅ 周报已发送到Slack (状态码: {response.status_code})") except Exception as e: print(f"❌ 发送到Slack失败: {e}") elif channel == "email" and self.config.get("email_recipients"): # 发送邮件(需要配置邮件服务器) print("📧 邮件发送功能需要配置SMTP服务器") # 这里可以集成邮件发送逻辑 else: print(f"⚠️ 未配置{channel}渠道或渠道不支持")

def main(): """主函数 - 供OpenClaw调用""" import argparse parser = argparse.ArgumentParser(description="智能周报生成器") parser.add_argument("--start", help="开始日期 (YYYY-MM-DD)") parser.add_argument("--end", help="结束日期 (YYYY-MM-DD)") parser.add_argument("--channel", default="console", choices=["console", "slack", "email"], help="输出渠道") parser.add_argument("--config", help="配置文件路径") args = parser.parse_args() # 创建生成器实例 generator = WeeklyReportGenerator(args.config) # 设置日期范围 generator.setdaterange(args.start, args.end) # 收集数据 print("📊 正在收集数据...") gitcommits = generator.collectgit_commits() jiratasks = generator.collectjira_tasks() # 生成报告 print("📝 正在生成周报...") report = generator.generatereport(gitcommits, jira_tasks) # 发送报告 print(f"🚀 正在发送到 {args.channel}...") generator.send_report(report, args.channel) # 保存报告到文件 outputfile = f"weeklyreport{generator.weekstart}.md" with open(output_file, 'w', encoding='utf-8') as f: f.write(report) print(f"✅ 周报已保存到: {output_file}") return report

if name == "main": main()

4. 创建配置文件示例

json
// references/config.example.json
{
  "git_repos": [
    "/path/to/your/project1",
    "/path/to/your/project2"
  ],
  "jira_url": "https://your-company.atlassian.net",
  "jira_token": "your-api-token-here",
  "slack_webhook": "https://hooks.slack.com/services/xxx/yyy/zzz",
  "email_recipients": ["team@company.com"],
  "output_format": "markdown"
}

5. 创建安装脚本

bash
#!/bin/bash

scripts/install.sh

echo "安装智能周报生成器技能..."

复制文件到OpenClaw技能目录

SKILL_DIR="$HOME/.openclaw/extensions/weekly-report-skill"

mkdir -p "$SKILL_DIR" cp -r ./* "$SKILL_DIR/"

设置执行权限

chmod +x "$SKILLDIR/scripts/weeklyreport.py" echo "✅ 技能安装完成!" echo "" echo "使用方式:" echo "1. 编辑配置文件: $SKILL_DIR/references/config.json" echo "2. 测试技能: python3 $SKILLDIR/scripts/weeklyreport.py" echo "3. 在OpenClaw中调用: '帮我生成周报'"

🚀 如何集成到OpenClaw?

方法一:通过技能市场安装

bash

打包技能

openclaw skill pack weekly-report-skill

安装到本地

openclaw skill install ./weekly-report-skill.tar.gz

方法二:手动配置

  1. 将整个技能文件夹复制到 ~/.OpenClaw/extensions/
  2. 在OpenClaw配置中添加技能:
yaml

~/.openclaw/config.yaml

skills: weekly-report: enabled: true path: ~/.openclaw/extensions/weekly-report-skill triggers: - "生成周报" - "本周工作报告" - "weekly report"

方法三:创建快捷命令

bash

创建别名

alias gen-weekly-report="python3 ~/.openclaw/extensions/weekly-report-skill/scripts/weekly_report.py"

添加到cron定时任务

每周五17:00自动生成周报

0 17 5 python3 /path/to/weekly_report.py --channel=slack

🎨 技能进阶优化

1. 添加Web界面

python

使用FastAPI创建管理界面

from fastapi import FastAPI app = FastAPI() @app.post("/generate-report") async def generatereportapi(): generator = WeeklyReportGenerator() report = generator.generate_report([], []) return {"report": report}

2. 支持更多数据源

  • GitLab/GitHub API:获取PR/MR信息
  • Trello/Asana:项目管理工具集成
  • 企业微信/钉钉:国内办公软件支持
  • 时间追踪工具:Toggl、Harvest等

3. 添加AI增强

markdown

智能周报生成器技能

描述

自动收集工作数据,生成结构化周报并发送到指定渠道。

适用场景

  • 每周五下午自动生成周报
  • 手动触发生成指定时间段的报告
  • 集成到工作流中作为自动化环节

前置条件

  • Git仓库访问权限
  • Jira/Trello API密钥(可选)
  • 邮件/Slack/企业微信发送权限

使用示例

0

4. 添加数据可视化

markdown

智能周报生成器技能

描述

自动收集工作数据,生成结构化周报并发送到指定渠道。

适用场景

  • 每周五下午自动生成周报
  • 手动触发生成指定时间段的报告
  • 集成到工作流中作为自动化环节

前置条件

  • Git仓库访问权限
  • Jira/Trello API密钥(可选)
  • 邮件/Slack/企业微信发送权限

使用示例

1

📊 实际效果展示

安装并配置后,你可以:

  1. 命令行使用
markdown

智能周报生成器技能

描述

自动收集工作数据,生成结构化周报并发送到指定渠道。

适用场景

  • 每周五下午自动生成周报
  • 手动触发生成指定时间段的报告
  • 集成到工作流中作为自动化环节

前置条件

  • Git仓库访问权限
  • Jira/Trello API密钥(可选)
  • 邮件/Slack/企业微信发送权限

使用示例

2
  1. OpenClaw对话调用
markdown

智能周报生成器技能

描述

自动收集工作数据,生成结构化周报并发送到指定渠道。

适用场景

  • 每周五下午自动生成周报
  • 手动触发生成指定时间段的报告
  • 集成到工作流中作为自动化环节

前置条件

  • Git仓库访问权限
  • Jira/Trello API密钥(可选)
  • 邮件/Slack/企业微信发送权限

使用示例

3
  1. 自动化定时任务
markdown

智能周报生成器技能

描述

自动收集工作数据,生成结构化周报并发送到指定渠道。

适用场景

  • 每周五下午自动生成周报
  • 手动触发生成指定时间段的报告
  • 集成到工作流中作为自动化环节

前置条件

  • Git仓库访问权限
  • Jira/Trello API密钥(可选)
  • 邮件/Slack/企业微信发送权限

使用示例

4

🎯 技能开发最佳实践

1. 模块化设计

  • 数据

扫描二维码推送至手机访问。

版权声明:本文由点度点度金讯时代-BLOG发布,如需转载请注明出处。

本文链接:https://lmwmm.com/post/8846.html

分享给朋友:
返回列表

上一篇:龙虾不干活?这5个文件配好直接封神!

没有最新的文章了…