2026-09-07 · 原文发布日
子工作流:Gemini渲染LinkedIn轮播图并上传
这是一个被子流程,由父工作流传入图片提示词、页码和LinkedIn所有者URN等参数,调用Gemini图像接口按指定比例和尺寸生成单页轮播图。生成失败或超出LinkedIn大小限制会自动重试最多三次,可选把预览图存进Google Drive,再通过LinkedIn Images API初始化上传并提交图片字节,最后只把图片URN和元数据返回父流程。拆成子流程是为了规避n8n的执行超时。需要父工作流配合使用。
原文要点
这是Prakhyat发布的n8n子工作流,必须由父工作流触发。它接收image_prompt、slide_index、author_urn、linkedin_version、image_aspect、image_size及可选alt_text,先校验必填字段缺失即报错停止,再调用Gemini图像接口按指定比例尺寸生成单页轮播图,生成无图或超过LinkedIn大小限制时最多重试三次,可选存预览到Google Drive,随后用LinkedIn Images API初始化上传并提交字节,最终只回传image URN、页码、alt文本和预览链接。拆子流程是为了规避n8n执行超时。
这次做成什么
在n8n里搭一个可独立手动触发的练习版子流程:用测试输入模拟父流程传参,走通"参数校验→生成占位图→模拟初始化上传→返回URN"全链路,不接真实付费接口也能验证字段映射和重试逻辑。
准备什么
- 一个可用的n8n实例(云端或自托管均可,版本支持Execute Workflow Trigger)
- Google Gemini API凭据,且允许调用图像生成端点;练习阶段可先用占位图代替
- LinkedIn OAuth2凭据,需有初始化并上传图片的权限,练习阶段可用HTTP Mock代替
- 可选:Google Drive OAuth2凭据,用于保存预览图
- 准备好父流程要传的六个字段测试值,见下方data材料
具体怎么做
搭建子流程入口与字段校验
新建工作流,第一个节点选Execute Workflow Trigger(被父流程调用时的入口)。练习阶段临时改成Manual Trigger加Set节点,把image_prompt、author_urn、linkedin_version、image_aspect、image_size、slide_index六个字段写死为测试值。后面接一个IF或Code节点做校验:任一必填字段为空就抛Error并停止,错误消息写清缺哪个字段。
接入Gemini图像生成并加重试
加一个HTTP Request节点指向Gemini图像生成端点,请求体里把image_aspect映射到宽高比、image_size映射到尺寸、image_prompt作为生成提示。响应后接Code节点把图像base64转成binary。再接一层重试:用Loop或IF判断"无可用图像或字节数超过LinkedIn上限"时回到生成节点,计数器最多三次,超过即报错。练习阶段可用https://picsum.photos/1080/1350拉一张占位图代替Gemini。
可选保存Drive预览
加一个IF节点判断父流程是否要求存预览。为真时接Google Drive节点上传binary图像到指定文件夹,并取回webViewLink作为预览URL;为假则跳过。练习阶段可整段禁用,只把预览字段置空。
初始化LinkedIn上传并提交字节
第一个HTTP Request以POST调LinkedIn Images API的initialize接口,Header带LinkedIn-Version(用父流程传入的linkedin_version值),body里owner填author_urn,拿回uploadUrl和image URN。第二个HTTP Request向uploadUrl用PUT提交图像字节。练习阶段可用webhook.site之类的Mock地址验证请求格式,不上真LinkedIn。
收敛返回字段给父流程
最后一个Set节点只保留四个字段:image_urn、slide_index、alt_text、drive_preview_url,其余中间数据全部丢弃。子流程到此结束,父流程只拿到这四个值。然后做一个父流程练习:新建第二个工作流,用Execute Workflow节点调用本子流程,确认返回值结构正确。
可直接复制的材料
父流程传参测试数据
本站虚构练习数据,author_urn和linkedin_version需替换成你自己的真实值;linkedin_version按LinkedIn要求填写
{"image_prompt":"深蓝渐变背景上的扁平风插画:一位产品经理在白板前讲解增长漏斗,左上角留出标题空间,专业商务风格","author_urn":"urn:li:person:AbCdEf12345","linkedin_version":"202501","image_aspect":"4:5","image_size":"1080x1350","slide_index":2,"alt_text":"第2页:产品经理讲解增长漏斗的插画","save_preview":false}Gemini生成结果校验与重试的Code节点逻辑
本站独立编写的练习逻辑,大小上限为设定值,需按LinkedIn实际限制调整;接入后接IF节点按_needRetry分支
// 放在Gemini HTTP请求之后,判断是否需要重试
const item = $input.first();
const binaryKeys = Object.keys(item.binary || {});
const MAX_BYTES = 8 * 1024 * 1024; // 练习设定的8MB上限,请以LinkedIn当前限制为准
let needRetry = false;
let reason = "";
if (binaryKeys.length === 0) {
needRetry = true;
reason = "Gemini未返回可用图像";
} else {
const size = item.binary[binaryKeys[0]].data.length * 0.75; // base64估算字节
if (size > MAX_BYTES) { needRetry = true; reason = "图像超过大小限制"; }
}
const attempt = (item.json._attempt || 0) + 1;
if (needRetry && attempt > 3) {
throw new Error("重试三次仍失败:" + reason);
}
return [{ json: { ...item.json, _attempt: attempt, _needRetry: needRetry, _reason: reason } }];LinkedIn初始化上传请求体
本站按原文所述Images API初始化动作编写的示意请求体,owner替换为author_urn;确切端点路径与字段名需在LinkedIn官方文档核对,原文未给出完整URL
{"initializeRequest":{"owner":"urn:li:person:AbCdEf12345"}}输入与输出示例
本站虚构演示,未真实调用Gemini或LinkedIn,URN为编造格式示例,非原作者运行结果
输入
用上面的测试数据:image_prompt为"深蓝渐变背景上的扁平风插画:一位产品经理在白板前讲解增长漏斗",image_aspect为4:5,image_size为1080x1350,slide_index为2,save_preview为false。对应输出
子流程最终返回给父流程的JSON:{"image_urn":"urn:li:image:D4D22AQG_demo7x9kz","slide_index":2,"alt_text":"第2页:产品经理讲解增长漏斗的插画","drive_preview_url":null}。中间过程:第1次生成图像约1.8MB通过校验,未触发重试;因save_preview为false跳过Drive节点;LinkedIn初始化后PUT上传返回成功状态。做完检查这些
- Execute Workflow Trigger后第一关校验:把image_prompt清空运行,流程应立即报错且错误消息指明缺image_prompt
- 故意让Mock返回无图像的响应,流程应自动重试且第四次直接抛错,执行日志里能看到_attempt从1递增到3
- 最终Set节点输出只含image_urn、slide_index、alt_text、drive_preview_url四个字段,不含任何base64或中间数据
- 父流程用Execute Workflow调用后,能在父流程里直接读到image_urn并用于后续发帖节点
容易卡住的地方
- 它是子工作流,单独运行没有触发入口;没有父流程传参时六个必填字段全空,会直接停在校验报错
- 拆子流程的目的是规避n8n执行超时,若你的实例超时时间充裕,也要评估是否值得为此维护两个流程
- LinkedIn-Version由父流程传入而非子流程写死,父子两处忘记同步更新会导致API拒收
- Gemini图像端点、LinkedIn上传可能产生各自费用,本站练习用占位图和Mock不产生费用,真实接入前需自行确认计费
- 重试上限三次写死在逻辑里,若Gemini持续返回超限图像应检查尺寸参数而非无限重试
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Render LinkedIn carousel slides with Google Gemini and Google Drive
- 原作者
- Prakhyat
- 原始发布日期
- 2026-09-07T10:05:58.358Z
- 来源
- https://n8n.io/workflows/19316