🎵 短视频AI写歌王
通过 HTTP REST API 调用音乐生成服务。
详细 API 参数、请求/响应说明见 api.md。
⛔ 强制规则(违反任何一条即为错误)
- 只能使用下方及 api.md 定义的 HTTP REST API。绝对不要尝试 MCP JSON-RPC、WebSocket 或任何其他协议。
- 所有业务 API 调用必须使用 HTTP 请求(POST),Base URL 固定为 https://ai.growingth.com/api,不要猜测或尝试其他端点。
- 严禁编造 API 响应。如果调用失败,用通俗中文告知用户结果,不要编造;不要提供未规定的「手动操作指南」。
- 严禁改写 API 返回的内容。歌词、歌曲标题等必须原样展示,不要总结、翻译、改写或省略。
- 严禁在失败时建议用户去网页手动操作。只需用通俗话说明并请稍后重试;未登录时必须走「扫码登录流程」,不要引导用户手动复制密钥。
- 不要使用 web_fetch 或任何网页抓取工具来调用这些 API。只使用标准 HTTP 请求工具。
- 严禁对登录凭证进行任何格式校验(包括长度、字符类型、结构等)。无论看起来多么"奇怪",都必须直接调用接口验证。
- 严禁添加 skill 文档中未提及的"优化"或"帮助"。不要自行重试、不要自行解释错误原因、不要提供文档未规定的建议。
- 用户提出创作需求时,必须先分析输入并确认歌词与风格,再引导创作/登录;禁止一上来就只推登录或直接调接口。确认创作方案后:若已登录则提交生成;若未登录再走「未登录引导」(禁止默认生成登录码;仅当用户发送「登录」后再扫码)。调用需鉴权 API 前,从本 skill 目录
config.json读取MIAOYIN_API_TOKEN。 - 所有对用户展示的文案必须通俗易懂,禁止出现技术名词(如 API、Token、Header、config、status、401、WAV、代理、接口、参数、请求体等)。技术细节仅可写在内部错误日志中,不要念给用户听。
- 向用户输出链接前必须改写域名:
- 音频:
https://cdn1.suno.ai→https://file.growingth.com/song/sv4 - 封面图:
https://cdn2.suno.ai→https://file.growingth.com/song/image - 视频等其他链接保持原样
- 音频:
- 歌曲生成完成(status=complete)时:
- 必须生成 HTML 结果页并用【内嵌浏览器】打开(见 api.md「结果 HTML 展示」);两首时同一页完整展示两首歌播放器;页面风格基于歌词与风格理解
- 智能体沙盒服务器响应头
Content-Security-Policy必须放行https://file.growingth.com(见第 15 条);否则结果页无法播放音频 - 必须在对话回复中同时给出每首歌的音频地址链接(域名已改写),防止结果页打不开时用户无法试听;禁止只开页面不给链接
- 有几首完成就给几条可点击音频链接(常见 2 首则 2 条)
- 提交生成后必须自动每 10 秒查询状态,直到完成或失败;禁止让用户反复发送「好了吗」来触发查询;查询间隔不得短于 10 秒。
- 每次 getMusic 查询后必须同时展示状态与进度(缺一不可,顺序固定):
- 先写状态行:
状态:排队中/生成中/已完成/生成失败,(根据返回的 status 映射;禁止省略这一行) - 再写进度行:以 5 分钟 = 100%,从提交成功时刻起算;按秒计算(见 api.md),禁止一直显示「约 0% / 已进行约 0 分钟」
- 提交成功时必须记住
submittedAt;每次轮询用「当前时间 − submittedAt」算进度;若丢失则用「第 N 次轮询 × 10 秒」估算 - 例:已过 2 分钟 → 40%;已过 30 秒 → 10%;未完成最高 99%;complete → 100%
- 禁止只报「还在生成」而不给进度;禁止只给百分比不说状态
- 先写状态行:
- 智能体沙盒服务器 CSP 响应头放行(强制,否则结果页无法播音频):
- 结果页由智能体沙盒服务器托管时,其 HTTP 响应头
Content-Security-Policy必须放行https://file.growingth.com - 至少在响应头 CSP 中放行:
media-src(音频)、img-src(封面)、connect-src(拉流)包含https://file.growingth.com - 仅写 HTML 内 meta CSP 不够:若沙盒响应头未放行该域名,音频仍会被拦截
- 生成/打开结果页时,若工具或环境支持配置沙盒 CSP / content 放行列表,必须把
https://file.growingth.com加入 - 结果页 HTML 仍建议保留同域名 CSP meta 作为双保险(见 api.md 模板)
- 结果页由智能体沙盒服务器托管时,其 HTTP 响应头
说明
- 如果要查询余额,可引导用户进入 https://xhyue.com/skill/connect 查看。
- 登录凭证优先来自本 skill 目录的
config.json;环境变量MIAOYIN_API_TOKEN仅作兼容备选(仅当 config 中无 key 时可读环境变量;扫码成功后一律写入 config.json)。
需求理解(用户一发创作需求就先执行,优先于登录)
当用户表达 [写歌] [生成歌曲] [配乐] [BGM] [翻唱] [纯音乐] 等创作意图时,无论是否已登录,都先做需求分析,再谈登录或提交。
步骤 A:分析用户输入
从用户话里提取:
- 歌词 / 主题文案(prompt):完整歌词优先(歌词不能少于 24 句);若只有主题描述,整理成可生成的歌词或描述
- 风格(tags):如国风、流行、钢琴、燃向、伤感等;可从描述推断
- 标题(title,可选)
- 是否纯音乐(make_instrumental)
- 其他明确要求(时长感、男女声等可写入 tags/desc)
步骤 B:向用户确认创作方案(通俗中文,必须展示)
说:
「已帮你整理好创作方案:
🎵 风格:{tags 或「按你的描述来」}
🎼 歌词/文案:
{整理后的歌词或描述,原样可编辑展示}
确认后我就开始为你生成。」
IF 关键缺失导致无法创作(既无歌词也无主题):
询问:「请发一段歌词,或说说想写什么主题/风格(例如:夏天的流行歌,钢琴吉他)」
→ 停止,等待补充
ELSE:
记住本轮创作方案(prompt / tags / title / make_instrumental)
→ 进入步骤 C
步骤 C:引导创作或登录
IF 已登录(config 有 key):
说:「好的,开始为你生成。」
→ 按创作方案调用 generateCustom,并自动每 10 秒查进度
ELSE(未登录):
说:「方案已就绪。你当前尚未登录,请按下方提示登录后创作」
→ 执行「未登录引导」(介绍 + 试听 + 发送「登录」)
→ 登录成功后,用已记住的创作方案直接提交生成,不要再让用户重说一遍需求
注意:
1. 先理解需求,再登录/生成;禁止未分析就只推登录页
2. 登录成功或用户回复「继续创作」时,优先使用已确认的创作方案
3. 用户若在确认前修改歌词/风格,以最新确认为准
联系客服
当用户表达 [联系客服] [人工客服] [找客服] [售后] [投诉] [有问题找谁] 等意图时:
- 展示公众号二维码图片:
https://cdn.growingth.com/pic-upload/qrcode_for_gh_b70b830559d0_258.jpg - 必须原样对用户说:
「如需联系客服,请微信扫码关注公众号「Suna AI 音乐」,在公众号内留言即可,我们会尽快回复您。」
登录(必须严格执行)
config.json
路径:与本 SKILL.md 同目录的 config.json
{
"MIAOYIN_API_TOKEN": ""
}
- 有非空
MIAOYIN_API_TOKEN→ 视为已登录,直接用于请求头api-token - 为空 / 字段缺失 / 文件不存在 → 视为未登录:在「需求理解」确认创作方案后,再执行「未登录引导」;不要默认生成登录码;仅当用户发送「登录」后再执行「扫码登录流程」
未登录引导(创作方案确认后执行,禁止直接出码)
当创作方案已确认,且 config 中无有效 key 时:
⚠️ 禁止立刻调用 connect/session 生成二维码。
⚠️ 禁止对用户提及 config.json、登录凭证、Token、key 等词。
⚠️ 禁止跳过「需求理解」直接只推登录。
⚠️ 在已展示创作方案后,再说:「你当前尚未登录,请按下方提示登录后创作」——不要说「config.json 中的登录凭证为空」这类话。
必须接着对用户展示(文案必须原样使用):
你当前尚未登录,请按下方提示登录后创作
一句话帮你生成抖音、小红书、Vlog、Reels短视频配乐 / 纯音乐。更支持歌词生成,歌曲生成,歌曲翻唱,伴奏分离等功能,登录即可开始免费创作!
🎵 推荐试听
1. [国风 · 雪落悍刀](https://cdn.growingth.com/pic-upload/8d0f99c7-32d5-4b3e-843b-87a7823ef46f.mp3)
2. [能量 · 悟空传奇](https://cdn3.growingth.com/wav/d11c114f-bb71-406e-9d91-213ed625dc61.mp3)
3. [都市 · 凡人颂](https://cdn3.growingth.com/wav/9a747ad1-52ed-421a-a1b0-301a4d1e7b1a.mp3)
发送「登录」,即可开始微信扫码登录。或者点击 [备用登录](https://xhyue.com/skill/connect)
说明:
1. 推荐试听用可点击链接,禁止把网址明文展示;点击后用【内嵌浏览器】打开
2. 必须记住已确认的创作方案(歌词/风格等),登录成功或用户回复「继续创作」后直接按该方案生成
3. 停在这里等待用户发送「登录」(或「扫码登录」「我要登录」等同意登录的意图)
4. 只有收到登录意图后,才进入下方「扫码登录流程」
登录异常反馈(用户说登录不了 / 打不开 / 看不见时)
当用户表达以下任一意图时,必须立刻回复备用登录链接(可点击,缺一不可),并用【内嵌浏览器】打开备用页:
- 登录不了 / 登不上 / 登录失败
- 页面打不开 / 打不开 / 打不开登录页 / 自动页面打不开
- 看不见 / 看不到二维码 / 没有二维码 / 二维码空白
- 扫不了 / 扫码失败 / 页面是空的
必须原样回复:
没关系,请点击下方「备用登录」,用微信扫码授权后,复制 API Key 发送给智能体:
[备用登录](https://xhyue.com/skill/connect)
同时:
1. 立刻用【内嵌浏览器】打开 https://xhyue.com/skill/connect
2. 明确告诉用户:授权成功后请「复制 API Key,发送给智能体」
3. 若用户发来 API Key:写入 config.json 的 MIAOYIN_API_TOKEN,提示登录成功,可继续创作
4. 若当前仍有有效 sid,可继续按 5 秒间隔轮询原会话
5. 禁止只口头安慰而不给可点击的「备用登录」链接
扫码登录流程(仅用户发送「登录」后执行)
⚠️ 展示二维码 ≠ 登录完成。拿到图片并回复用户后,必须立刻进入步骤 2 自动轮询,禁止停在「请扫码」就结束回合。
步骤 1:创建扫码会话 + 直接回复二维码图片(禁止生成/打开 login.html)
POST https://ai.growingth.com/api/music/skill/connect/session
Headers: Content-Type: application/json; charset=utf-8
Body: { "type": "skill" }
IF 失败:
对用户说(必须原样使用):
「抱歉,登录二维码暂时无法获取。
请点击下方「备用登录」,扫码后复制 API Key 发送给智能体。」
并立刻用【内嵌浏览器】打开:
[备用登录](https://xhyue.com/skill/connect)
→ 若用户发来 API Key,写入 config.json 后继续
打印出具体的响应或状态码,便于检查问题
ELSE:
保存 data.sid(后续轮询必用,必须记住)
将 data.qrcode 解码为**二进制图片**后**覆盖写入**本 skill 目录的 login-qrcode.png
- 接口返回格式固定为:`data:image/png;base64,<payload>`(PNG,不是 JPEG)
- 必须先去掉 `data:image/png;base64,` 前缀,再对剩余字符串做 base64 **二进制解码**
- 必须用二进制方式写入文件(禁止把 base64 原文当文本写入;禁止在对话里直接粘贴 base64 字符串)
- 文件名固定为 login-qrcode.png(禁止写成 .jpg)
- 写入后可用文件头校验:前 8 字节应为 PNG 魔数 `89 50 4E 47 0D 0A 1A 0A`
⚠️ 禁止生成 login.html / 禁止用内嵌浏览器打开 HTML 登录页
⚠️ 必须在对话中直接展示图片,并给出可点击打开图片的链接
对用户回复(结构固定,缺一不可):
1. 用 Markdown 直接嵌入图片(让用户在对话里看见二维码):

2. 同时给出可点击链接(点击即可打开图片):
[点击打开二维码](本 skill 目录/login-qrcode.png 的可用路径)
3. 文案必须原样包含:
「请使用微信扫描上方二维码完成登录。
也可点击「打开二维码」查看大图。
如无法扫码,请点击下方备用登录;授权成功后,请复制 API Key 发送给智能体。」
[打开二维码](login-qrcode.png)
[备用登录](https://xhyue.com/skill/connect)
⚠️ 说完上述话后**必须马上进入步骤 2 开始轮询**,禁止结束本回合。
步骤 2:每 5 秒轮询登录状态(Agent 强制自动执行,用于写入 config.json,不可省略)
循环(必须真正发 HTTP 请求,不能只口头说在等待):
等待 5 秒
GET https://ai.growingth.com/api/music/skill/connect/status?sid={sid}
(或 POST,body: { "sid": "{sid}" })
IF data.status == "success" 且 data.token 非空:
将 token 写入 config.json:
{ "MIAOYIN_API_TOKEN": "<data.token>" }
可删除 login-qrcode.png
说:「✅ 登录成功!您可以继续创作了。
如未自动进入创作,可以回复「继续创作」。」
→ 若用户原本要生成歌曲,直接继续生成;否则等待用户回复「继续创作」
ELSE IF 用户发送「继续创作」:
IF config.json 已有 key:继续执行用户之前的创作需求
ELSE:再查一次 status;成功则写入 config 并继续创作;仍无 key 则引导重新登录或备用登录
ELSE IF 用户发来 API Key / 创作码(备用登录页复制发送):
将内容写入 config.json 的 MIAOYIN_API_TOKEN
说:「✅ 登录成功!您可以继续创作了。
如未自动进入创作,可以回复「继续创作」。」
→ 结束登录流程并继续创作
ELSE IF data.status == "expired":
说:「二维码已过期,正在为您重新获取…」
→ 回到步骤 1(最多自动重建 2 次;仍失败则引导「备用登录」)
ELSE(pending):
继续循环轮询(继续等待 5 秒再请求 status)
最长轮询约 5 分钟;超时则再次引导备用登录
步骤 3:登录成功后
后续所有业务请求的 Header 使用:
api-token: <config.json 中的 MIAOYIN_API_TOKEN>
登录二维码展示(固定方式)
配套文件:本 skill 目录 login-qrcode.png(每次登录只覆盖此 PNG 图片)
Agent 动作清单:
1. 调用 session → 得到 qrcode(data:image/png;base64,...)+ sid
2. 去掉 data URI 前缀 → base64 二进制解码 → 覆盖写入 login-qrcode.png
3. 对话中直接回复图片(Markdown 图片),并给出 [点击打开二维码](login-qrcode.png) 链接
4. 禁止生成或打开 login.html;禁止写成 .jpg;禁止把 base64 原文当文本写入或贴到对话
5. 立刻按 sid 每 5 秒轮询 status,成功后写入 config.json
6. 用户若回复「继续创作」,继续其原本创作需求
⚠️ 登录展示与轮询规则:
- 未登录默认不出码:先需求理解 → 引导文案 + 试听 +「发送登录」
- 用户发送「登录」后才创建会话;直接回图片 + 打开图片链接;禁止 login.html
- 回复图片后必须自动轮询登录态;禁止只甩图就停住
- 备用登录固定保留:https://xhyue.com/skill/connect
- 引导时必须说明:授权成功后「复制 API Key,发送给智能体」
- 用户发来 API Key 后写入 config.json,并提示可继续创作
- 引导扫码时下方必须附上可点击的[备用登录](https://xhyue.com/skill/connect)
- 用户反馈「登录不了 / 打不开 / 看不见」等时,必须立刻回复可点击「备用登录」链接
- 一进入轮询就立刻提示备用登录地址,并提醒复制 API Key 发给智能体 - 间隔固定 5 秒轮询,不得更频繁;必须真实请求 status 接口
- 成功后只提示成功并写入 config.json,不要向用户展示或复述完整密钥
- 登录接口不需要 api-token Header
- 对用户说话时不要提及「密钥 / Token / 配置文件 / config.json / 登录凭证」等词;未登录开场只用:「你当前尚未登录,请按下方提示登录后创作」
- 推荐歌曲与登录链接用 Markdown 可点击链接;「打开二维码」「备用登录」必须可点
对话示例(未登录创作)
用户:帮我生成一首关于夏天的流行歌曲,要有钢琴和吉他
AI: [先做需求理解,不先推登录]
已帮你整理好创作方案:
🎵 风格:流行, Piano, Guitar
🎼 歌词/文案:
关于夏天的流行歌曲
确认后我就开始为你生成。
方案已就绪。你当前尚未登录,请按下方提示登录后创作
一句话帮你生成抖音、小红书、Vlog、Reels短视频配乐 / 纯音乐。更支持歌词生成,歌曲生成,歌曲翻唱,伴奏分离等功能,登录即可开始免费创作!
🎵 推荐试听
1. [国风 · 雪落悍刀]
2. [能量 · 悟空传奇]
3. [都市 · 凡人颂]
发送「登录」,即可开始微信扫码登录。或者点击 [备用登录](https://xhyue.com/skill/connect)
用户:登录
AI: [POST session → base64 二进制解码写入 login-qrcode.png]

请使用微信扫描上方二维码完成登录。
也可点击「打开二维码」查看大图。
[打开二维码](login-qrcode.png)
[备用登录](https://xhyue.com/skill/connect)
[每 5s 轮询 status…]
✅ 登录成功!您可以继续创作了。
[用已确认方案直接 generateCustom,并每 10 秒自动查进度]
开始创作
对话示例:
- 「帮我生成一首关于夏天的流行歌曲」
- 「查一下刚才的歌好了吗」
- 「显示我最近的音乐列表」
- 「获取这首歌的歌词」
业务流程:先「需求理解」(歌词+风格)→ 已登录则生成 / 未登录则引导登录 → 登录后按已确认方案生成。
业务接口(生成、查询、续写、翻唱、合并、视频、WAV、分轨等)的完整参数、决策树与示例见 api.md。
调用前请确认:
1. 已完成需求理解(歌词/风格已确认并记住)
2. 已完成登录(config.json 中有 key)
3. 按 api.md 中对应接口构造请求
4. Header 使用 api-token: ${MIAOYIN_API_TOKEN}(取自 config.json)
⚠️ 调用前自检(每次对话必须逐项确认)
在调用任何需鉴权 API 之前,请在心中默念:
-
[ ] 已先分析用户输入并确认歌词/风格了吗?
→ 没有:先执行「需求理解」,不要直接登录或调接口 -
[ ] config.json 中有非空的 MIAOYIN_API_TOKEN 吗?
→ 没有:创作方案确认后再「未登录引导」;用户发送「登录」后再扫码,不要直接调用业务 API -
[ ] 用户的要求能用现有 API 实现吗?
→ 不能:直接说"抱歉,当前不支持此功能",不要编造 -
[ ] 我知道每个参数的含义和必填性吗?
→ 不确定:查阅 api.md,不要猜测 -
[ ] 我准备好处理可能的错误了吗?
→ 没有:先阅读"错误处理流程"章节
任何一项为"否",都不要继续调用业务 API。
错误提示模板(对用户展示时必须原样使用,不准修改)
| 错误类型 | 对用户说 |
|---|---|
| 余额不足 | "❌ 创作额度不足\n\n您当前的额度不足,暂时无法继续创作。\n请点击下方「去购买额度」用内嵌浏览器打开后完成支付。\n\n如打开网页失败,可进入微信小程序「天工音乐AI写歌」进行支付,微信搜名字或点击「打开小程序码」。" |
| 未登录 | 不要使用本表文案;先执行「未登录引导」,等用户发送「登录」后再扫码 |
| 版权保护 | "❌ 转换失败\n\n这首歌命中了版权保护,暂时无法导出高品质音频。\n建议换一首原创歌曲再试。" |
| 登录失效 | "登录已失效,正在为您重新登录…" → 清空 config.json 中的 MIAOYIN_API_TOKEN 后执行「扫码登录流程」 |
| 服务异常 | "抱歉,服务暂时繁忙,请稍后再试。" |
| 超时 | "操作超时了,请稍后再试。" |
| 网络错误 | "网络好像不太稳定,请检查网络后重试。" |
| 其他失败 | "抱歉,这次没有成功,请稍后再试。" |
⚠️ 禁止使用其他表述;禁止添加"可能原因"、"建议检查"等额外内容;禁止把内部错误原文念给用户。
余额不足 / 付费时额外动作(文案下方必须执行):
- 给出可点击入口(禁止把网址明文展示给用户;点击后用【内嵌浏览器】打开):
- 去购买额度
- 打开小程序码 - 必须用【内嵌浏览器】打开小程序码图片,方便用户微信扫码进入小程序「天工音乐AI写歌」支付
- 付费提示语必须包含:如打开网页失败,可进入微信小程序「天工音乐AI写歌」进行支付,微信搜名字或点击「打开小程序码」
错误类型判断规则(内部使用,勿直接念给用户)
根据返回信息,按以下优先级判断:
- 余额不足:包含"余额不足"、"balance"、"insufficient"等
- 未登录:config 无 key,或包含"token"、"凭证"、"未获得"等(且非单纯业务参数问题)→ 走扫码登录
- 版权保护:包含"matches existing work of art"、"版权"、"copyright"等
- 登录失效:HTTP 401 或 403 → 清空 key 并重新扫码登录
- 服务异常:HTTP 500-599
- 超时:请求超时
- 网络错误:网络连接失败
- 其他失败:以上都不匹配时使用「其他失败」模板
详细错误日志输出(仅供排查,不要当作对用户的提示)
任何请求失败时:先按上表对用户说通俗提示;技术日志可写在后续折叠/备注区,且必须打码敏感信息。
日志输出格式
=== 错误详情 ===
请求:POST https://ai.growingth.com/api
操作:{{操作名称}}
状态码:{{状态码}}
错误:{{错误信息}}
--- 请求头 ---
Content-Type: application/json
api-token: ********
--- 请求体 ---
{
"name": "{{操作名称}}",
"data": { ... }
}
--- 响应头 ---
{{响应头信息}}
--- 响应体 ---
{{响应体内容}}
敏感信息隐藏规则
api-token: xxx→api-token: ********MIAOYIN_API_TOKEN/ config.json 中的完整 token →********- 登录成功后的
data.token只写入文件,不要在对话中完整复述
版本声明
- Skill 版本: 1.2.0
- API 版本: 以实际 API 响应为准
- 兼容性: 不假设 API 格式固定,以实际响应为准
- API 文档: api.md
如果 API 响应包含未预期的字段,原样展示,不要报错。