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

Bot Framework(Node.js)中Facebook Messenger的call_to_actions无效键问题

排查Facebook Messenger持久菜单嵌套结构错误的思路

我来帮你搞定这个嵌套菜单的问题!从你给出的代码片段来看,大概率是嵌套菜单的结构不符合Messenger平台的要求,再加上代码明显有截断(比如call_to_...}),这肯定会触发「无效键」的报错。下面是几个核心排查方向和修复方案:

1. 补全嵌套菜单的必填结构

当你把菜单项的type设为nested时,必须完整包含call_to_actions数组——这个数组里要放子菜单的具体选项,每个子选项也得有title、type,以及对应的payload(postback类型)或url(web_url类型)。

给你一个正确的嵌套菜单示例,对照着补全你的代码:

{
  "setting_type": "call_to_actions",
  "thread_state": "existing_thread",
  "call_to_actions": [
    {
      "type": "postback",
      "title": "Main Menu",
      "payload": "MAIN_MENU_PAYLOAD"
    },
    {
      "title": "Topics",
      "type": "nested",
      "call_to_actions": [
        {
          "type": "postback",
          "title": "Tech Updates",
          "payload": "TECH_UPDATES_PAYLOAD"
        },
        {
          "type": "web_url",
          "title": "Official Blog",
          "url": "https://your-blog-domain.com"
        }
      ]
    }
  ]
}

2. 严格检查键名的拼写和大小写

Messenger的API对键名大小写非常敏感,比如setting_type、thread_state、call_to_actions这些键必须严格按照官方要求拼写,不能写成驼峰式(比如callToActions)或者拼错单词,否则会被判定为「无效键」。

3. 遵守菜单的层级和数量限制

Messenger对持久菜单有明确的限制,超出限制也会触发格式错误:

  • 顶级菜单最多3个菜单项
  • 每个嵌套子菜单最多5个菜单项
  • 不支持三级及以上的嵌套菜单(子菜单里不能再套子菜单)

4. 验证JSON语法的合法性

先把你的完整JSON代码放到JSON校验工具里检查,确保没有缺失逗号、括号不匹配、引号未闭合这类低级语法错误——这类问题经常会被API判定为「无效键」。

5. 规范Payload的格式

payload字段不能超过1000字符,建议用大写字母加下划线的格式(比如MAIN_MENU_PAYLOAD),虽然不是强制要求,但能避免一些潜在的解析问题。

如果按照这些点修正后还是报错,可以把完整的JSON代码贴出来,我再帮你进一步排查!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:19:42