技能详情(站内镜像,无评论)
许可证:MIT-0
MIT-0 ·免费使用、修改和重新分发。无需归因。
版本:v1.0.0
统计:⭐ 0 · 18 · 0当前安装次数· 0历史安装次数
⭐ 0
安装量(当前) 0
🛡 VirusTotal :可疑 · OpenClaw :可疑
Package:cjboy007/ssa-approval-engine
安全扫描(ClawHub)
- VirusTotal :可疑
- OpenClaw :可疑
OpenClaw 评估
该套餐似乎是一个连贯的审批/警报引擎,但声明的注册表元数据省略了所需的Discord凭据,并且该技能声称需要的内容与其代码/指令实际访问的内容之间存在小小的不一致。
目的
代码和SKILL.md实现了规则驱动的审批引擎,具有异常检测、恢复策略和与名称/描述相匹配的Discord集成。但是,注册表元数据声称没有必需的环境变量,而SKILL.md和代码显然需要Discord凭据和可选的data-dir/env路径;这种不匹配是意外的,应予以纠正。
说明范围
运行时说明的重点是创建审批、运行检测器、恢复和发送Discord通知。SKILL.md告诉代理从技能根加载模块,读取config/approval-rules.json并运行cron/test脚本。这些操作与所述目的和代码的行为是一致的;我没有看到读取不相关的系统文件或将数据泄露到Discord以外的未知端点的说明。
安装机制
没有提供安装规范(仅指令) ,包含的源文件是使用内置节点API ( fs , https )的标准JS模块。没有外部下载URL或不寻常的安装程序。安装机制的风险较低。
证书
SKILL.md和代码需要Discord相关的环境变量( DISCORD_BOT_TOKEN和几个DISCORD_*_CHANNEL ID )以及可选的应用/数据根覆盖,但技能注册表声明不需要环境变量—不一致。对于集成Discord的通知程序来说,请求的envs ( Discord令牌和频道ID )是合理的,但它们是敏感的凭据,应在元数据中明确声明,以便用户知道该提供什么……
持久
技能写入本地数据/和日志/目录( approvals.json、approval.log、exceptions.json )并持续批准JSON —行为与批准引擎一致。它并不总是请求: true并且不会修改其他技能的配置。这种持久性是理所当然的,但您应该了解它创建的本地文件。
src/rule-evaluator.js: 236
检测到动态代码执行。
src/escalation-handler.js: 224
环境变量访问与网络发送相结合。
src/escalation-handler.js: 39
文件读取与网络发送相结合(可能泄露)。
src/retry-handler.js: 34
文件读取与网络发送相结合(可能泄露)。
安装(复制给龙虾 AI)
将下方整段复制到龙虾中文库对话中,由龙虾按 SKILL.md 完成安装。
请把本段交给龙虾中文库(龙虾 AI)执行:为本机安装 OpenClaw 技能「审批引擎」。简介:审批流程引擎 + 异常处理系统 — 规则驱动的多级审批、异常检测、自动恢复策略和 Discord 通知集成。
请 fetch 以下地址读取 SKILL.md 并按文档完成安装:https://raw.githubusercontent.com/openclaw/skills/refs/heads/main/skills/cjboy007/ssa-approval-engine/SKILL.md
(来源:yingzhi8.cn 技能库)
SKILL.md
---
name: approval-engine
description: 审批流程引擎 + 异常处理系统 — 规则驱动的多级审批、异常检测、自动恢复策略和 Discord 通知集成
---
# approval-engine Skill
## Description
审批流程引擎 + 异常处理系统。提供规则驱动的多级审批、实时异常检测、自动恢复策略(重试/降级/人工介入)和 Discord 通知集成。
## When to Use
- 需要对业务操作(报价、订单、权限变更)实施审批控制时
- 需要检测和告警系统/业务异常(超时、错误率升高、订单异常)时
- 需要配置自动恢复策略(API 失败重试、服务降级)时
- 需要通过 Discord 推送审批请求和告警时
## Location
`<approval-engine-root>/` 或 `$APPROVAL_ENGINE_ROOT`
## Modules
| 模块 | 用途 |
|------|------|
| `src/approval-engine.js` | 核心审批引擎(创建、提交、超时、升级) |
| `src/rule-evaluator.js` | 规则评估(触发条件、阈值、条件匹配) |
| `src/approval-store.js` | 审批状态 CRUD(JSON 持久化) |
| `src/exception-detector.js` | 异常检测(超时/错误/订单异常) |
| `src/alert-manager.js` | 告警发送(Discord、限流、历史) |
| `src/exception-logger.js` | 异常日志(记录、查询、解决标记) |
| `src/recovery-engine.js` | 恢复引擎(策略选择与执行) |
| `src/retry-handler.js` | 重试处理(指数退避、Jitter、统计) |
| `src/escalation-handler.js` | 升级处理(创建、确认、解决升级单) |
| `src/discord-notifier.js` | Discord 通知(消息/Embed/审批/告警) |
| `src/notification-router.js` | 通知路由(规则匹配→渠道选择) |
| `src/notification-templates.js` | 通知模板(审批/告警/升级/恢复) |
## Configuration
编辑 `config/approval-rules.json` 配置:
- `rules[]` — 审批规则列表(触发条件、审批人、超时策略)
- `thresholds` — 数值阈值(报价金额上限等)
- `auto_recovery` — 自动恢复策略映射
- `escalation_rules` — 升级规则(升级时间、升级对象)
- `notification_templates` — Discord 消息模板
所需环境变量:
- `DISCORD_BOT_TOKEN` — Discord 机器人令牌
- `DISCORD_APPROVALS_CHANNEL` — 审批通知渠道 ID
- `DISCORD_ALERTS_CHANNEL` — 告警通知渠道 ID
- `DISCORD_EXCEPTIONS_CHANNEL` — 异常通知渠道 ID
- `DISCORD_RECOVERY_CHANNEL` — 恢复通知渠道 ID
## Invocation
### 触发审批(自动匹配规则)
```javascript
const engine = require('<approval-engine-root>/src/approval-engine');
// 或使用环境变量
const engine = require(process.env.APPROVAL_ENGINE_ROOT + '/src/approval-engine');
// 提交业务数据,引擎自动评估规则
const approvals = await engine.autoCreateApprovals({
quotation: { amount: 15000 },
sales: { owner: 'alice' }
});
// 返回:所有被触发规则创建的审批列表
```
### 手动创建并提交审批
```javascript
const engine = require('<approval-engine-root>/src/approval-engine');
// 或使用环境变量
const engine = require(process.env.APPROVAL_ENGINE_ROOT + '/src/approval-engine');
// 创建审批
const approval = await engine.createApproval('quotation-approval', {
quotation: { amount: 15000, no: 'QT-2026-001' }
}, { submitter: 'alice' });
// 审批人决策
await engine.submitApproval(approval.id, 'wilson', 'approved', '金额合理,已审批');
// 查询状态
const status = await engine.getApprovalStatus(approval.id);
```
### 异常检测(周期巡检)
```javascript
const detector = require('<approval-engine-root>/src/exception-detector');
// 或使用环境变量
const detector = require(process.env.APPROVAL_ENGINE_ROOT + '/src/exception-detector');
// 全量检测(返回新发现的异常列表)
const exceptions = await detector.detectAll();
// 定时周期检测(含告警推送 Discord)
await detector.runPeriodicCheck();
```
### 自动恢复
```javascript
const recovery = require('<approval-engine-root>/src/recovery-engine');
// 自动选择恢复策略并执行
const result = await recovery.recover({
type: 'api_error', // 异常类型
severity: 'medium', // 严重程度: low/medium/high/critical
data: { endpoint: '/api/orders', error: 'timeout' }
});
// result.strategy: 'retry' | 'degrade' | 'manual_intervention'
// result.success: true/false
```
### 发送 Discord 通知
```javascript
const notifier = require('<approval-engine-root>/src/discord-notifier');
// 发送审批请求(带按钮/Embed)
await notifier.sendApprovalRequest({
approvalId: 'APR-001',
rule: '报价超权限审批',
submitter: 'alice',
amount: 15000
});
// 发送告警
await notifier.sendAlert({ title: 'API 超时', message: '订单 API 无响应', severity: 'high' });
// 发送恢复通知
await notifier.sendRecoveryNotification({ type: 'retry', success: true, attempts: 2 });
```
### 重试处理
```javascript
const retry = require('<approval-engine-root>/src/retry-handler');
// 带自动重试执行异步函数(指数退避 + Jitter)
const result = await retry.withRetry(
async () => await fetch('https://api.example.com/orders'),
{ maxAttempts: 3, baseDelayMs: 1000, maxDelayMs: 10000 }
);
```
### 超时检测与升级
```javascript
const engine = require('<approval-engine-root>/src/approval-engine');
// 检测超时审批并自动升级
const expired = await engine.checkTimeouts();
// expired[].action: 'escalate' | 'auto_approve' | 'auto_reject'
```
## Examples
### 完整业务流程示例
```javascript
const engine = require('<approval-engine-root>/src/approval-engine');
const detector = require('<approval-engine-root>/src/exception-detector');
const recovery = require('<approval-engine-root>/src/recovery-engine');
async function processQuotation(quotationData) {
// 1. 提交报价,自动触发审批规则
const approvals = await engine.autoCreateApprovals(quotationData);
if (approvals.length > 0) {
console.log(`已创建 ${approvals.length} 个审批请求,等待审批中...`);
// Discord 通知已在引擎内部自动发送
}
// 2. 运行异常检测
const exceptions = await detector.detectAll();
// 3. 对每个异常尝试自动恢复
for (const exc of exceptions) {
const result = await recovery.recover(exc);
if (!result.success) {
console.log(`异常 ${exc.type} 需要人工介入`);
}
}
}
```
### Cron 集成(定时巡检)
```bash
# 每 15 分钟运行一次异常检测和超时处理
*/15 * * * * node -e "
const engine = require(process.env.APPROVAL_ENGINE_ROOT + '/src/approval-engine');
const detector = require(process.env.APPROVAL_ENGINE_ROOT + '/src/exception-detector');
Promise.all([engine.checkTimeouts(), detector.runPeriodicCheck()])
.then(() => process.exit(0))
.catch(e => { console.error(e); process.exit(1); });
" >> /tmp/approval-engine-cron.log 2>&1
```
## Testing
```bash
# 运行冒烟测试
bash $APPROVAL_ENGINE_ROOT/test/smoke-test.sh
```
## Related Skills
- `quotation-workflow` — 报价单工作流(可集成审批触发)
- `imap-smtp-email` — 邮件通知渠道(审批通知邮件发送)
- `discord` (OpenClaw built-in) — Discord 消息发送底层
## Version
1.0.0 — 2026-03-24 (task-006, Phase 3, iteration 7)