最近执行
{{recentRuns.length}} 条
| 任务 | 触发 | 状态 | 耗时 | 时间 |
|---|---|---|---|---|
{{taskRunTitle(r)}} |
{{triggerLabel(r.triggerType)}} | {{statusLabel(r.status)}} | {{runDurationLabel(r)}} | {{fmtTime(r.createdAt)}} |
| 暂无记录 | ||||
系统状态
PostgreSQL
{{health.db?'连接正常':'连接失败'}}
Redis
{{health.redis?'连接正常':'连接失败'}}
Kimi OpenClaw
{{kimiHealth===true?'✓ 在线':kimiHealth===false?'✗ 离线':'点击检测'}}
已加载执行器
{{skillList.length}} 个
快速操作
工具包
{{skillList.length}} 已加载
{{s.icon}} {{s.name}}
工具定义(原任务模板)
{{taskList.total}} 条
| 名称 | 执行器 | 超时 | 重试 | 标签 | 创建时间 | 操作 |
|---|---|---|---|---|---|---|
{{t.name}} ID {{shortId(t.id)}} |
{{t.handler}} | {{t.timeout/1000}}s | {{t.maxRetries}}x | {{tag}} | {{fmtTime(t.createdAt)}} |
|
| 暂无工具定义 | ||||||
第 {{taskPage}} / {{taskList.totalPages}} 页,共 {{taskList.total}} 条
工具执行记录
{{runList.total}} 条
| 任务 | {{t('col.trigger')}} | {{t('col.status')}} | {{t('col.retry')}} | {{t('col.progress')}} | {{t('col.duration')}} | {{t('col.createdAt')}} | {{t('col.action')}} |
|---|---|---|---|---|---|---|---|
{{taskRunTitle(r)}} Run {{shortId(r.id)}} |
{{triggerLabel(r.triggerType)}} | {{statusLabel(r.status)}} | {{r.attempt}} |
{{r.progress}}%
|
{{runDurationLabel(r)}} | {{fmtTime(r.createdAt)}} | |
| {{t('empty.runs')}} | |||||||
第 {{runPage}} / {{runList.totalPages}} 页,共 {{runList.total}} 条
工作流定义{{workflowList.total}}
| 名称 | 状态 | 步骤数 | 触发器 | 版本 | 创建时间 | 操作 |
|---|---|---|---|---|---|---|
{{w.name}} ID {{shortId(w.id)}} |
{{statusLabel(w.status)}} | {{w.steps?w.steps.length:'—'}} | {{w.triggers?w.triggers.length:'—'}} | v{{w.version}} | {{fmtTime(w.createdAt)}} |
|
| 暂无工作流 | ||||||
信号入口
FlashV2 上线:
人工接管:
通用信号:
POST /api/v1/integrations/flashv2/mqtt/device-online
event flash.device.online
source flashv2
人工接管:
POST /api/v1/signals/human-takeover
event human.takeover
source operator
通用信号:
POST /api/v1/signals/emit,body 使用 {"eventName":"...","source":"...","payload":{}}。
触发器{{triggerList.total}}
| 名称 | 事件 | 目标 | 条件 | 状态 | 创建时间 | 操作 |
|---|---|---|---|---|---|---|
{{tr.name}} ID {{shortId(tr.id)}} |
{{triggerConfig(tr).eventName || tr.type}}
{{triggerConfig(tr).source}}
{{tr.webhookPath}}
|
{{triggerTargetName(tr)}} {{tr.workflowId ? '工作流' : tr.taskId ? '任务' : '未配置'}} |
{{triggerConditionSummary(tr)}} |
{{tr.enabled?'启用':'停用'}} | {{fmtTime(tr.createdAt)}} |
|
| 暂无触发器 | ||||||
工作流执行记录{{wfRunList.total}}
| 工作流 | 触发 | 当前步骤 | 状态 | 开始时间 | 结束时间 | 操作 |
|---|---|---|---|---|---|---|
{{workflowRunTitle(r)}} Run {{shortId(r.id)}} |
{{triggerLabel(r.triggerType)}} | {{currentStepLabel(r)}} | {{statusLabel(r.status)}} | {{fmtTime(r.startedAt)}} | {{r.finishedAt?fmtTime(r.finishedAt):'—'}} | |
| 暂无记录 | ||||||
工具库
{{allToolList.length}}
{{group.label}}
{{group.items.length}}
{{s.label}}
{{s.name}}
{{s.kindLabel}}
v{{s.version || '-'}}
{{s.description}}
测试结果
{{toolTestState[s.name]?.error ? '失败' : '成功'}}
{{toolTestState[s.name].error}}
{{JSON.stringify(toolTestState[s.name].result, null, 2)}}
支持项目
| 调用值 | 项目 | 说明 |
|---|---|---|
| {{item.value}} | {{item.label}} | {{item.desc}} |
源码实现
{{toolSource.root || s.path || ''}}
正在读取源码…
{{toolSource.error}}
{{file.name}} · {{file.size}} bytes
{{file.content}}
没有可显示的源码文件
输入字段
| 字段 | 类型 | 说明 |
|---|---|---|
| {{key}} * | {{field.type}} | {{field.label}} {{field.hint || field.placeholder || ''}} |
| 无输入字段 | ||
输出字段
{{field}}
未声明
怎么调用
{{unifiedToolCurl(s)}}
输出结构
{{JSON.stringify(toolOutputExample(s), null, 2)}}
暂无工具
动态工具包{{dynamicToolList.length}}
{{s.label}}
动态加载
{{s.description}}
测试结果
{{toolTestState[s.name]?.error ? '失败' : '成功'}}
{{toolTestState[s.name].error}}
{{JSON.stringify(toolTestState[s.name].result, null, 2)}}
源码实现
{{toolSource.root || s.path || ''}}
正在读取源码…
{{toolSource.error}}
{{file.name}} · {{file.size}} bytes
{{file.content}}
没有可显示的源码文件
输入字段
输出字段
{{field}}
未声明
运行 API
{{location.origin}}/api/v1/tools/{{s.name}}/run
请求示例
{{JSON.stringify((s.examples||[])[0]?.config || {}, null, 2)}}
工具说明
{{JSON.stringify({
name: s.name,
label: s.label,
version: s.version,
package: s.packagePath || s.path || ''
}, null, 2)}}
暂无动态工具包
触发桥接工具{{publicToolList.length}}
{{s.icon || '🔧'}} {{s.label}}
唯一工具
{{s.description}}
输入字段
输出字段
{{field}}
API 地址
{{location.origin}}{{s.path}}
请求示例
{{JSON.stringify(s.example || {}, null, 2)}}
返回示例
{{JSON.stringify(s.responseExample || {}, null, 2)}}
实现代码
{{(s.implementation || []).join('\n')}}
工具入口固定在 Tools 内;后续工作流在 Dify 编辑。请求中可临时传入 difyWorkflowApiUrl 覆盖 Dify Workflow API 地址。
暂无工具
待确认通知
{{ackNotifList.length}} 待确认
{{n.title}}
{{n.body}}
{{n.lastError}}
{{statusLabel(n.status)}}
{{fmtTime(n.lastAttemptAt)}}
站内通知{{counts.unread}} 未读
| 标题 | 内容 | 事件 | 时间 | 操作 | |
|---|---|---|---|---|---|
| {{levelLabel(n.level)}} | {{n.title}} |
{{n.body}} | {{n.event}} | {{fmtTime(n.createdAt)}} | |
| 暂无通知 | |||||
{{s.icon||'🔧'}}
{{s.label}}
{{s.name}}
v{{s.version}}
{{s.description}}
配置字段
{{key}}
:{{field.type}}
*
示例
{{ex.label}}
输出:
{{f}}
加载于 {{fmtTime(s.loadedAt)}}
通知渠道
| 名称 | 类型 | 状态 | 规则数 | 操作 |
|---|---|---|---|---|
| {{c.name}} | {{channelTypeLabel(c.type)}} | {{c.enabled?'启用':'停用'}} | {{c.rules?c.rules.length:0}} |
|
| 暂无渠道,添加钉钉/飞书/企业微信 Webhook | ||||
通知规则事件 → 渠道 的映射关系
| 事件 | 渠道 | 状态 | 操作 |
|---|---|---|---|
| {{r.event}} | {{channelList.find(c=>c.id===r.channelId)?.name||r.channelId.slice(0,8)+'…'}} | {{r.enabled?'启用':'停用'}} |
|
| 暂无规则 | |||
🤖 {{t('ai.title')}}
{{t('ai.baseUrlHint')}}
{{t('ai.keyHint')}}
{{aiTestResult.msg}}
{{t('ai.callbackTitle')}}
{{t('ai.callbackHint')}}
{{t('ai.callbackHint')}}
POST /api/v1/callback/:token/progress
POST /api/v1/callback/:token/complete
POST /api/v1/callback/:token/fail
🤖 Kimi OpenClaw 集成状态
Gateway 状态
{{kimiHealth===true?'在线':kimiHealth===false?'离线':'未检测'}}
http://192.168.1.114:18680
快速测试
Wake 通知:
Agent 执行:
POST /hooks/wakeAgent 执行:
POST /hooks/agent
在 设置 → 通知渠道 中添加 kimi 类型渠道,
然后在 通知规则 中绑定事件(如 task:failed),即可在任务失败时自动通知 Kimi。
以下是已加载工具包。新增工具优先放入 skills/ 或上传到工具包目录后热加载,不再修改源码注册。
{{h.name}}{{h.label}}
{{h.desc}}
Config 示例:
{{h.example}}
{{h.note}}
➕ 自定义工具包
把工具包目录放入
skills/,或通过“加载工具包目录”指定绝对路径,然后点击全部重载。推荐 Python 工具包:tool.py + tool.json。Dify 通过 POST /api/v1/tools/{name}/run 调用。# skills/my-tool/tool.json
{"name":"my-tool","label":"我的工具","description":"给 Dify 调用的 Python 动态工具","version":"1.0.0","configSchema":{}}
# skills/my-tool/tool.py
import json, sys
payload = json.load(sys.stdin)
print(json.dumps({"success": True, "output": {"输入": payload.get("input", {})}, "duration": 0}, ensure_ascii=False))
服务状态
PostgreSQL{{health.db?'连接正常':'连接失败'}}
Redis{{health.redis?'连接正常':'连接失败'}}
HTTP Server0.0.0.0:3000
时区Asia/Shanghai
队列并发5
API 文档
Base URL:
任务: POST /tasks GET /tasks POST /tasks/:id/run GET /task-runs
工作流: POST /workflows POST /workflows/:id/trigger GET /workflow-runs
通知: GET /notifications POST /notifications/read-all
渠道: POST /notification-channels POST /notification-rules
http://{{location.hostname}}:3000/api/v1任务: POST /tasks GET /tasks POST /tasks/:id/run GET /task-runs
工作流: POST /workflows POST /workflows/:id/trigger GET /workflow-runs
通知: GET /notifications POST /notifications/read-all
渠道: POST /notification-channels POST /notification-rules