Facebook Messenger 回发被调用三次

Facebook Messenger Postback Called thrice

我已经成功创建了一个 facebook 聊天机器人。我也在我的应用程序中实现了消息回发,它似乎在我的 android 设备 (Messenger V 68.0.0.22.67) 中运行良好。

但是当我尝试使用带有 Messenger V 76.0.0.13.70 的 Samsung Galaxy S5 时,所有事件 postback 都被调用了三次。我什至尝试使用其他一些现有的 facebook 机器人来测试同一设备中的回发事件,并且那里的情况也相同。我每次回发都会收到三次回复。

会不会是信使版本有问题?到目前为止,我找不到与此相关的任何问题日志。

非常感谢任何帮助。

当 Facebook 在 headers 中发回的签名与您为负载计算的签名不匹配时,就会发生这种情况。 returns 向 Facebook 发送 500,Facebook 重试此请求两次(总共三个请求)。

问题

问题是某些字符必须使用 UNICODE 编码。

例如:

@ character has to be replaced with "\u0040" before the hash is calculated.

解决方案

我只是在 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