点击上方卡片关注 不要错过精彩文章
持续更新有关Agent的最新搭建思路和工作流分享,希望能给您带来帮助,点一点上方的🔵蓝色小字关注,你的支持是我最大的动力!🙏谢谢啦!🌟"
大家好!我是舰长👏n8n自动化工作流的社区节点,资源是非常的丰富,在之前舰长分享过微信自动化,也是受到很多小伙伴的喜欢。
微信自动化就是用的社区节点,既然社区节点这么好用,那还有什么比较好用的社区节点呢?这几天舰长一直在逛n8n的社区节点,让舰长发现了一个新的社区节点:公众号草稿箱的节点
本次,就结合这个社区节点打造一个漫画一条龙的自动化工作流,实现提供主题——自动生成配图——生成公众号格式——传输进公众号草稿箱。
搭建n8n工作流,前期准备不能少:
1.要部署一个自己n8n:
乌炸天!给自己电脑免费部属一套Agent 智能体搭建平台,万事不求人
2.把社区节点添加到自己的n8n中
社区节点的网址:https://www.npmjs.com/package/n8n-nodes-wechat-offiaccount
主页左下角打开设置中心
点击社区节点——右上角进行添加
添加指令为:
3.获取自己的公网IP
在使用微信公众号草稿箱的社区节点时,想要成功导入到草稿箱,是需要设置IP白名单的,这个IP就是网络请求的IP。
打开浏览器直接搜索"我的公网IP",不要使用舰长的,自行去各自的浏览器搜索。如果白天在公司,晚上在家;每当换地方的时候,就需要重新获取一下公网IP,这个是根据网络来决定的。
获取到IP后打开公众号的开发后台,再IP白名单处加上你的公网IP即可
4.获取公众号的开发者ID和开发者密码(AppSecret)
先获取到,注意要保存,开发者密码只会显示一次
完成这些准备工作后,正式开始搭建n8n工作流
以下舰长会对每一个节点用处和思路分享给大家,理解搭建的核心思路,有条件的可以结合舰长的工作流,手动搭建一次。同样本套工作流的源码,舰长会一并给到大家,文章结尾查看领取方式。
核心思路
这是一个最终导入草稿箱的一个格式,在这个格式里,我们需要提供标题、作者、正文内容(html代码)、封面图ID
整个n8n的流程都是为了完成标题、正文内容(html代码)、封面图ID这三种内容:
在工作流从前往后看是很不理解的,很多节点都是因为需要才设置的,比如上传到公众号"素材库节点"
公众号"素材库节点"需要特定的文件二进制格式,就需要一个转成文件的节点在前面做一下转换
但转成文件节点又需要base64码,所以http请求节点和编辑字段节点就是为了获取到图片的base64码
接下来进行工作流的节点拆解:
触发节点
也就是当我们创建工作流后第一个添加的节点,添加一个表单节点
表单节点是适合直接提供内容的一个节点,其余的触发节点不是最佳选择
在表单节点里添加一个变量,设置变量名为"input"其余不填
AI agent节点
智能体大模型节点,这个节点的作用就是根据表单节点提供的值,进行文案、画面、分镜的输出
Source for Prompt(提示源、用户消息):选择Define below(自定义输入)
prompt:直接复制舰长的这个格式
Require Specific Output Format:是输出的特定格式——开启一下
接着添加一下系统回复(也就是系统提示词)
# 角色你是一名漫画大师,擅长根据用户输入的主题,为用户创作出生动的漫画,漫画需要创作4个画面,每个画面有独特的深意:"起、承、转、结"的节奏
## 技能
1. 当用户给出主题后根据"起、承、转、结"的节奏为用户创作四个画面。
2. 前三格精心铺陈蓄势,巧妙营造冲突或误解。第四格设计出令人意想不到的反转效果。
3. 以极简风格进行创作,画面轻松幽默、充满趣味。整体采用平面化表现,用简单的线条勾勒,不添加多余的装饰或阴影,背景设定为白色。
4. 漫画中正常有一男一女进行对话组成,你需要输出画面的旁白、描述、以及男女之间的对话。
5. 描述一定要把环境,以及人物动作描绘清楚,当主题在咖啡厅中坐着的时候,每一个描述尽量都需要把这个"咖啡厅中坐着"添加到描述中,画面尽量生动。
## 输出格式:
"output": [ { "narrator": "相亲开始,女生优雅地坐下并开口询问。", "connet": "女:你在哪租的房啊?", "describe": "在舒适的咖啡厅中,女生穿着精致的连衣裙,微笑着拉椅子坐下,男生对面端坐,环境温馨,灯光柔和。" }, { "narrator": "男生略显尴尬地回应。", "connet": "男:在偏远郊区。", "describe": "咖啡厅中,男生挠头,表情紧张,女生眉头微微皱起,手持咖啡杯,背景简洁白色。" }, { "narrator": "女生立刻表现出强烈不满。", "connet": "女:没房还敢来相亲,我们不合适!", "describe": "在咖啡厅的座位上,女生双手交叉胸前,语气严厉,男生惊讶地张大嘴巴,环境轻松幽默。" }, { "narrator": "男生平静地揭示出人意料的反转。", "connet": "男:我家在春山墅(富人区)。", "describe": "咖啡厅中,男生自信微笑,女生目瞪口呆,手捂嘴,背景纯白,线条简单勾勒出反转的趣味。" } ]
目前最方便使用的就是deep seek模型,所以先去deepseek开放平台获取一个API_KEY
地址:https://platform.deepseek.com/
增加一个输出解析器
这是Json格式为:格式乱的话,让豆包去重新生成一次
[ { "narrator": "相亲开始,女生优雅地坐下并开口询问。", "connet": "女:你在哪租的房啊?", "describe": "在舒适的咖啡厅中,女生穿着精致的连衣裙,微笑着拉椅子坐下,男生对面端坐,环境温馨,灯光柔和。" }, { "narrator": "男生略显尴尬地回应。", "connet": "男:在偏远郊区。", "describe": "咖啡厅中,男生挠头,表情紧张,女生眉头微微皱起,手持咖啡杯,背景简洁白色。" }, { "narrator": "女生立刻表现出强烈不满。", "connet": "女:没房还敢来相亲,我们不合适!", "describe": "在咖啡厅的座位上,女生双手交叉胸前,语气严厉,男生惊讶地张大嘴巴,环境轻松幽默。" }, { "narrator": "男生平静地揭示出人意料的反转。", "connet": "男:我家在春山墅(富人区)。", "describe": "咖啡厅中,男生自信微笑,女生目瞪口呆,手捂嘴,背景纯白,线条简单勾勒出反转的趣味。" } ]
Split Out节点
拆分节点:因为前置的AI Agent节点输出的是对象数组格式,用Split Out节点把数组拆分在导入到后续的循环节点中使用。
output就是前面一个AI Agent节点的输出变量名为"output"
Loop Over Items节点
循环节点的原样如下图,后续需要循环的节点就需要替换原样里的"替换我"
Edit Fields节点
编辑字段节点:通过编辑字段,自定义输入,也可以将变量和自定义内容进行组合
设置一个字段名为"prompt";下方的内容中{{ $json.describe }}和{{ $json.connet }}就是变量内容
HTTP Request节点
用这个节点去调用豆包的4.0模型为我们制作动漫图片
需要登入火山引擎去获取调用的指令:https://console.volcengine.com/ark/region:ark+cn-beijing/model/detail?Id=doubao-seedream-4-0
这个网址打开就是dubao-seedream-4-0模型的使用界面,打开模型推理
点击选择此APi
改成图生图模型后复制指令
打开n8n的HTTP Request节点
在Import cURL command 导入 cURL 命令
导入之后都是字段类型的,需要切换为Using JSON格式来使用
修改Specify Body 指定正文为Using JSON格式,然后粘贴。(如果格式有问题,可以让大模型节点重新整理一下)
image后面的链接就是图片链接,把需要参考的图片通过一些工具获取到在线链接,并替换指令中的链接。
{ "model": "doubao-seedream-4-0-250828", "prompt": "{{ $json.prompt }}", "image": "https://ve-template-0920.oss-cn-shanghai.aliyuncs.com/uploads/1760684251851_dl1gkpqvmrm.png", "sequential_image_generation": "disabled", "response_format": "b64_json", "size": "2K", "stream": false, "watermark": true}
第二个Edit Fields节点
作用是提取http节点返回的图片base64码,供后续的节点使用。
设置一个字段名为data
Convert to File节点
将base64图片码换成文件,供后续上传公众号素材库使用
写上两个data
Media:uploadOther media
这个节点就是添加进来的社区节点,是上传图片到素材库的图片,同时还会返回一个新的图片链接,这个链接就是后续需要用到的链接。
在节点中搜索"wechat"找到"wechat offical Account node"节点
该节点的工具比较多,需要仔细寻找一下"素材新增其他类型永久素材"
给节点配置凭证:也就是准备阶段保存的公众号里的开发者ID和密钥
按照图中进行配置
code代码节点
这个节点的作用就是提取循环里第一次循环中获取到的草稿箱素材ID,存入草稿箱需要使用到一个封面的图片,通过code节点提取一张图片的media_id作为封面链接
// 获取所有输入项const allItems = $input.all();// 初始化结果变量let firstMediaId = null;// 检查是否有输入项,若有则提取第一个media_idif (allItems && allItems.length > 0) { const firstItem = allItems[0]; // 确保item包含json属性且json中存在media_id if (firstItem.json && firstItem.json.media_id) { firstMediaId = firstItem.json.media_id; }}// 输出结果(n8n通常期望输出包含在json对象中)return [{ json: { firstMediaId: firstMediaId } }];
第二个code代码节点
传输进公众号的格式需要用html格式,这样传输进去的内容更规范。所以用code节点生成html代码
let htmlTemplate = `<!DOCTYPE html><html lang='zh-CN'><head><meta charset='UTF-8'><meta name='viewport' content='width=device-width, initial-scale=1.0'><title>图片展示</title><style>.img-container{display:flex;flex-direction:column;align-items:center;}.img-container img{max-width:100%;height:auto;margin-bottom:10px;}</style></head><body><div class='img-container'><img src='http://mmbiz.qpic.cn/sz_mmbiz_jpg/baGkwzp45MWhTv8TvhVThyfk2jRiavneCJbej0kvqGmcneJ91s9Koibsj8icsQGSTPxPCmmOIsTRKX0eJgVbicFSgg/0?wx_fmt=jpeg' alt='图片1'><img src='http://mmbiz.qpic.cn/sz_mmbiz_jpg/baGkwzp45MWhTv8TvhVThyfk2jRiavneCh3ZbibBGA2H6dZGMjdLW7YTlLzfibyEO9ZGdOSjP3xqSegicFF24iahwZQ/0?wx_fmt=jpeg' alt='图片2'><img src='http://mmbiz.qpic.cn/sz_mmbiz_jpg/baGkwzp45MWhTv8TvhVThyfk2jRiavneC37wWJj71ytysbDj6raY7Fic9P0ibu0zoBnm9r1unac1fiax8zkGylHicTQ/0?wx_fmt=jpeg' alt='图片3'><img src='http://mmbiz.qpic.cn/sz_mmbiz_jpg/baGkwzp45MWhTv8TvhVThyfk2jRiavneCLfB2xbUhjX0vSImRPLjiaibPtclibAW9eVz6c3k9hzh22vVPBXjb2dXFA/0?wx_fmt=jpeg' alt='图片4'></div></body></html>`;
// 获取Loop Over Items节点传来的数据const allItems = $input.all(); // 获取所有输入项const inputArray = allItems.map(item => item.json.url); if (!allItems || allItems.length === 0) { throw new Error('没有传入有效的输入项。请确认输入数据已正确连接。');}// 处理每个输入项,并将对应的图片链接替换进模板中allItems.forEach((item, index) => { if (index < 4) { // 假设模板有4个img标签 // 从输入项中获取url const imageUrl = item.json.url; // 用于调试:查看每个图片链接是否正确获取 console.log(`Replacing image ${index + 1} with URL:`, imageUrl); // 构建正则表达式,动态替换图片链接(注意转义双引号) const regex = new RegExp(`(<img src=\\")图片${index + 1}的路径(\\" alt=\\"图片${index + 1}\\">)`); // 使用正则替换匹配的内容 htmlTemplate = htmlTemplate.replace(regex, `$1${imageUrl}$2`); }});// 输出替换后的完整HTML代码return [{ json: { html: htmlTemplate } }];
第三个Edit Fields节点
通过提取输入的主题内容作为标题进行输出,同样也用自定义加变量的方式去组合输出
设置字段名为title,输入内容:
Draft:add draft
存入公众号草稿箱节点
在节点中搜索"wechat"找到"wechat offical Account node"节点
同样的工具比较多,需要仔细寻找一下
写入文章多对象内容格式:
主要有四个参数:
[ { "article_type": "news", "title": "{{ $('Edit Fields2').item.json.title }}", "author": "福建AIGC", "content": "{{ $('Code').item.json.html }}", "thumb_media_id": "{{ $('Code1').item.json.firstMediaId }}", "show_cover_pic": 1, "need_open_comment": 1, "only_fans_can_comment": 0, "auto_publish": false, "publish_time": "immediate" }]
到此,工作流的搭建部分就分享这么多,但是在搭建的时候肯定会遇到各种问题,舰长简单阐述一下:
1.公众号节点连接失败,或者运行失败的原因——公网IP没有设置好
2.Deepseek模型:一定要配置,配置好一次之后就不需要重复配置,所以deepseek的APi时间要是永久的
3.HTTP请求节点中的图片链接最好替换为自己的,图片需要变成在线的网址链接
4.文章中的资料代码和指令尽量不要直接拿走去用,舰长会把整个工作流文件送给大家参考学习,在工作流中去复制对应的代码或者指令
本次的分享就到,您有收获请麻烦您一键三连,搭建卡点可以加入舰长的交流群进行交流,有关本文中的源码工作流的,评论"1022"添加下方二维码领取🙏
关注公众号并添加舰长微信,领取智能体学习资料,并参与智能体技术直播讲解
另外非常欢迎大家加入[唐舰长AI落地智能体交流群],主要交流群每周都会进行公益直播教大家搭建AI智能体工作流
没有评论:
发表评论