我创建了一个简单的快速服务器,并添加了一条/slack/receive
路由来处理来自Slack事件API的Webhook请求:
// routes.js (which is used by my app defined in server.js)
...
let slack = require('./controllers/slack');
router.post('/slack/receive', slack.receive);
...
然后我使用Botkit创建一个简单的Slack应用程序:
// controllers/slack.js
'use strict';
const logger = require('../config/winston');
// initialise firebase storage for botkit
const admin = require('firebase-admin');
var serviceAccount = require('../config/firebase.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
});
var db = admin.firestore();
db.settings({
timestampsInSnapshots: true
})
// initialise botkit for slack
const botkit = require('botkit');
const controller = botkit.slackbot({
storage: require('botkit-storage-firestore')({ database: db }),
clientId: process.env.SLACK_CLIENT_ID,
clientSecret: process.env.SLACK_CLIENT_SECRET,
clientSigningSecret: process.env.SLACK_SIGNING_SECRET,
redirectUri: process.env.SLACK_REDIRECT,
disable_startup_messages: true,
send_via_rtm: false,
debug: true,
scopes: ['bot', 'chat:write:bot'],
})
controller.hears('Hello', 'direct_mention,direct_message', (bot, message) => {
logger.info(message);
bot.reply(message, 'I heard a message!');
})
exports.receive = (req, res, next) => {
res.sendStatus(200);
logger.debug(req.body);
controller.handleWebhookPayload(req, res);
};
服务器正确初始化,但是松弛的Webhook收到请求后,就会发生以下错误:
Could not load team while processing webhook: Error: could not find team T5VDRMWKX
at E:\Documents\upper-revolutions\node_modules\botkit\lib\SlackBot.js:169:24
at firebaseRef.doc.get.then.catch.err (E:\Documents\upper-revolutions\node_modules\botkit-storage-firestore\src\index.js:86:13)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:118:7)
到目前为止,我已经发现:
handleWebhookPayload
中的代码未执行,该错误在controller.hears()
方法中发生答案 0 :(得分:0)
之所以会发生此错误,是因为botkit需要某种形式的存储,可以在其中存储所有团队(渠道和用户),并在以后进行检索。
因此,当您的方法handleWebhookPayload
执行时,它将调用另一个方法
findAppropriateTeam
将在您提供的存储中查询指定的团队记录(可能是mongoDB或JSON文件或其他)。错误是因为您在存储中没有提供提供ID的任何记录。
所以这可能意味着两件事:
第一个问题的解决方案非常简单。您只需要在计算机上安装mongodb,然后将MONGO_URL传递给botkit。
注意:我看到您使用的是botkit简单存储,这可能是问题所在,因为我也遇到了此类存储无法保存记录的麻烦。
const controller = botkit.slackbot({
storage: 'mongodb//localhost:27017:/yourdb',
})
//OR
const controller = botkit.slackbot({
storage: process.env.MONGO_URL,
})
第二个问题的可能解决方案:
我将假定您在本地使用botkit,因此您必须使用诸如ngrok或localtunnel之类的隧道。在这种情况下,请确保:
当您访问/ login路由并授权该应用程序时,Botkit将您的团队ID保存在提供的存储中。因此,如果您跳过该部分,则botkit将不会保存您的团队ID,因此,当您以后收到事件时,它将因此引发错误。
请像[https://github.com/howdyai/botkit/issues/938]一样检查有关该主题的论述
我希望这会有所帮助!