2026-09-14 · 原文发布日
影视音乐Cue版权清查审批流程(付费模板)
付费n8n模板:监视Gmail中带cue sheet附件的邮件,OpenAI抽取曲目、地区、载体等结构化权利元数据,再调用PRO作品登记与母带权利两个HTTP接口交叉核对,算出权利缺口与风险状态,生成清查包邮件送音乐总监,经Webhook等待人工批准后才提交制作系统,否则把缺口清单发给版权协调员;证据JSON存Google Drive并记审计表。
原文要点
原工作流每分钟监视Gmail,筛主题含"cue sheet"或"music clearance"且带附件的邮件;用OpenAI(作者标注gpt-5-mini,备选gpt-4o-mini)抽取production、cues、territories、media、term等权利元数据;调两个HTTP接口查PRO作品登记与母带权利归属;合并后算权利缺口(作者份额合计缺失、母带归属缺失、sync报价缺失)与风险状态;生成清查包JSON邮件送音乐总监,Wait节点等webhook回{"approved":true|false},批准则HTTP提交制作系统,否则把缺口清单发给版权协调员;证据JSON存Google Drive并向Sheets的"Audit Log"追加一行。外部调用带3次重试与2秒退避,作者称配置约25–40分钟。
这次做成什么
搭一条可演示的"邮件进入→权利抽取→双接口交叉核对→缺口计算→人工审批→归档"清查流水线。因原模板需付费购买,以下为本站独立设计的练习方案:用测试邮件数据和mock接口代替真实Gmail与权利库,买模板后再按其节点图替换为正式凭证与端点。
准备什么
- n8n自托管(Docker/npm)或n8n Cloud v1.0以上环境
- 一个OpenAI API Key(练习用账号内可用的chat模型)
- 一个Google账号,用于Gmail测试收件、Drive文件夹和含Audit Log工作表的Sheets
- 两个可访问的权利查询HTTP接口,或使用本站mock数据代替
- 原模板为付费商品,需购买后才能按其真实节点和字段核对
具体怎么做
准备测试输入
新建工作流,先用Manual Trigger或Webhook测试节点代替Gmail Trigger,粘贴下方测试cue sheet JSON作为邮件正文与附件内容的替身;若已购原模板,则按其中文档把触发器换成Gmail Trigger,过滤主题含cue sheet或music clearance且带附件。
配置OpenAI抽取
添加OpenAI凭证,挂一个LLM/Information Extractor节点,粘贴下方抽取提示词,要求模型只输出固定结构的JSON:production、territories、media、term、cues数组(每曲含title、writers、publishers、share、duration_seconds、usage_type、sync_quote)。
交叉核对权利接口
用两个HTTP Request节点,分别指向PRO作品登记接口与母带权利接口(Header Auth凭证)。练习阶段把URL指向你自己的mock服务或直接用上一步数据;购买模板后需把rights.example、labels.example等占位域名替换成真实端点,否则会请求失败。
合并并计算缺口
用Merge节点把抽取结果与两条接口的返回合并,再接Code节点运行下方缺口计算JS:逐cue检查作者份额合计是否等于100、是否缺master_owner、是否缺sync_quote,输出gaps数组与risk_status(clear或needs_follow_up)。
生成清查包并送审
再经一次LLM调用把合并数据整理成清查包JSON(保留gaps),用Gmail节点发给练习收件人(自己)扮演音乐总监;接Wait节点,模式选webhook恢复,记下resume URL,审批系统需POST {"approved":true} 或 {"approved":false}。
分支处理与归档
IF节点按approved分流:true→HTTP提交制作系统(练习改为写一行Sheets模拟);false→Gmail把gaps清单发给版权协调员角色邮箱。最后Google Drive节点上传最终证据JSON到目标文件夹,Google Sheets节点向Audit Log追加一行(时间、production、risk_status、审批人、结果)。
可直接复制的材料
权利元数据抽取提示词
本站独立编写的抽取提示词,接入LLM节点后需在其后追加实际邮件正文变量;原模板真实提示词需购买后核对。
你是音乐版权清查助手。从下面的cue sheet文本中抽取结构化权利元数据,只输出一个JSON对象,不要输出任何解释文字。结构为:{"production":"作品名","episode":"集号或null","territories":["地区代码"],"media":["载体类型"],"term":"授权期限","cues":[{"cue_number":1,"title":"曲名","writers":[{"name":"作者","share":50}],"publishers":["出版社"],"duration_seconds":60,"usage_type":"background或theme或source","sync_quote":金额数字或null,"master_owner":"母带权利人或null"}]}。规则:文中没有的字段填null,不要编造;share必须是数字;territories用ISO两位国家码,如CN、US;无法确定时填[]或null。cue sheet文本如下:缺口计算Code节点脚本
本站独立示例逻辑,作者称原模板可在Calculate Clearance Gaps节点里自定义阈值,具体实现以购买后的模板为准。
// n8n Code节点(JavaScript),输入为合并后的cue数据与接口证据
for (const item of $input.all()) {
const d = item.json;
const gaps = [];
for (const cue of d.cues || []) {
const total = (cue.writers || []).reduce((s, w) => s + (Number(w.share) || 0), 0);
if (total !== 100) gaps.push({cue_number: cue.cue_number, gap: "writer_share_total", detail: "份额合计" + total});
if (!cue.master_owner) gaps.push({cue_number: cue.cue_number, gap: "missing_master_owner", detail: cue.title});
if (cue.sync_quote === null || cue.sync_quote === undefined) gaps.push({cue_number: cue.cue_number, gap: "missing_sync_quote", detail: cue.title});
}
item.json.gaps = gaps;
item.json.risk_status = gaps.length === 0 ? "clear" : "needs_follow_up";
}
return $input.all();测试cue sheet数据
本站虚构合成数据,仅用于练习;第二首cue故意缺sync_quote与master_owner以触发缺口分支。
{"production":"夜航北纬","episode":"E03","territories":["CN","US"],"media":["streaming","broadcast"],"term":"5年","cues":[{"cue_number":1,"title":"雨巷口琴","writers":[{"name":"陈一鸣","share":60},{"name":"李荞","share":40}],"publishers":["海潮音乐出版"],"duration_seconds":95,"usage_type":"background","sync_quote":8000,"master_owner":"海潮唱片"},{"cue_number":2,"title":"旧灯塔","writers":[{"name":"周野","share":100}],"publishers":["远岸版权"],"duration_seconds":140,"usage_type":"source","sync_quote":null,"master_owner":null}]}审批回调与审计列配置
本站方案参考值;approved字段名与原模板一致为approved,其余列名可按模板内Audit Log实际表头调整。
{"webhook_payload":{"approved":true,"approver":"supervisor@example.com","comment":"份额已核实"},"audit_log_columns":["timestamp","production","episode","cue_count","gap_count","risk_status","approved","approver"],"gmail_recipients":{"supervisor":"你的测试邮箱","rights_coordinator":"你的第二测试邮箱"}}输入与输出示例
本站虚构演示输出,为示例脚本按上述输入的推算结果,未真实运行原模板。
输入
使用上方测试cue sheet数据,其中"旧灯塔"一曲缺sync_quote且master_owner为null,"雨巷口琴"作者份额合计100。对应输出
缺口计算输出:{"gaps":[{"cue_number":2,"gap":"missing_sync_quote","detail":"旧灯塔"},{"cue_number":2,"gap":"missing_master_owner","detail":"旧灯塔"}],"risk_status":"needs_follow_up"};随后流程仍生成清查包送审,审批人回{"approved":false}时走缺口清单邮件分支,Audit Log追加一行approved=false。做完检查这些
- 抽取节点输出能通过JSON解析且包含production、territories、cues三个键,缺失字段为null而非省略
- 当某cue的writers份额合计为100且master_owner、sync_quote齐全时,gaps数组为空且risk_status为clear
- 向Wait节点的resume URL POST {"approved":true} 后执行进入提交分支,POST false则进入缺口邮件分支
- 执行结束后Google Drive目标文件夹新增一个证据JSON,Sheets的Audit Log工作表恰好追加一行且risk_status与执行结果一致
容易卡住的地方
- 原模板是付费商品,本页不是原工作流文件,节点名与按钮位置需购买后按模板内文档核对
- 作者标注模型为gpt-5-mini(备选gpt-4o-mini),你的账号是否可用该模型需在OpenAI控制台确认,调用另计费
- rights.example、labels.example、production.example是占位域名,不替换真实端点HTTP节点必然报错
- Wait节点的resume webhook URL要在工作流激活后才稳定有效,测试执行时URL可能不同
- 审批回包的字段名大小写必须是approved,布尔值true/false不能写成字符串
- 练习勿用真实客户邮件与真实权利库凭据,用合成数据和隔离测试邮箱
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Gate film and TV music cue rights clearance with Gmail, OpenAI, and Google Drive/Sheets
- 原作者
- Swapnil Mandloi
- 原始发布日期
- 2026-09-14T15:12:44.819Z
- 来源
- https://n8n.io/workflows/19579