我创建了一个简单的快捷服务器,并添加了一个/slack/receive路由来处理来自server的web钩子请求:
// 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);
};服务器初始化正确,但是一旦松懈的web钩子接收到请求,就会发生以下错误:
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()中的代码没有被执行。发布于 2019-02-24 14:25:12
发生此错误是因为botkit需要某种形式的存储,它可以存储所有的团队(频道和用户),并在以后对其进行检索。
因此,当您的方法handleWebhookPayload被执行时,它调用另一个名为findAppropriateTeam的方法,该方法将在您提供的存储中查询指定的团队记录(可能是mongoDB或JSON文件或其他)。错误是说您在存储中没有提供id的任何记录。
因此,这可能涉及两件事:
第一个问题的解决办法很简单。您只需在计算机中安装mongodb,然后将其传递给botkit MONGO_URL。
注意:我看到您正在使用botkit简单的存储,这可能是问题所在,因为我也经历过这种存储的一些问题,而不是保存记录。
const controller = botkit.slackbot({
storage: 'mongodb//localhost:27017:/yourdb',
})
//OR
const controller = botkit.slackbot({
storage: process.env.MONGO_URL,
})第二个问题的可能解决办法:
我假设您在本地使用botkit,所以您必须使用一些隧道,比如ngrok或local隧道。在这种情况下,请确保:
当您访问/login路由并授权应用程序时,Botkit会将您的团队id保存在所提供的存储上。因此,如果您跳过了这个部分,那么botkit将不会保存您的团队id,因此在稍后收到事件时会抛出一个错误。
像[https://github.com/howdyai/botkit/issues/938]一样检查这个主题的查询
我希望这能帮到你!
https://stackoverflow.com/questions/52795925
复制相似问题