Facebook Messenger 平台/机器人欢迎配置的奇怪错误

Posted

技术标签:

【中文标题】Facebook Messenger 平台/机器人欢迎配置的奇怪错误【英文标题】:Weird error with Facebook Messenger Platform/bot Welcome Confugration 【发布时间】:2016-11-01 11:59:00 【问题描述】:

我在为我的 Messenger 机器人配置欢迎消息时遇到一个奇怪的错误。我一直在使用相同的代码(如下所示),直到昨晚它一直运行良好。我用 cURL 和Postman 都试过了。它们都不起作用。

curl -X POST -H "Content-Type: application/json" -d '
  "setting_type":"call_to_actions",
  "thread_state":"new_thread",
  "call_to_actions":[
    
      "message":
        "text":"Welcome to My Company!"
      
    
  ]
' "https://graph.facebook.com/v2.6/<PAGE_ID>/thread_settings?access_token=<PAGE_ACCESS_TOKEN>"

执行上述代码时的错误信息:

"error":"message":"(#100) Invalid keys \"message\" were found in param \"call_to_actions[0]\".","type":"OAuthException","code":100,"fbtrace_id":"Hn42Wa+hapI"%

我可以确认 PAGE_ID 和 PAGE_ACCESS_TOKEN 都是正确的,因为尝试使用以下代码删除欢迎消息可以正常工作。

curl -X POST -H "Content-Type: application/json" -d '
  "setting_type":"call_to_actions",
  "thread_state":"new_thread",
  "call_to_actions":[
    
      "message":
        "text":"Welcome to My Company!"
      
    
  ]
' "https://graph.facebook.com/v2.6/<PAGE_ID>/thread_settings?access_token=<PAGE_ACCESS_TOKEN>"

另外,我使用的代码与Facebook official API doc 上显示的代码完全相同。我不明白为什么它说“消息”不是有效的密钥。有没有人遇到同样的问题? Facebook 是否更改了他们的 API?

任何帮助将不胜感激!

【问题讨论】:

试图解决这个问题已经好几个小时了。很高兴看到人们遇到同样的问题,我们可以确认这个错误不是由我们造成的。也许是未记录的 API 更改? @ericls 我认为这是一个未记录的 API 更改。希望尽快给予进一步通知。 已在此处报告错误:developers.facebook.com/bugs/1751749508372552 【参考方案1】:

我遇到同样的问题并修复它。 我认为您的请求 json 是

let messageData = 
"setting_type":"call_to_actions",
"thread_state":"new_thread",
"call_to_actions":[
  
    "payload":"welcome_payload"
  
]

request(
    url: 'https://graph.facebook.com/v2.6/me/thread_settings',
    qs: access_token:token,
    method: 'POST',
    json: 
        messageData
    

但它不起作用,日志会说你没有“setting_type”= =a 试试这个

  request(
        url: 'https://graph.facebook.com/v2.6/me/thread_settings',
        qs: access_token:token,
        method: 'POST',
        json: 
            setting_type:"call_to_actions",
            thread_state:"new_thread",
             call_to_actions:[
              
                "payload":"welcome_payload"
              
             ]
        
    

它对我有用。

【讨论】:

【参考方案2】:

文档更新:

https://developers.facebook.com/docs/messenger-platform/thread-settings/greeting-text

例子:

curl -X POST -H "Content-Type: application/json" -d '
  "setting_type":"greeting",
  "greeting":
    "text":"Welcome to My Company!"
  
' "https://graph.facebook.com/v2.6/me/thread_settings?access_token=PAGE_ACCESS_TOKEN"

【讨论】:

【参考方案3】:

此错误是由于 API 更改造成的。

新来电:

curl -X POST -H "Content-Type: application/json" -d '
  "setting_type":"call_to_actions",
  "thread_state":"new_thread",
  "call_to_actions":[
    "payload":"START"
  ]
' "https://graph.facebook.com/v2.6/<PAGE_ID>/thread_settings?access_token=<PAGE_TOKEN>"

只需添加一个像"payload":"START"这样的有效负载

如果用户按下“开始”按钮,您会在 messageHandler (webhook) 中收到此有效负载。检查$incomingMessage == "START" 是否发送回您的结构化消息,或任何您想要的。

不再支持以前的消息。

错误报告:https://developers.facebook.com/bugs/1751749508372552/

【讨论】:

【参考方案4】:

docs 现已更新,您现在需要在payload 参数中定义您的有效负载(UTF-8 编码字符串),例如:

"call_to_actions":[
    
      "payload":"USER_DEFINED_PAYLOAD"
    
]

【讨论】:

更新后的文档也不起作用。我收到以下错误:"error":"message":"(#3) App must be on whitelist","type":"OAuthException","code":3,"fbtrace_id":"FiDgnEghdY\/" 对我来说也是如此——“thread_settings”端点在 2 天前运行良好。现在使用“有效负载”后,我收到了白名单错误。 te@leihe,你确定你的应用没有进入沙盒(测试)模式?

以上是关于Facebook Messenger 平台/机器人欢迎配置的奇怪错误的主要内容,如果未能解决你的问题,请参考以下文章

来自 Facebook Messenger 机器人对话的 API 身份验证

Facebook Messenger Bot 使用回发按钮共享结构化消息

Facebook Messenger 平台 ngrok

Facebook Messenger 机器人反应通知

Facebook Messenger 平台发送本地图片附件

Facebook Messenger 检测关闭 web 视图(移动)