我已经成功创建了一个facebook messenger bot。我已经在我的应用程序中实现了消息回发,它似乎在我的Android设备(Messenger V 68.0.0.22.67)
中正常工作。
但是当我尝试使用带有信使V 76.0.0.13.70
的三星Galaxy S5时,所有事件postback
都被称为三次。我甚至尝试使用其他一些现有的facebook机器人来测试同一设备中的回发事件,这也是同样的情况。每次回发我都会得到三倍的响应。
信使版可能有问题吗?到目前为止,我无法找到与此相关的任何问题日志。
任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
当Facebook在标题中发回的签名与您为有效负载计算的签名不匹配时,会发生这种情况。这将返回500到Facebook和Facebook重试此请求两次(总共三个请求)。
<强>问题强>
问题是某些字符必须以UNICODE编码。
例如:
在计算哈希值之前,@ character必须替换为“\ u0040”。
<强>解强>
我只是在Facebook Messenger模块的 verifySignature
中完成此操作 let hash = crypto.createHmac('sha1',this.APP_SECRET).update(JSON.stringify(req.body).replace(/@/g,"\\u0040").replace(/\//g, '\\/')).digest('hex');
本文深入探讨了解决方案。
https://hackernoon.com/regenerating-a-raw-request-payload-an-impossible-task-e4133fb2571