node.js - Facebook Messenger 机器人永久菜单

标签 node.js facebook heroku bots messenger

我正在生成我的第一个使用 Node.js 和 Heroku 的机器人,但发现理解持久菜单功能有些困难。

问题 1) 如何将事件附加为回调?

function persistentMenu(sender){
 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 : "existing_thread",
        call_to_actions:[
            {
              type:"postback",
              title:"FAQ",
              payload:"DEVELOPER_DEFINED_PAYLOAD_FOR_HELP"
            },
            {
              type:"postback",
              title:"I Prodotti in offerta",
              payload:"DEVELOPER_DEFINED_PAYLOAD_FOR_HELP"
            },
            {
              type:"web_url",
              title:"View Website",
              url:"https://google.com/"
            }
          ]
    }

}, function(error, response, body) {
    console.log(response)
    if (error) {
        console.log('Error sending messages: ', error)
    } else if (response.body.error) {
        console.log('Error: ', response.body.error)
    }
})

}

问题 2)我发现清空持久菜单并生成新菜单的唯一方法是通过终端发出删除请求(“如 Facebook 所记录”),是否有可能清除在我的 app.js 文件上插入刷新功能?

curl -X DELETE -H "Content-Type: application/json" -d '{"setting_type":"call_to_actions","thread_state":"existing_thread"}' "https://graph.facebook.com/v2.6/me/thread_settingsaccess_token=PAGE_ACCESS_TOKEN"    

最佳答案

FB 示例机器人的回调结构不完善。我还没有找到在 Node 回调或 promise 模型中构建示例的好方法。我确信 Node 专家可以重新组织它。

对于持久菜单,如果您发送空的 call_to_actions 数组,菜单将会消失。然而,菜单看起来有点“粘”,因为发送消息时它不会立即出现/消失。

我将您的代码片段合并到我的示例机器人中。您可以在以下位置查看:

https://messenger.com/t/dynamicmemorysolutions

来源位于:

https://github.com/matthewericfisher/fb-robot

查看添加/删除菜单命令和功能。

编辑:持久菜单 API 已更新。请参阅this问题以获取更多详细信息。

关于node.js - Facebook Messenger 机器人永久菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38511760/

相关文章:

swift - user_friends 的应用程序不断被拒绝 - Facebook

android - 从 Android 应用程序打开 Facebook 页面?

ruby-on-rails - Rails 和 Sinatra - 未从数据库获得任何响应

javascript - 请将回调函数的事件路径分解为ORM文件

javascript - 如何使 node.js 中的 fs.read 超时?

javascript - 什么是昆特?我克隆了一个模仿玻璃墙上真实雨滴的存储库。我尝试运行它,但出现错误 `Quint is not defined`

python - 使用 facebook sdk 和 flask 从用户那里获取帖子

google-app-engine - 用于 Web 应用程序的 CloudFlare 和动态 DNS

scala - 由 : java. sql.SQLException : JDBC4 Connection. isValid() 方法引起不支持

javascript - 更喜欢解构——已经存在的变量