skills/coze-low-code-caller-yashu/SKILL.md
本技能提供扣子(Coze)低代码平台的智能体与工作流调用能力。激活条件:用户消息须包含以下关键词之一:`调用扣子`、`测试扣子`、`执行扣子工作流`、`调用扣子Bot`、`进行扣子对话`、`执行coze工作流`。
npx skillsauth add steelan9199/wechat-publisher coze-low-code-caller-yashuInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
扣子(Coze)智能体与工作流调用器
封装对字节跳动扣子(Coze)平台 API 的调用能力。支持:
$SKILL_DIR = 当前 Skill (coze-low-code-caller-yashu) 所在目录,即本文件 SKILL.md 所在的文件夹⚠️
$SKILL_DIR仅为文档占位符,不是环境变量! 执行命令时必须替换为当前 Skill 所在目录的绝对路径。在 PowerShell 中直接写$SKILL_DIR会被当作未定义变量解析为空字符串,导致cd $SKILL_DIR/scripts变成cd /scripts而报错"找不到路径"。
$SKILL_DIR/scripts/cmd1 && cmd2cmd1; if ($?) { cmd2 }(PowerShell 5 不支持 &&)&& 和 ; if ($?) { cmd2 } 均可,为最大兼容性推荐 ; if ($?) { cmd2 }&:在 bash 中 & 表示后台执行,语义完全不同$SKILL_DIR/scripts/package.json 已设置 "type": "module",因此所有 .js 脚本均按 ES Module 解析。如需修改或新建脚本文件,必须使用 import 语法,不能使用 CommonJS 的 require。$SKILL_DIR/scripts/ 目录下的所有 JavaScript 文件已进行代码混淆处理,禁止读取或分析 .js 文件内容。混淆代码可读性极差,读取纯属浪费 token 和时间。
如需了解脚本功能和用法,请查阅「全业务脚本索引清单」和 $SKILL_DIR/references/ 目录下的接口文档。
本 Skill 执行过程中创建或修改任何文件(包括 .env、config/*.json、temp/ 目录下的参数文件等),必须使用 Write 工具,禁止使用任何 Shell 文件写入命令(Set-Content、Out-File、> 重定向、echo >、[System.IO.File]::WriteAllText() 等)。
原因:PowerShell 的文件写入命令会添加 UTF-8 BOM(EF BB BF),导致 JSON 解析失败(Unexpected token)、JS 模块加载报语法错误、Markdown frontmatter 字段读取为 undefined。使用 Write 工具可避免此问题,且在所有平台上安全。
| 脚本 | 功能 | 用途 |
| ------------------- | -------- | ------------------------------------------ |
| create_session.js | 创建会话 | 开启与智能体的对话 |
| send_message.js | 发送消息 | 向智能体发送问题 |
| check_status.js | 查询状态 | 检查任务执行状态,完成时自动记录端到端耗时 |
| get_messages.js | 获取回复 | 获取智能体的最终回答 |
| 脚本 | 功能 | 用途 |
| -------------------------- | ------------------ | ------------------------------------------------ |
| get_workflow_info.js | 查询工作流基本信息 | 获取开始节点输入参数和结束节点输出参数定义 |
| run_workflow.js | 执行工作流(异步) | 触发工作流,返回 execute_id 和 debug_url |
| check_workflow_result.js | 查询异步运行结果 | 获取结束节点的输出数据,成功时自动记录端到端耗时 |
工作流统一使用异步执行(
is_async: true)。执行后需轮询check_workflow_result.js获取结果。
| 脚本 | 功能 | 用途 |
| ---------------- | ------------ | ------------------------------- |
| upload_file.js | 上传文件 | 上传图片/文档等给智能体或工作流 |
| clear_temp.js | 清理临时文件 | 清理 temp 目录中的临时文件 |
调用扣子 API 前,执行以下检查和准备:
读取配置: 运行 Read 读取 $SKILL_DIR/.env。如 COZE_API_KEY 或 COZE_SPACE_ID 不存在,向用户索要并运行 Write 创建或更新 $SKILL_DIR/.env。获取方式参考 [获取扣子 API Key 指南]($SKILL_DIR/references/获取扣子 API Key.md) 和 获取扣子空间ID指南。
# 扣子空间 ID
COZE_SPACE_ID=你的空间ID
# 扣子 API 密钥
COZE_API_KEY=你的API密钥
# 轮询间隔时间(单位:秒),默认5秒
POLLING_INTERVAL=5
读取配置列表: 运行 Read 读取 $SKILL_DIR/config/bots.json 和 $SKILL_DIR/config/workflows.json。如文件不存在或为空,提示用户先配置智能体/工作流。
{
"bots": [
{
"id": "你的BOT_ID / 智能体 ID",
"name": "智能体名称",
"description": "可选描述",
"recent_durations": []
}
]
}
recent_durations字段由脚本自动维护,记录最近 6 次成功调用的端到端耗时(从创建会话到任务完成,如"28秒"、"1分15秒"),供 AI 参考预估等待时间。无需手动填写。
{
"workflows": [
{
"id": "你的WORKFLOW_ID",
"name": "工作流名称",
"description": "可选描述",
"recent_durations": []
}
]
}
recent_durations字段由脚本自动维护,记录最近 6 次成功调用的端到端耗时(从执行工作流到执行完成,如"28秒"、"1分15秒"),供 AI 参考预估等待时间。无需手动填写。
安装依赖(一次性操作): 运行 cd $SKILL_DIR/scripts; if ($?) { npm install } 确保依赖已安装。依赖安装后无需重复执行,仅首次使用或 package.json 更新后需要重新安装。
所有预置脚本位于 $SKILL_DIR/scripts/ 目录,调用前确保已安装依赖。
⚠️ 【致命重要】执行脚本前必须先 cd 到 scripts 目录
每次运行任何脚本之前,先执行
cd $SKILL_DIR/scripts,再运行脚本。否则 Node.js 会在当前工作目录找不到脚本文件,报Error: Cannot find module '...'。AI 执行命令时,每个命令前都要包含
cd $SKILL_DIR/scripts,并使用条件执行(前一条成功才执行下一条)。例如:cd $SKILL_DIR/scripts; if ($?) { node create_session.js <bot_id> }
⚠️ 命令语法注意:必须使用条件执行(前一条成功才执行下一条),跨平台规则见【环境说明】。例如:
- ❌
cd dir; node xxx.js(;不是条件执行,第一条失败时第二条仍会执行)- ✅ PowerShell:
cd dir; if ($?) { node xxx.js }- ✅ bash/zsh:
cd dir && node xxx.js
当用户请求包含调用扣子、测试扣子、执行扣子工作流、调用扣子Bot、进行扣子对话、执行coze工作流等触发词时,执行以下步骤:
.env、bots.json 和 workflows.json 的读取bots.json / workflows.json 中每个对象的 name 和 description 与用户任务的匹配度,选择最合适的智能体或工作流,并向用户说明选择理由⚠️ 【强制要求】在执行任何脚本之前,必须先读取对应的参考文档! 这是避免参数错误的关键步骤。
- 调用
send_message.js前 -> 必须先读取$SKILL_DIR/references/bot/sendMessage.md- 调用
run_workflow.js前 -> 必须先读取$SKILL_DIR/references/workflow/runWorkflow.md- 其他脚本同理,否则极容易因为参数格式错误导致调用失败
create_session.js -> send_message.js -> check_status.js -> get_messages.jsget_workflow_info.js -> run_workflow.js -> check_workflow_result.js(需要 workflow_id 和 execute_id 两个参数)cd 到 $SKILL_DIR/scripts,再运行命令。示例:
cd $SKILL_DIR/scripts; if ($?) { node create_session.js <bot_id> }
cd $SKILL_DIR/scripts; if ($?) { node send_message.js <conversation_id> <绝对路径> }
cd $SKILL_DIR/scripts; if ($?) { node check_status.js <conversation_id> <chat_id> }
cd $SKILL_DIR/scripts; if ($?) { node get_messages.js <conversation_id> <chat_id> }
$SKILL_DIR/temp 目录,且参数文件路径必须使用绝对路径clear_temp.js 清理 $SKILL_DIR/temp 目录(详细说明见 临时文件清理说明)当需要发送文件(图片、文档、音频、视频等)给智能体或工作流时,先上传文件:
| 步骤 | 脚本 | 功能 | 命令格式 | 输出字段 |
| ---- | ---------------- | -------- | ------------------------------------ | ----------------------------------- |
| 1 | upload_file.js | 上传文件 | node upload_file.js <文件绝对路径> | file_id, file_name, file_size |
详细说明参考 上传文件详细说明。
智能体调用采用四步流程:create_session.js → send_message.js → check_status.js → get_messages.js
详细调用流程、参数格式、输入输出示例、常见错误处理,参考:
工作流调用采用三步流程:get_workflow_info.js → run_workflow.js → check_workflow_result.js
详细调用流程、参数格式、输入输出示例、常见错误处理,参考:
当调用智能体或工作流时,由于它们是异步执行的,可能需要一段时间才能完成。AI 需要通过轮询来检查任务是否完成。
send_message.js 后,智能体正在处理请求,状态可能为 in_progressrun_workflow.js 后,工作流可能正在运行,状态可能为 Running优先参考 recent_durations 历史耗时: 读取 $SKILL_DIR/config/bots.json(智能体)或 $SKILL_DIR/config/workflows.json(工作流),找到目标智能体/工作流的 recent_durations 数组。该数组记录了最近 6 次成功调用的端到端耗时(如 "28秒"、"1分15秒"),AI 可据此预估本次需要等待的时间,合理设置轮询间隔和最大轮询次数。
从 .env 文件中读取 POLLING_INTERVAL 配置项(单位:秒):
# 轮询间隔时间(单位:秒),默认5秒
POLLING_INTERVAL=5
1. 智能体(Bot):
调用 check_status.js 后,检查返回的 status 字段:
| status 值 | 含义 | 后续操作 |
| --------------- | ------ | ------------------------------------------------------------------------------------------------------------- |
| "completed" | 已完成 | 停止轮询,调用 get_messages.js 获取回复 |
| "in_progress" | 进行中 | 继续轮询:先单独执行 Start-Sleep -Seconds <POLLING_INTERVAL> 等待,再发起下一次查询(详见下方「实现方式」) |
2. 工作流(Workflow):
调用 check_workflow_result.js 后,检查返回的 execute_status 字段:
| execute_status 值 | 含义 | 后续操作 |
| ----------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| "Success" | 已完成 | 停止轮询,获取输出结果 |
| "Fail" | 失败 | 停止轮询,返回错误信息 |
| "Running" | 进行中 | 继续轮询:先单独执行 Start-Sleep -Seconds <POLLING_INTERVAL> 等待,再发起下一次查询(详见下方「实现方式」);同时将 debug_url 提供给用户,可在浏览器中实时观察执行进度 |
脚本本身不包含自动等待逻辑,需要 AI 自行实现轮询。两次轮询之间必须等待 POLLING_INTERVAL 秒,等待命令必须作为独立的一条命令执行,不能与轮询脚本拼接在同一条命令里。等待命令因平台而异:PowerShell 用 Start-Sleep -Seconds N,bash/zsh 用 sleep N(跨平台等待命令对照表详见 skill-laws-yashu 的【轮询操作的等待规则】章节)。
# 示例:智能体轮询(PowerShell,分三条独立命令执行)
cd $SKILL_DIR/scripts; if ($?) { node check_status.js <conversation_id> <chat_id> }
# 检查输出,如果 in_progress,先单独执行等待命令,再发起下一次查询
Start-Sleep -Seconds 5
cd $SKILL_DIR/scripts; if ($?) { node check_status.js <conversation_id> <chat_id> }
# 示例:工作流轮询(PowerShell,分三条独立命令执行)
cd $SKILL_DIR/scripts; if ($?) { node check_workflow_result.js <workflow_id> <execute_id> }
# 检查输出,如果 Running,先单独执行等待命令,再发起下一次查询
Start-Sleep -Seconds 5
cd $SKILL_DIR/scripts; if ($?) { node check_workflow_result.js <workflow_id> <execute_id> }
# 示例:智能体轮询(bash/zsh,分三条独立命令执行)
cd $SKILL_DIR/scripts && node check_status.js <conversation_id> <chat_id>
# 检查输出,如果 in_progress,先单独执行等待命令,再发起下一次查询
sleep 5
cd $SKILL_DIR/scripts && node check_status.js <conversation_id> <chat_id>
# 示例:工作流轮询(bash/zsh,分三条独立命令执行)
cd $SKILL_DIR/scripts && node check_workflow_result.js <workflow_id> <execute_id>
# 检查输出,如果 Running,先单独执行等待命令,再发起下一次查询
sleep 5
cd $SKILL_DIR/scripts && node check_workflow_result.js <workflow_id> <execute_id>
⚠️ 【致命重要】等待命令必须作为独立命令执行,禁止与轮询脚本拼接在同一条命令里!
等待是必须的:两次轮询之间必须等待
POLLING_INTERVAL秒(从.env读取,默认 5 秒),避免无意义的密集查询。但等待命令必须单独成一条命令,绝对不能和轮询脚本写在同一条命令里。命令必须一条一条地单独执行,禁止用
;、&&或if ($?)把等待命令与其他命令拼接。原因:AI 客户端的终端输出捕获机制存在一个时间阈值。当单条命令总执行时间超过阈值时,阈值之后产生的输出不会被捕获到终端历史缓冲区,导致命令调用工具和状态检查工具都无法读取到这部分输出。不同 AI 客户端的阈值可能不同(例如 Trae IDE 约为 5 秒,其他大公司出品的 AI 编程客户端阈值相近),等待时间默认值 5 秒与多数客户端的阈值对齐。
罪魁祸首是等待命令与脚本拼接:把等待命令和脚本调用写在一条命令里,会把原本 1-2 秒的脚本调用拉长到 6+ 秒,越过客户端的输出捕获阈值,导致脚本输出(发生在等待之后)落在捕获窗口之外而丢失。表现现象是:命令执行成功(exit code 0),但返回的日志里只有命令行本身,没有任何脚本输出的 JSON 结果。
- ❌ 错误(拼接在一条命令里,PowerShell):
Start-Sleep -Seconds 5; cd $SKILL_DIR/scripts; if ($?) { node check_workflow_result.js <wf_id> <exec_id> }(总时长 6+ 秒,输出丢失)- ❌ 错误(拼接在一条命令里,bash):
sleep 5 && cd $SKILL_DIR/scripts && node check_workflow_result.js <wf_id> <exec_id>(总时长 6+ 秒,输出丢失)- ✅ 正确(分两条独立命令执行):
- 第 1 条命令(仅等待):PowerShell
Start-Sleep -Seconds 5/ bashsleep 5- 第 2 条命令(仅执行脚本,1-2 秒,输出正常):PowerShell
cd $SKILL_DIR/scripts; if ($?) { node check_workflow_result.js <wf_id> <exec_id> }/ bashcd $SKILL_DIR/scripts && node check_workflow_result.js <wf_id> <exec_id>轮询间隔的实现:AI 通过多次独立的命令调用实现轮询。每次轮询完成后,若状态仍为进行中,必须先单独执行一次等待命令(PowerShell
Start-Sleep -Seconds <POLLING_INTERVAL>/ bashsleep <POLLING_INTERVAL>)进行等待,然后再发起下一次轮询调用。POLLING_INTERVAL从.env读取(默认 5 秒)。命令必须一条一条地单独执行,禁止拼接。
| 错误信息 | 原因 | 正确用法 |
| ----------------------------------------------------------------------- | ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
| Cannot find module '...create_session.js' | 未先 cd 到 scripts 目录就运行脚本 | 执行 cd $SKILL_DIR/scripts; if ($?) { node create_session.js <bot_id> } |
| Unexpected token ... is not valid JSON | 错误地将文本文件路径传给 send_message.js | 第二个参数必须是 JSON 参数文件,如 param.json |
| 参数错误:第二个参数必须是 JSON 文件路径 | 传递了 .txt 或其他非 JSON 文件 | 使用 cd $SKILL_DIR/scripts; if ($?) { node send_message.js <会话ID> <参数JSON文件绝对路径> } |
| 参数错误:JSON 中缺少或无效的 'path' 字段 | JSON 文件中没有 path 字段 | 确保 JSON 格式为 { "path": "$SKILL_DIR/temp/your_file.txt" }(绝对路径) |
| 用户输入文件不存在 | path 指向的文件不存在 | 使用绝对路径(如 $SKILL_DIR/temp/your_file.txt) |
| 执行工作流失败 | workflow_id 错误或参数类型不匹配 | 先用 get_workflow_info.js 确认参数定义,再检查传入的参数 |
| 查询工作流结果失败 | execute_id 错误或工作流仍在运行中 | 确认 execute_id 正确;如状态为 Running,等待后重试 |
| access token expired | 令牌过期 | 申请新的令牌,参考 [获取扣子 API Key 指南]($SKILL_DIR/references/获取扣子 API Key.md) |
| authentication is invalid 或 does not have permission to access ... | 令牌权限不足 | 前往 扣子 PAT 管理页面 编辑令牌,勾选所需的权限范围(Bot、Workflow、File upload 等) |
⚠️ 重要:所有参数文件路径和用户输入文件路径都必须使用绝对路径,且临时文件必须放在
$SKILL_DIR/temp目录下!
在完成用户请求并将结果交付给用户后,执行 clear_temp.js 清理 $SKILL_DIR/temp 目录下的临时文件,防止文件堆积。
clear_temp.js 脚本内部逻辑决定,文档不干涉详细操作说明见 临时文件清理说明。
scripts 目录下的脚本在运行时如需创建临时文件,必须存放于 $SKILL_DIR/temp 目录中,不得与脚本文件混杂存放$SKILL_DIR/scripts/ 下对应的封装脚本调用,严禁使用 Invoke-RestMethod、curl、fetch 等方式自行构造 HTTP 请求直接调用扣子平台 API。即使封装脚本因授权、限流等原因调用失败,也不得绕过脚本直接调用 API,应将错误信息如实反馈给用户。APIcontent-media
自动启停视频课程录制所需的辅助程序。激活条件:用户消息须包含以下关键词之一:`我要录制视频课程`、`开始录制视频课程`、`准备录课`、`视频课程录完了`、`录课结束`、`停止录制`。
content-media
生成扁平的 SVG 图(架构图、中心辐射图、流程图、简易时序图、思维导图、组织架构图、2×2对比矩阵、时间线、循环图、鱼骨图),也支持把已有 SVG 文件转成 PNG 图片。激活条件(满足任一即可):生成类关键词 `画架构图`、`画中心辐射图`、`画流程图`、`画时序图`、`画思维导图`、`画脑图`、`画组织架构图`、`画树形图`、`画对比矩阵`、`画四象限`、`画时间线`、`画循环图`、`画鱼骨图`、`画因果分析图`;转换类关键词`SVG 转图片`、`把 SVG 转成图片`、`把 SVG 转成 PNG`。
testing
检查指定技能文档中的废话文字并输出诊断报告。激活条件:用户消息须包含以下关键词之一:`检查技能废话`、`这个技能文档有没有多余内容`、`清理技能文档废话`、`审查技能文档废话`、`清理技能文档历史说明`。
testing
评审一个技能是否「自包含」——即其知识、经验、规范是否全部内置在技能文件内(SKILL.md + references/),不依赖特定 AI 客户端专有的知识接口命令(如 read_me / modules: / show_widget / Visualizer)去外部拉取,也不硬编码某个 AI 软件的私有路径(如 .workbuddy)。同时检查工具依赖(node、浏览器、命令行)是否仅作为用户自备工具声明、未写死私有路径。当用户要求「评审这个技能是否自包含 / 独立」「检查技能知识是否内置」「审查技能的独立性 / 可移植性」「audit / review a skill for self-containment」时触发。产出评审报告:结论(自包含 / 不独立)+ 问题清单(文件:行号 + 引用的外部依赖 + 为何影响独立性)+ 整改建议。