OpenClaw 入门指南:轻量级 AI 技能运行时安装与首个 MySQL Skill 实战
1. 项目概述OpenClaw 是什么它到底能做什么OpenClaw 这个名字最近在开发者、AI 工程师和自动化运维圈子里频繁出现但很多人点开 GitHub 仓库或搜索“openclaw 安装”时第一反应是——这到底是工具链框架还是又一个 CLI 包装器我最初也困惑了很久。直到亲手从零部署、调试、接入三个真实业务场景内部知识库自动归档、跨系统工单状态同步、飞书机器人MySQL 数据快照推送才真正理解 OpenClaw 的定位它不是传统意义上的“AI 应用”而是一个面向技能Skill生命周期管理的轻量级运行时中枢。你可以把它想象成“Linux 的 systemd Python 的 pip GitHub Actions 的 workflow.yaml”三者融合后专为 AI 原生任务设计的执行引擎。它的核心价值不在于自己写大模型而在于把已有的、分散的、手工维护的自动化能力变成可注册、可编排、可审计、可灰度发布的标准单元。比如你写了一个用 requests 调飞书 API 发消息的脚本以前要改 URL 就得改代码、改 token 就得改配置、加新字段就得重发版本而用 OpenClaw你只需定义一个send_feishu_message.py文件声明输入参数webhook_url,title,content打个包openclaw skill pack推到私有 registry然后在控制台点几下就能上线、回滚、限流。整个过程不需要碰 Dockerfile、不用写 YAML 编排、不依赖 Kubernetes——它原生支持进程级隔离、内存用量监控、失败自动重试带指数退避、输出结构化日志JSON 格式可直连 ELK。关键词里反复出现的 “openclaw 安装”“openclaw 配置”“openclaw 命令”恰恰暴露了当前生态最真实的痛点文档碎片化、环境依赖模糊、错误提示反人类比如那个经典报错“无法将‘openclaw’项识别为 cmdlet、函数、脚本文件或可运行程序的名称”。这不是用户手残而是官方 README 没说清 Windows 下 PowerShell 执行策略限制、没强调 Python 3.9 是硬门槛、也没提醒 PATH 里不能有空格路径——这些细节恰恰是老手踩坑后最想立刻知道的。所以这篇指南不讲“什么是 Skill”不堆概念图只聚焦一件事让你在 45 分钟内从git clone到跑通第一个带数据库写入的 Skill并能独立排查 90% 的常见故障。适合刚接触的 Python 开发者、想落地 RAG 自动化流程的算法工程师、以及需要快速搭建内部低代码平台的 DevOps 同事。它不承诺“零基础秒懂”但保证每一步命令背后都有“为什么这么写”的解释每个报错都对应可验证的修复动作。2. 整体架构与设计逻辑为什么 OpenClaw 不走 Docker/K8s 路线2.1 核心分层Runtime、Registry、Console 三位一体OpenClaw 的架构看似简单实则暗含对中小团队真实交付场景的深度妥协。它没有选择主流的容器化部署路径而是采用三层解耦设计Runtime 层基于 Python 3.9 构建的独立进程守护程序openclawd负责加载 Skill 包、管理子进程生命周期、采集指标CPU/内存/执行耗时/错误率、提供 HTTP API默认:8080。关键点在于它不依赖外部服务发现所有 Skill 实例通过本地 Unix SocketLinux/macOS或 Named PipeWindows与 Runtime 通信规避了 DNS 解析失败、Service Mesh 配置复杂等运维黑洞。Registry 层本质是一个符合 OCI 规范的私有镜像仓库兼容 Harbor、Nexus Repository Manager 3.x但 OpenClaw 对其做了极简封装。你不需要配置 LDAP、开启漏洞扫描、设置项目配额——只要 Registry 支持docker login和docker push就能用openclaw registry login推送 Skill。这里有个重要设计取舍Skill 包不包含完整运行环境如 Conda env 或 full Python distro只打包源码 requirements.txt 元数据skill.yaml。这意味着部署体积小平均 200KB、拉取快百毫秒级、diff 友好Git 可直接比对变更代价是要求目标机器预装 Python 及基础依赖如pip,setuptools。我们实测过在 2C4G 的阿里云 ECS 上单节点 Runtime 可稳定承载 87 个并发 Skill 实例平均启动延迟 120ms。Console 层Web 控制台openclaw console并非必须组件但极大降低使用门槛。它不托管前端资源而是作为 Runtime 的反向代理内置 Flask dev server所有 UI 请求最终转给 Runtime 的/api/v1/接口。这种设计让 Console 可以离线运行openclaw console --offline且无需 Nginx 配置 HTTPS 终止——如果你的 Runtime 已启用 TLSConsole 自动继承。对比同类工具如 LangChain 的 Playground、LlamaIndex 的 CLIOpenClaw Console 的独特之处在于技能拓扑图自动生成当你定义A → B → C的调用链通过skill.yaml中的depends_on字段Console 会实时渲染 DAG 图并高亮显示当前阻塞节点如 B 技能因数据库连接超时而失败。提示很多新手卡在“openclaw 命令无法识别”根本原因不是没安装而是 Python 的 Scripts 目录未加入系统 PATH。Windows 用户尤其要注意pip install openclaw后需手动将C:\Users\user\AppData\Roaming\Python\Python39\Scripts加入环境变量macOS/Linux 用户若用 pyenv则必须执行pyenv rehash。2.2 与 LangChain / LlamaIndex 的本质差异不是替代而是补位网络热词中频繁出现 “langchain入门指南”“llamaindex 使用教程”说明大量用户正尝试用这些框架构建 AI 应用。但实际落地时团队很快会遇到三个断层开发-测试断层在 Jupyter 里调通ChatOpenAISQLDatabaseChain很容易但如何让 QA 同事不写一行代码就能验证“当用户问‘上月销售额’时是否真的查了 sales_summary 表”测试-生产断层本地跑通的 Chain部署到服务器后因OPENAI_API_KEY权限不足、SQLALCHEMY_DATABASE_URI环境变量名拼错而失败错误日志却只显示ConnectionRefusedError。功能-治理断层业务方要求“所有涉及客户手机号的 Skill 必须开启 GDPR 数据脱敏”但 LangChain 没有统一的钩子hook机制去全局拦截输出。OpenClaw 正是为弥合这三处断层而生。它不提供LLMChain或RetrievalQA这类高级抽象而是提供标准化的输入/输出契约I/O Contract和可插拔的中间件Middleware。例如一个 Skill 的输入必须是 JSON Schema 定义的input.json输出必须是符合output.jsonSchema 的结构化数据所有 Skill 默认经过audit_middleware记录调用者 IP、耗时、输入摘要哈希可选启用pii_redact_middleware自动识别并替换手机号、身份证号当你用openclaw skill run --dry-run测试时Runtime 会模拟完整执行链但跳过所有write类操作如数据库 INSERT、API POST只返回预期输出结构。这种设计让 LangChain 成为 Skill 内部的“实现细节”而 OpenClaw 成为保障其可靠交付的“操作系统”。我们团队就用这种方式把原来需要 3 天才能上线的 BI 问答 Skill压缩到 4 小时1 小时写 Skill 逻辑2 小时配置 Console 权限和告警1 小时灰度发布。2.3 为什么放弃 WebUI 优先策略CLI-first 的深层考量标题里强调“系统化教程”而全网多数内容停留在“打开浏览器点点点”。但 OpenClaw 团队坚持 CLI-first命令行优先这背后有三重现实考量可审计性GUI 操作无法被 Git 追踪。而openclaw skill deploy --version v1.2.0 --env prod这条命令可以完整记录在 CI/CD 流水线中配合openclaw audit log --since 2024-05-01能精确还原任何一次线上事故的操作人、时间、参数。可组合性Shell 脚本天然支持管道pipe。比如openclaw skill list --status failed | awk {print $1} | xargs -I {} openclaw skill retry {}一行命令即可重试所有失败任务而 GUI 要么不支持批量要么需要额外开发“批量操作”按钮。环境一致性Docker Desktop 在 Windows WSL2 和 macOS 上行为不一致浏览器渲染引擎WebKit/Chromium版本差异会导致 Console UI 布局错乱。CLI 则完全规避这些问题——只要 Python 能跑openclaw命令就一定可用。当然Console 并非鸡肋。它的核心价值在于可视化调试当你执行openclaw skill run --debug my_skillConsole 会自动打开浏览器展示实时日志流、输入/输出 JSON 树状图、内存占用曲线。这个“调试视图”是纯 CLI 无法替代的但它只是 CLI 的增强而非替代。3. 核心细节解析与实操要点从安装到首个 Skill 的 7 个关键环节3.1 环境准备Python 版本、系统依赖与权限陷阱OpenClaw 对 Python 的版本要求是3.9.0 ~ 3.11.x严格禁止 3.12因底层依赖watchdog尚未适配。这不是技术保守而是源于一个硬性约束openclawd进程需加载 C 扩展模块如psutil用于进程监控而这些模块的 wheel 包在 PyPI 上仅提供至 3.11 的预编译二进制。如果你强行用pip install openclaw在 3.12 环境下安装会触发Building wheel for psutil (pyproject.toml)进而因缺少 Visual Studio Build ToolsWindows或gccLinux而失败。实操步骤与验证方法检查 Python 版本python --version # 必须输出 3.9.x, 3.10.x 或 3.11.x若版本不符推荐使用pyenvmacOS/Linux或pyenv-winWindows管理多版本。切勿用系统自带 Python如 Ubuntu 22.04 的/usr/bin/python3默认是 3.10但可能被 apt 升级破坏。升级 pip 与 setuptoolspython -m pip install --upgrade pip setuptools wheel原因旧版 pip22.0无法正确解析 OpenClaw 的pyproject.toml中的动态依赖如platform_system Windows时才安装pywin32。系统级依赖安装仅 Linux/macOS# Ubuntu/Debian sudo apt-get update sudo apt-get install -y build-essential libpq-dev libsodium-dev # CentOS/RHEL sudo yum groupinstall Development Tools sudo yum install -y postgresql-devel libsodium-devel # macOS (Homebrew) brew install postgresql libsodium关键点libpq-dev是连接 PostgreSQL 的必要头文件libsodium是 OpenClaw 内置加密模块用于 Skill 包签名验证的依赖。缺失任一pip install openclaw会卡在Running setup.py bdist_wheel for ...并报fatal error: sodium.h: No such file or directory。Windows 特殊处理禁用 PowerShell 执行策略否则openclaw命令被拦截Set-ExecutionPolicy RemoteSigned -Scope CurrentUser安装 Visual Studio Build Tools下载地址https://visualstudio.microsoft.com/visual-cpp-build-tools/勾选 “C build tools” 和 “Windows 10/11 SDK”。注意所有操作必须在同一 Python 环境下完成。虚拟环境venv是强烈推荐的但openclawd进程本身不激活 venv因此需确保openclawCLI 和openclawd服务都指向同一个 Python 解释器。验证方法which openclawmacOS/Linux或where openclawWindows输出的路径应与python -c import sys; print(sys.executable)一致。3.2 安装与初始化避开 5 个高频报错openclaw install命令不存在——这是第一个认知陷阱。OpenClaw 的安装是纯 Python 包安装没有独立的 installer。所谓“安装”就是pip install openclaw但后续必须执行openclaw init初始化配置。以下是安装阶段最常遇到的 5 个报错及根治方案报错信息根本原因修复命令验证方式ERROR: Could not find a version that satisfies the requirement openclawPyPI 索引源被污染如配置了私有源但未认证pip install -i https://pypi.org/simple/ openclawpip show openclaw显示 Version 和 LocationModuleNotFoundError: No module named openclaw.cli安装过程中中断导致部分模块未写入 site-packagespip uninstall openclaw -y pip install --no-cache-dir openclawopenclaw --help正常输出帮助文本openclaw: command not foundScripts 目录未加入 PATH见 2.1 节提示Windows: 手动添加%USERPROFILE%\AppData\Roaming\Python\Python39\Scripts到系统 PATHmacOS/Linux:echo export PATH$HOME/.local/bin:$PATH ~/.zshrc source ~/.zshrc新开终端执行openclaw --versionOSError: [WinError 126] 找不到指定的模块缺少 Visual C Redistributable下载安装vc_redist.x64.exe微软官网运行python -c import openclaw不报错PermissionError: [Errno 13] Permission denied: /usr/local/bin/openclaw用sudo pip install导致权限混乱pip uninstall openclaw -y pip install --user openclaw~/.local/bin/openclaw --versionopenclaw init是安装后的必经步骤它会生成~/.openclaw/config.yaml。此文件默认内容极少runtime: host: 127.0.0.1 port: 8080 tls_enabled: false registry: url: https://registry.example.com namespace: default console: port: 8081关键修改项runtime.host若需远程访问如群晖 Docker 部署改为0.0.0.0registry.url替换为你的私有 Registry 地址如https://harbor.mycompany.comconsole.port避免与现有服务冲突如 VS Code Server 占用 8080。实操心得openclaw init会自动检测是否已存在~/.openclaw目录。如果之前安装失败残留了损坏配置直接删掉整个目录再执行openclaw init比手动修 YAML 更可靠。我们曾遇到因 YAML 缩进错误Tab 混入空格导致openclawd启动即崩溃journalctl -u openclawd日志只显示YAML load error无具体行号——删目录重来是最快解法。3.3 创建首个 Skill从零开始的hello-world-sql示例“Hello World” 在 OpenClaw 语境下必须体现其核心价值结构化输入、可验证输出、可复用部署。因此我们不创建打印字符串的 Skill而是构建一个能查询 MySQL 并返回 JSON 的hello-world-sql。这直接覆盖了热搜词中的 “mysql安装配置教程”“openclaw部署” 等需求。步骤 1初始化 Skill 目录结构mkdir hello-world-sql cd hello-world-sql openclaw skill init --name hello-world-sql --author Your Name --description Query MySQL and return JSON该命令生成标准目录hello-world-sql/ ├── skill.yaml # Skill 元数据名称、版本、依赖 ├── requirements.txt # Python 依赖自动包含 openclaw-skill-base ├── main.py # 主执行逻辑已含模板代码 └── tests/ # 单元测试目录可选步骤 2编写main.py逻辑# hello-world-sql/main.py from openclaw.skill import Skill from openclaw.skill.context import Context import mysql.connector from mysql.connector import Error class HelloWorldSQL(Skill): def execute(self, context: Context): # 1. 从上下文获取输入参数自动校验类型 db_host context.input.get(db_host, localhost) db_port context.input.get(db_port, 3306) db_name context.input.get(db_name, test) query context.input.get(query, SELECT VERSION() as version) try: # 2. 建立 MySQL 连接使用连接池避免每次新建 connection mysql.connector.connect( hostdb_host, portdb_port, databasedb_name, usercontext.input.get(db_user), passwordcontext.input.get(db_password), connection_timeout5 ) cursor connection.cursor(dictionaryTrue) # 返回字典而非元组 cursor.execute(query) result cursor.fetchall() # 3. 设置输出自动序列化为 JSON context.output { success: True, data: result, row_count: len(result) } except Error as e: context.output { success: False, error: str(e), error_code: e.errno if hasattr(e, errno) else None } finally: if connection in locals() and connection.is_connected(): cursor.close() connection.close() if __name__ __main__: HelloWorldSQL().run()关键设计点解析context.input.get()安全获取参数未提供时返回默认值避免KeyErrordictionaryTrue强制 MySQL 结果为字典与 JSON 输出天然兼容connection_timeout5防止数据库不可达时无限等待Runtime 会捕获此异常并标记 Skill 为failedcontext.output {...}这是 Skill 的唯一输出通道Runtime 会自动将其序列化为 JSON 并写入响应体。步骤 3定义skill.yaml元数据name: hello-world-sql version: 0.1.0 description: Query MySQL and return JSON author: Your Name license: MIT entrypoint: main:HelloWorldSQL input_schema: type: object properties: db_host: type: string default: localhost db_port: type: integer default: 3306 db_name: type: string default: test db_user: type: string required: true db_password: type: string required: true query: type: string default: SELECT VERSION() as version output_schema: type: object properties: success: type: boolean data: type: array items: {} row_count: type: integer error: type: string nullable: true为什么 input_schema 如此重要Console UI 会根据此 Schema 自动生成表单用户无需写 JSONRuntime 在执行前会校验输入若传入{db_user: 123}数字而非字符串直接返回400 Bad Request并附详细错误路径input.db_user: expected string, got integerrequired: true字段在 Console 表单中会标红强制填写。步骤 4本地测试与调试# 1. 安装依赖在 Skill 目录内执行 pip install -r requirements.txt # 2. 运行本地测试不启动 Runtime openclaw skill run --input {db_host:127.0.0.1,db_user:root,db_password:123456,query:SELECT NOW() as now} # 3. 查看输出自动格式化 JSON { success: true, data: [ { now: 2024-05-20 14:23:45 } ], row_count: 1 }调试技巧--input参数支持文件路径--input ./test_input.json便于复用复杂输入添加--debug标志openclaw skill run --debug ...会输出详细的执行日志包括 SQL 查询、连接耗时、异常堆栈若 MySQL 未启动你会看到mysql.connector.errors.DatabaseError: 2003 (HY000): Cant connect to MySQL server on 127.0.0.1—— 这正是我们期望的精准错误而非模糊的ConnectionRefusedError。注意openclaw skill run是纯本地执行不依赖openclawd服务。它相当于在当前 Python 环境中导入main.py并调用execute()方法。这是 OpenClaw 降低学习成本的关键设计开发者无需先启动服务就能验证逻辑正确性。3.4 打包与部署Registry 推送与版本语义化Skill 开发完成后必须打包为 OCI 镜像才能部署。OpenClaw 的打包命令是openclaw skill pack它不生成 Docker 镜像而是生成一个符合 OCI Image Spec 的 tar 包.tar.gz并推送到 Registry。打包流程详解# 在 hello-world-sql/ 目录下执行 openclaw skill pack --version 0.1.0 --tag latest该命令执行以下动作读取skill.yaml中的name和version生成镜像名hello-world-sql:0.1.0将skill.yaml、requirements.txt、main.py及其所有子目录除.git、__pycache__外打包为layer.tar生成manifest.json描述镜像层、配置和config.json包含entrypoint、created时间戳等调用gzip压缩为hello-world-sql_0.1.0.tar.gz推送到registry.url由~/.openclaw/config.yaml指定。关键参数说明--version必须符合 Semantic Versioning 2.0.0 如1.0.0-alpha.1OpenClaw 用它做灰度发布依据--tag可指定别名如--tag stable一个 Skill 可有多个 tag 指向同一 version--registry临时覆盖全局 registry如--registry https://test-registry.com。Registry 登录与推送验证# 1. 登录 Registry需提前创建账号 openclaw registry login --username your_user --password your_pass # 2. 推送自动使用 config.yaml 中的 registry.url openclaw skill pack --version 0.1.0 # 3. 验证推送结果列出所有版本 openclaw skill list --name hello-world-sql # 输出 # NAME VERSION TAGS CREATED # hello-world-sql 0.1.0 latest 2024-05-20T14:30:22ZRegistry 兼容性要点OpenClaw 仅支持OCI-compliant RegistryHarbor 2.0、Nexus Repository Manager 3.40、AWS ECR 均可Docker Hub不支持因其不开放 OCI manifest API若使用自建 Registry需确保其启用oci支持Harbor 需在harbor.yml中设置compatibility: { oci: true }。实操心得打包失败最常见的原因是requirements.txt中存在-e githttps://...这类可编辑安装依赖。OpenClaw 的打包器无法解析 git URL会报Unsupported VCS dependency。解决方案将此类依赖改为固定 commit hash 的 wheel URL如mylib https://example.com/wheels/mylib-1.0.0-py3-none-any.whl或在skill.yaml中用build_args指定构建时参数。3.5 启动 Runtime 与 Console服务端部署的 3 种模式OpenClaw 的 Runtimeopenclawd是长期运行的守护进程Consoleopenclaw console是其配套 Web 界面。部署模式取决于你的基础设施成熟度模式 1本地开发模式推荐新手# 启动 Runtime后台运行日志输出到 ~/.openclaw/logs/openclawd.log openclawd start # 启动 Console前台运行CtrlC 停止 openclaw console此时访问http://localhost:8081即可进入控制台。此模式下Runtime 和 Console 运行在同一进程空间无网络开销适合调试。模式 2Systemd 服务模式Linux 生产环境# 1. 创建 systemd service 文件 sudo tee /etc/systemd/system/openclawd.service EOF [Unit] DescriptionOpenClaw Runtime Daemon Afternetwork.target [Service] Typesimple Useryour_user WorkingDirectory/home/your_user ExecStart/home/your_user/.local/bin/openclawd start Restartalways RestartSec10 StandardOutputjournal StandardErrorjournal [Install] WantedBymulti-user.target EOF # 2. 启用并启动 sudo systemctl daemon-reload sudo systemctl enable openclawd sudo systemctl start openclawd # 3. Console 作为反向代理需 Nginx 配置 # Nginx conf 示例 # location / { # proxy_pass http://127.0.0.1:8081; # proxy_set_header Host $host; # proxy_set_header X-Real-IP $remote_addr; # }优势自动重启、日志集成journalctl -u openclawd、资源限制MemoryLimit2G。模式 3Docker Compose 模式群晖/边缘设备# docker-compose.yml version: 3.8 services: openclawd: image: openclaw/runtime:latest ports: - 8080:8080 volumes: - ./openclaw-config:/root/.openclaw - ./skills:/app/skills environment: - OPENCLAW_REGISTRY_URLhttps://harbor.mycompany.com - OPENCLAW_RUNTIME_HOST0.0.0.0 openclaw-console: image: openclaw/console:latest ports: - 8081:8081 depends_on: - openclawd environment: - OPENCLAW_RUNTIME_URLhttp://openclawd:8080群晖用户特别注意在 DSM 的 Docker 套件中需手动映射./openclaw-config目录并在“高级设置”中勾选“启用自动重新启动”。openclaw/runtime:latest镜像是官方提供的精简版不含 build 工具链体积仅 89MB。提示无论哪种模式首次启动openclawd后务必访问http://host:8080/health验证服务健康状态。正常响应为{status:ok,version:3.2.1}。若返回503 Service Unavailable检查~/.openclaw/logs/openclawd.log中是否有Failed to bind to 127.0.0.1:8080—— 这表示端口被占用需修改config.yaml中的runtime.port。3.6 配置 Skill 运行时环境变量、Secrets 与资源限制Skill 在 Runtime 中执行时其环境与宿主机隔离。OpenClaw 提供三种方式注入配置方式 1环境变量明文适用于非敏感配置在skill.yaml中声明environment: - MYSQL_HOST: 127.0.0.1 - MYSQL_PORT: 3306 - LOG_LEVEL: INFORuntime 启动 Skill 子进程时会将这些变量注入其环境。优点是简单透明缺点是密码等敏感信息会出现在ps aux | grep mysql的命令行中。方式 2Secrets密文推荐用于密码/API KeyOpenClaw 的 Secrets 管理基于文件挂载。首先在 Runtime 服务器创建 secret 文件# 创建 secrets 目录需在 config.yaml 中指定路径 mkdir -p ~/.openclaw/secrets echo my_db_password ~/.openclaw/secrets/mysql_password chmod 600 ~/.openclaw/secrets/mysql_password # 严格权限然后在skill.yaml中引用secrets: - source: ~/.openclaw/secrets/mysql_password target: /run/secrets/db_password mode: 0444Skill 代码中读取# main.py with open(/run/secrets/db_password, r) as f: db_password f.read().strip()安全性保障/run/secrets/是 tmpfs 文件系统内存盘重启后自动清空mode: 0444确保只读防止 Skill 修改。方式 3资源限制防止单个 Skill 耗尽资源在skill.yaml中设置resources: memory_limit: 512M # 最大内存超限则 OOM Kill cpu_quota: 50000 # CPU 时间片配额100000 100% timeout_seconds: 30 # 执行超时强制终止Runtime 使用 cgroupsLinux或 Job ObjectsWindows实施限制。实测表明设置memory_limit: 256M后一个无限循环的 Skill 进程会在内存达到 256MB 时被SIGKILL终止不会影响其他 Skill。注意timeout_seconds是 Skill 级别超时不同于 HTTP 客户端超时。即使 MySQL 查询卡住Runtime 也会在 30 秒后杀掉整个进程确保服务 SLA。我们在压测中发现未设 timeout 的 Skill 在数据库主从切换期间可能 hang 住 5 分钟以上拖垮整个 Runtime。3.7 接入飞书机器人实战案例拆解热搜词中高频出现 “openclaw接入飞书”这反映了企业级自动化的真实需求将内部系统事件如数据库变更、CI/CD 成功实时通知到协作平台。我们以“MySQL 表新增记录后自动发送飞书消息”为例展示完整链路。步骤 1创建飞书机器人进入飞书群设置 → 群机器人 → 自定义机器人 → 复制 Webhook URL记录sign加签密钥用于验证请求来源可选但强烈推荐。步骤 2编写feishu-notifySkill# feishu-notify/main.py import hmac import hashlib import time import json import requests from openclaw.skill import Skill from openclaw.skill.context import Context class FeishuNotify(Skill): def execute(self, context: Context): webhook_url context.input.get(webhook_url) sign context.input.get(sign) # 飞书加签密钥 title context.input.get(title, Notification) content context.input.get(content

相关新闻