2026-10-08 · 原文发布日
n8n模板:Telegram发视频需求,AI生成Zvid草稿、报价并渲染成MP4
Telegram消息触发后,工作流校验发送者身份并记录每个会话的记忆,调用Zvid的MCP工具规划视频、套模板生成可编辑草稿,返回草稿链接和带签名的渲染报价。用户回复批准后提交一次渲染,用Zvid节点轮询该任务直到完成,只放行完成的MP4链接,回传到Telegram并可供下载。每次渲染有积分上限,超量模板可改用静态编辑器项目。模板免费,需自托管n8n、Zvid账号和OpenRouter。
原文要点
来源是 Zvid 免费模板,要求自托管 n8n 并安装 @zvid/n8n-nodes-zvid,Zvid 凭据用 https://app.zvid.io/api-keys 与 Base URL https://api.zvid.io,OpenRouter 聊天模型示例为 openai/gpt-4.1 且即使不渲染也可能产生模型费用。Telegram 触发后校验发送者、按 chat 隔离记忆,MCP 端点保留 profile=creator 与 maxRenderCredits;先生成可编辑草稿和签名报价,批准后只提交一次渲染,用原生 Zvid 节点等同一个已接受任务,媒体守卫只放行完成的 Zvid MP4 URL。
这次做成什么
做一条「文字需求→可编辑视频草稿→报价→批准→单次渲染→回传 MP4」的练习流水线。本站独立方案用本地 Test brief 先跑三轮对话,确认草稿链接、报价字段和渲染状态机,再接 Telegram;避免把状态检查误改成再次付费渲染。
准备什么
- 自托管 n8n 且已开启 Community nodes 安装权限
- Zvid 账号含渲染积分,并能创建 API key
- OpenRouter 凭据,模型可用性以账号为准
- 本地测试用 Test brief,或 Telegram bot 与公网 webhook
具体怎么做
安装节点与凭据
在 Settings → Community nodes 安装 @zvid/n8n-nodes-zvid;若按钮不可用请 owner/admin 安装。新建 Zvid 凭据,API key 从 https://app.zvid.io/api-keys 获取,Base URL 固定 https://api.zvid.io。OpenRouter 单独建凭据并接到聊天模型,模板参考 openai/gpt-4.1,实际模型名以你的 OpenRouter 列表为准。
配置 MCP 与上限
内置 MCP Client Tool 指向 https://mcp.zvid.io/mcp,Header Auth 名称用 x-api-key,值填 Zvid key;端点 URL 中保留 profile=creator 和 maxRenderCredits 表达式。练习阶段把 maxRenderCredits 设为 25 或更低,allowedChatIds 先留空并禁用 Telegram,使用 Test manually。
三轮本地对话
第一轮在 Test brief 输入虚构 brief,期望返回 actual saved draft link、signed quote、estimatedCredits、quoteExpiresAt;第二轮只改文案,仍只更新草稿不渲染;第三轮输入明确批准语,例如「同意按报价渲染」,才进入 submit render。每轮记忆按 chatId/testConversationId 分开,防止串戏。
只等同一个任务
批准后调用 Zvid 渲染一次,记录 accepted jobId;后续等待必须用原生 Zvid 节点轮询该 jobId,直到 status=completed 且返回 mp4Url。禁止在 Wait/Loop 里再放一个渲染节点;失败、超时或被拒时输出 failure payload,不自动重烧积分。
媒体守卫与交付
放行前检查 URL 主机与路径前缀属于 completed Zvid MP4,示例预览、静态编辑器项目链接、外部短链都拦截。Telegram 交付只在 allowedChatIds 内回复;本地则在 Watch video → Binary → data → View 查看文件。manualPreviewJobId 保持空,allowSameMessageApproval=false。
可直接复制的材料
Zvid 流水线测试配置
本站独立练习配置;URL 前缀、模型名、积分上限需在 Zvid/OpenRouter 控制台和原模板表达式核对,示例前缀只用于守卫演示。
{
"zvid": {"baseUrl": "https://api.zvid.io", "mcpUrl": "https://mcp.zvid.io/mcp?profile=creator&maxRenderCredits=25", "headerAuthName": "x-api-key"},
"openrouter": {"model": "openai/gpt-4.1", "note": "模型调用即使未渲染也可能计费"},
"guards": {"maxRenderCredits": 25, "allowSameMessageApproval": false, "manualPreviewJobId": "", "preferDirectDraft": false, "videoUrlPrefixes": ["https://cdn.zvid.io/completed/", "https://api.zvid.io/files/completed/"]},
"telegram": {"enabled": false, "allowedChatIds": []},
"statuses": {"draft": ["draft_saved", "quote_signed"], "render": ["accepted", "processing", "completed", "failed"]}
}视频需求测试 CSV
本站合成数据,无真实客户信息;在 Test brief 逐行粘贴,chatId 用于验证记忆隔离。
turn,chatId,brief,expect
1,local-001,"15 秒竖屏,给独立咖啡店新品冰燕麦拿铁做开场,明亮、手写字幕、不要人物正脸",draft_and_quote_only
2,local-001,"把标题改成周二限定,结尾加门店地址,保持同一草稿",draft_updated_no_render
3,local-001,"同意按报价渲染,预算不超过 25 积分",submit_one_render_then_wait
1,local-002,"10 秒横屏宠物零食广告,轻快音乐,突出无谷物",draft_and_quote_only
输入与输出示例
本站虚构演示,链接、签名、任务号和积分均为格式示例,未提交真实渲染。
输入
Test brief turn1: {"chatId":"local-001","text":"15 秒竖屏,给独立咖啡店新品冰燕麦拿铁做开场,明亮、手写字幕、不要人物正脸"}对应输出
turn1 {"draftUrl":"https://app.zvid.io/editor/draft_demo_001","quote":{"quoteId":"q_7f21","credits":18,"signature":"sig_demo","expiresAt":"2026-10-20T10:00:00Z"},"renderJob":null}; turn3 {"renderJob":{"jobId":"job_demo_9","status":"completed","mp4Url":"https://cdn.zvid.io/completed/job_demo_9.mp4"},"creditsSpent":18}做完检查这些
- 未批准前任何 turn 都不得创建 renderJob,只能返回草稿与报价
- 同一 chatId 第二轮应复用或更新同一草稿,而不是把旧需求当成新视频
- 批准后系统只记录一个 accepted jobId,轮询节点输入必须引用该 jobId
- 非 completed 状态、示例预览 URL 或非白名单前缀必须被媒体守卫拦截
- OpenRouter 失败但 Zvid 未调用时,应返回模型错误且不消耗渲染积分
容易卡住的地方
- 把「查状态」误接成「再次渲染」会重复扣积分,这是本流程最危险接线
- approval 是代理指令不是硬授权锁,仍需服务端 maxRenderCredits 兜底
- 可复用模板配额满时才考虑 preferDirectDraft=true,且静态编辑器项目仍有限制
- Telegram 未配置公网 webhook 时不要激活触发器,本地用 Test manually
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Create Telegram video briefs with OpenRouter GPT-4.1 and Zvid
- 原作者
- Zvid
- 原始发布日期
- 2026-10-08T15:07:05.535Z
- 来源
- https://n8n.io/workflows/20676