Node.js调用FB Graph API发群组视频帖子报#10无权限错误
Facebook群组Graph API发媒体帖问题修复方案
问题1:视频上传传published: false仍直接公开发布
- 该问题是接口规则限制,不是代码错误:
/{group_id}/videos接口本身不支持published=false参数。 published=false的草稿态逻辑仅对个人号、公共主页的视频/照片上传生效;群组场景下只有照片上传接口支持该参数,视频上传完成后会直接公开发布到群组时间线,不存在未发布的群组视频草稿,没有参数可以绕过这个规则。
问题2:feed接口附带媒体返回(#10) Application does not have permission for this action错误
该错误由两个独立问题共同导致:
- 第一,
attached_media参数格式错误。你使用的Node.js FB SDK不会自动序列化数组类型参数,直接传入JS数组会被SDK转换为带换行、缩进的格式化字符串(从你提供的调试日志可以看到参数值带了换行符,不符合接口要求),接口解析失败会抛出权限类误导报错。修复方式是手动将参数序列化为无格式JSON字符串:
const { id } = await FB.api(`/${process.env.FB_GROUP_ID}/feed`, 'POST', { message: "Hello world!!!", attached_media: JSON.stringify([{ media_fbid: media.id}, { media_fbid: media1.id}]) }, );
- 第二,资源状态不合法。结合问题1的结论,你上传视频拿到的
media.id对应的是已经公开发布的视频,并非未发布草稿;而群组feed接口的attached_media参数不支持混合传入已发布资源、未发布图片资源,也不支持传入视频类资源ID,参数不合法时接口统一返回无权限报错。
正确实现逻辑
- 发布带文案的群组视频帖:不需要走feed接口二次发布,直接调用视频上传接口,将帖子文案传入
description参数即可:
const videoPost = await FB.api(`/${process.env.FB_GROUP_ID}/videos`, 'POST', { file_url: image.video_url, description: "Hello world!!!", no_story: true, }, );
- 发布带多图的群组图文帖:先将所有图片以
published:false状态上传,拿到所有图片ID后序列化为attached_media参数,调用feed接口发布即可。 - 注意:Facebook群组本身不支持在同一条帖子内同时附带视频和图片,不管是API调用还是端内手动发布都无法实现该格式。
内容的提问来源于stack exchange,提问作者Yurii Besedin
相关产品推荐
相关产品推荐

