gpt4 book ai didi

node.js - 使用 Facebook 的 botBuilder 适配器收到传入请求的签名无效

转载 作者:太空宇宙 更新时间:2023-11-03 23:51:14 25 4
gpt4 key购买 nike

我已成功部署此示例 repo到 azure,它现在可以在网络聊天和 Slack 上运行。

现在我正在尝试在我的机器人中使用 Facebook 适配器。我已经关注了instructions将 FacebookAdapter 与 BotBuilder 结合使用,并将以下代码添加到 index.js

const { FacebookAdapter } = require('botbuilder-adapter-facebook');
const restify = require('restify');

const adapter = new FacebookAdapter({
verify_token: process.env.FACEBOOK_VERIFY_TOKEN,
app_secret: process.env.FACEBOOK_APP_SECRET,
access_token: process.env.FACEBOOK_ACCESS_TOKEN
});
const server = restify.createServer();
server.use(restify.plugins.bodyParser());
server.use(restify.plugins.queryParser());

server.get('/api/messages', (req, res) => {
if (req.query['hub.mode'] === 'subscribe') {
if (req.query['hub.verify_token'] === process.env.FACEBOOK_VERIFY_TOKEN) {
const val = req.query['hub.challenge'];
res.sendRaw(200, val);
} else {
console.log('failed to verify endpoint');
res.send('OK');
}
}
});

server.post('/api/messages', (req, res) => {
adapter.processActivity(req, res, async(context) => {
await context.sendActivity('I heard a message!');
});
});

server.listen(process.env.port || process.env.PORT || 3000, () => {
console.log(`\n${ server.name } listening to ${ server.url }`);
});

还在我的 .env 文件中添加了所需的各种 token 和 secret 。

当我尝试使用机器人框架模拟器在本地测试应用程序时,出现错误

(node:11588) UnhandledPromiseRejectionWarning: Error: Invalid signature on incoming request
at FacebookAdapter.<anonymous> (/home/ronald/Desktop/03.welcome-users/node_modules/botbuilder-adapter-facebook/lib/facebook_adapter.js:421:23)
at Generator.next (<anonymous>)
at /home/ronald/Desktop/03.welcome-users/node_modules/botbuilder-adapter-facebook/lib/facebook_adapter.js:15:71

我不知道我做错了什么

最佳答案

不幸的是,这似乎是某种错误。安issue Botkit Github 存储库上已经存在,许多客户都遇到了类似的问题,但目前尚未修复。它似乎不会影响所有客户,因为 Botkit 开发人员(在发帖时)能够毫无错误地使用该适配器。

在调查您的问题时,我确定错误是由 FacebookAdapter 类中的 verifySignature() 方法生成的。 应该从 Facebook 返回一个“x-hub-signature” header ,用于检查 webhook event 的请求负载的签名。由于未知原因,缺少此 header ,导致出现“无效签名”消息。

我建议您对上述 GH 问题发表评论,以帮助促进解决该问题。

希望得到帮助!

-----编辑-----

Facebook 适配器设计为独立于 Azure 机器人服务/ABS channel 工作,即使与 BotFramework 机器人集成也是如此。因此,它不适用于 BotFramework 模拟器。它被设计为直接连接到机器人的适配器。

这也意味着您需要调整 Facebook 应用程序设置中的 Webhook 回调 URL,以指向本地运行的机器人。配置为 ABS 时,Webhook 值类似于:

https://facebook.botframework.com/api/v1/bots/[botname]

您需要将其调整为指向您的 ngrok 端点(用于本地机器人和 Facebook 等外部源之间的隧道)。新的 webhook 值将如下所示:

https://1a04e4ad.ngrok.io/api/messages

不要忘记添加同样来自 Facebook 的验证 token (可在设置中找到)。

假设您已经更改了 webhook url、提供了验证 token 并且没有使用模拟器,那么它应该可以顺利工作。

注意:Facebook 会为每个通过的事件发送回显和传送确认。结果是,如果您不过滤传入的事件类型或关闭 Facebook 中的其他事件,那么您的机器人将持续受到攻击。

关于node.js - 使用 Facebook 的 botBuilder 适配器收到传入请求的签名无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59411564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com