You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS开发Messenger机器人Persistent Menu仅本人可见问题求助

Messenger机器人Persistent Menu仅自己可见的问题排查与解决

问题描述

我用NodeJS开发Messenger机器人,需要实现两个核心功能:

  • 创建Persistent Menu
  • Postback消息回复

目前遇到的问题:Persistent Menu仅在我自己的设备(桌面端、移动端)显示,其他用户无论使用什么账号、设备或浏览器都看不到。应用部署在Heroku平台。

我已经尝试过的方案:

  • 确认FB App处于Live模式(非Development模式)
  • 已授予/订阅消息权限(包括pages_messaging)
  • 已设置Get Started按钮
  • 尝试将接口路径中的/me/替换为FB Page ID
  • 确认FB Token和Verify Token正确无误
  • 删除Persistent Menu后重新配置

相关代码:

let setupPersistentMenu = () => {
    const menuPayload = {
      get_started: {
        payload: "GET_STARTED_PAYLOAD",
      },
      persistent_menu: [
        {
          locale: "default",
          composer_input_disabled: false,
          call_to_actions: [
            {
              title: "First menu item",
              type: "postback",
              payload: "TEST_PAYLOAD",
            }
          ],
        },
      ],
    };
    request(
      {
        uri: "https://graph.facebook.com/v17.0/me/messenger_profile",
        qs: { access_token: process.env.FB_PAGE_TOKEN },
        method: "POST",
        json: menuPayload,
      },
      (err, res, body) => {
        if (!err) {
          console.log("Persistent menu have been set up!");
        } else {
          console.error("Unable to set up persistent menu:" + err);
        }
      }
    );
  };

解决步骤

1. 确认用户是否发起过对话

Persistent Menu默认仅在用户首次发送消息(或触发Get Started按钮)后才会显示。如果其他用户还没和你的Page发过消息,菜单不会自动出现,让他们先发送任意一条消息再检查。

2. 检查Page访问限制

你作为开发者/管理员能看到菜单,但普通用户看不到,可能是Page设置了访问限制:

  • 检查Page的「设置」→「模板和标签」→「受众限制」,确认没有设置地区、年龄或内容分级限制
  • 确认用户没有被加入Page的黑名单

3. 强制刷新用户端缓存

Facebook客户端会缓存菜单配置,让用户尝试以下操作:

  • 退出Messenger账号后重新登录
  • 清除Messenger应用缓存(移动端)或浏览器缓存(桌面端)
  • 极端情况可卸载重装Messenger

4. 完善API调用的错误校验

你的代码只判断了请求是否有err,但没检查API返回的业务错误。修改代码打印完整响应体,确认菜单是否真的配置成功:

(err, res, body) => {
  if (!err) {
    console.log("API响应结果:", body); // 新增打印响应体
    if(body.error) {
      console.error("API返回错误:", body.error);
    } else {
      console.log("Persistent menu have been set up!");
    }
  } else {
    console.error("Unable to set up persistent menu:" + err);
  }
}

如果API返回错误,根据错误码排查(比如权限不足、Token过期、参数格式错误等)。

5. 补充多语言Locale配置

你当前只设置了locale: "default",部分地区用户可能因为Locale匹配问题看不到菜单。可以补充常用Locale的配置:

persistent_menu: [
  {
    locale: "default",
    composer_input_disabled: false,
    call_to_actions: [...]
  },
  {
    locale: "en_US",
    composer_input_disabled: false,
    call_to_actions: [...]
  },
  {
    locale: "zh_CN",
    composer_input_disabled: false,
    call_to_actions: [...]
  }
]

6. 确认Page与App的关联关系

检查FB Page是否正确关联到当前开发的App:

  • 进入Page的「设置」→「高级消息功能」→「关联的应用」,确认绑定的是你正在配置的App

内容的提问来源于stack exchange,提问作者EimantasV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 07:13:16