大家好,我是 MAI麦造
前段时间有朋友找我咨询 ==n8n 中如何自动发公众号的问题==,刚好发现了一些新手可能会遇到的坑,所以这里分享一下!
!Note\] **我用了两种方法来实现,分别是:** * 自己手动配置 http 节点,实现公众号接口。 * 使用社区节点

各有自己适合的场景,所以根据自己的需求来选择即可。
不过都需要用到公众号的官方接口,所以先需要在公众号后台进行一下配置!
公众号后台配置
1. 获取 开发者 ID 和 开发者密码
通过设置与开发------开发接口管理------账号开发信息获取。
第一次可能需要申请一下。 不过基本都能过。
!note\] **开发者密码(AppSecret)** 是敏感信息,后台只会显示一次,请妥善保存,如果遗忘只能重置!

2. 配置白名单
由于公众号的安全限制,限制必须在白名单内的 IP 才能访问。
所以需要把你的 IP 添加进来。

这里需要注意一下, 建议这一步都在 n8n 中配置一个 http 节点来看你的请求 IP!
这个方法也适合你的 n8n 通过其他方式部署,你不知道 IP 的情况。
很多人在最后一步上传草稿的时候,出现上传不成功的问题,原因就是白名单配置不正确。

n8n 中配置一个网络请求节点,使用GET方法,URL是:http://httpbin.org/ip
这样可以确保你的 n8n 的出口 IP 不会出错!
方法 1:手动配置节点

这个方法相对来讲复杂一些,配置的节点比较多,
比较适合你的 n8n 没法安装社区节点的场景。
这里实际需要调到公众号的 3 个接口,分别是:
- 获取 token
- 上传封面素材
- 上传到草稿箱
这里我设置了一个 mock 数据的节点,来模拟一下真实的场景。 里面总共是 3 个字段:content、title、author
大家根据自己的实际情况调整。

token 是微信用来鉴权的,有过期时间,所以每次运行都要调用一次。
接口主要就 3 个参数:
grant_type:值是固定的client_credentialappid和secret:是刚刚获取到的开发者 ID和开发者密码

接下来是上传封面:

这里总共用了 3 个节点,分别是:
- 下载封面图。 也可以从本地路径读取
- 上传图片
- 解析上传结果,拿到
media_id
在下载封面图这里需要注意一下,因为下载完之后是一个文件, 
所以在后面一个上传图片的节点中, 需要选择 n8n binary file, 在 Input Data Field Name 中只需要填 data 即可!

这个参数跟其他节点的拖拽方式不同,只能手动输入,且没有提示!
如果不知道这个的话,可能会花比较多的时间来调试。
(本人石锤😭)
大家也可以直接使用我的模板,没这个烦恼哈哈~
接下来就是解析结果,拿到响应中的 media_id:

因为接口返回的是一个JSON格式的字符串,所以需要解码一下才可以拿到里面的值。
!TIPS\] 这里有一个小技巧,可以使用了一个 Set 节点,在当中使用 JS 的表达式来做解析。 就不用配置 Code 节点了,简单又快速!
然后就到最后一步,上传草稿了!
这个节点的核心就是上传的内容: 
基本格式如下:
bash
{
"articles": [
{
"title": "{{ $('mock 数据').item.json.title }}",
"author": "{{ $('mock 数据').item.json.author }}",
"content": "{{ $('mock 数据').item.json.content }}",
"thumb_media_id": "{{ $json.media_id }}",
"need_open_comment":1,
"only_fans_can_comment":0
}
]
}
这里还支持更多的字段地址,具体字段看官方文档: 
如果前面的一切都没有问题,那么节点这个运行完之后,响应结果应该大致如下: 
这时候在你公众号的草稿箱中就可以看到了! 
方法 2:使用社区节点

这个节点包封装好了一系列的微信接口,包括我们要用到的 3 个接口,所以整个流程非常简单,只需要配置 4 个节点即可。
首先是安装它: 进到 Settings-> Community nodes中,
输入 n8n-nodes-wechat-offiaccount 来进行安装

然后在面板的添加节点中搜索 wechat ,选择第一个:

滑动到最底下,选择 授权 获取Access Token

这个节点中先需要配置 AppID 和 AppSecret

然后是下载封面图和上传素材:

下载封面图的节点和上面一样,不重复了
上传素材节点 选择素材选项下的第一个:上传永久素材

这里不用改动什么,请求参数都封装好了

最后添加上传草稿的节点,
选择 草稿 中的 新建草稿 
里面也做了很多的封装,只需要传入文章内容即可: 
不过文章参数与刚刚的稍有不同,格式如下:
json
[
{
"title": "这是我的文章标题2",
"author": "你的作者名",
"content": "<h1>这是一个大标题</h1><p>这里是文章的正文部分,<b>支持 HTML 格式</b>。你可以从其他节点动态传入这段内容。</p><img src='https://mmbiz.qpic.cn/mmbiz_jpg/your_image_url/0?wx_fmt=jpeg' />",
"thumb_media_id": "kjIYa7yRqi3jD3XlC9XxnShDNVceXTE_iRf55uv19iEOuBgfKKKvrQ3rd3pg17Kj",
"need_open_comment":1,
"only_fans_can_comment":0
}
]
运行成功后,结果跟刚刚是一致的 
最后
两种方法各种有优缺点,大家根据自己的场景来选择。
有空可以跟着教程自己动手实践一下。
或者公众号后台回复【n8n公众号】获取完整工作流 json 文件,直接接入到自己的工作流中!