使用系统用户令牌通过Google Apps Script发布到Facebook Page遇OAuthException问题
我目前尝试通过Google Apps Script实现从Google表格自动发布社交媒体内容到Facebook Page的功能。脚本设计为读取表格数据后,调用Facebook Graph API将内容发布至指定Facebook Page。
以下是发起POST请求的简化版Google Apps Script函数:
function postToFacebook(image_url, caption) { var options = { 'method' : 'post', 'muteHttpExceptions': true, 'headers': {'Content-Type': 'application/x-www-form-urlencoded'}, 'payload' : `url=${encodeURIComponent(image_url)}&caption=${encodeURIComponent(caption)}&published=true&access_token=${ACCESS_TOKEN}` }; const container = 'https://graph.facebook.com/v17.0/<FACEBOOK_PAGE_ID>/photos'; var response = UrlFetchApp.fetch(container, options); Logger.log(response.getContentText()); }
但我持续收到如下错误信息:
{ "error": { "message": "(#200) The permission(s) publish_actions are not available. It has been deprecated. If you want to provide a way for your app users to share content to Facebook, we encourage you to use our Sharing products instead.", "type": "OAuthException", "code": 200, "fbtrace_id": "<TRACE_ID>" } }
在Facebook商务设置中,我已确认系统用户在“已分配资产”下获得了Page的Admin角色,且拥有pages_manage_posts和pages_read_engagement权限,应用当前处于上线模式。
有趣的是,若将系统用户令牌替换为从Graph API Explorer获取的Page访问令牌,脚本可正常运行。但我希望使用长期有效的系统用户令牌完成此自动化任务。
请问是否缺少允许系统用户令牌发布到Page的步骤?或是该功能并不存在?
核心问题是系统用户令牌无法直接用于发布Page内容,必须先转换为对应Page的访问令牌,这是Facebook针对系统用户的强制流程,具体操作步骤如下:
获取系统用户的Page访问令牌
使用系统用户令牌调用Graph API的/{系统用户ID}/accounts端点,请求参数带上access_token={系统用户令牌},返回结果里会包含该系统用户有权限的所有Page信息,其中就有长期有效的Page访问令牌(只要系统用户权限不被撤销,令牌不会过期)。验证令牌权限
拿到Page访问令牌后,可调用/debug_token端点验证是否包含pages_manage_posts权限,确保权限绑定正确。替换脚本中的令牌
将脚本里的ACCESS_TOKEN替换为上述步骤获取的Page访问令牌,即可正常执行发布操作。
额外注意:
- 需确保系统用户的
pages_manage_posts权限是直接分配给目标Page的,而非仅在应用层面添加权限; - 系统用户本身的令牌仅用于获取Page访问令牌,不能直接调用Page发布接口,这也是你用Graph Explorer的Page令牌能正常运行的原因——Explorer已经帮你完成了令牌转换流程。
内容的提问来源于stack exchange,提问作者Ahmed

