首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Botkit slackbot错误“处理web钩子时无法加载团队”

Botkit slackbot错误“处理web钩子时无法加载团队”
EN

Stack Overflow用户
提问于 2018-10-13 18:18:19
回答 1查看 834关注 0票数 0

我创建了一个简单的快捷服务器,并添加了一个/slack/receive路由来处理来自server的web钩子请求:

代码语言:javascript
复制
// 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应用程序:

代码语言:javascript
复制
// 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钩子接收到请求,就会发生以下错误:

代码语言:javascript
复制
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)

到目前为止我发现:

  • 在botkit slackbot中存储/不存储没有什么不同
  • 错误发生在handleWebhookPayload方法中,因为controller.hears()中的代码没有被执行。
EN

回答 1

Stack Overflow用户

发布于 2019-02-24 14:25:12

发生此错误是因为botkit需要某种形式的存储,它可以存储所有的团队(频道和用户),并在以后对其进行检索。

因此,当您的方法handleWebhookPayload被执行时,它调用另一个名为findAppropriateTeam的方法,该方法将在您提供的存储中查询指定的团队记录(可能是mongoDB或JSON文件或其他)。错误是说您在存储中没有提供id的任何记录。

因此,这可能涉及两件事:

  1. 您没有为botkit提供存储空间。
  2. 您没有将团队id保存在存储区中。

第一个问题的解决办法很简单。您只需在计算机中安装mongodb,然后将其传递给botkit MONGO_URL。

注意:我看到您正在使用botkit简单的存储,这可能是问题所在,因为我也经历过这种存储的一些问题,而不是保存记录。

代码语言:javascript
复制
const controller = botkit.slackbot({
  storage: 'mongodb//localhost:27017:/yourdb',

})

//OR

const controller = botkit.slackbot({
  storage: process.env.MONGO_URL,

})

第二个问题的可能解决办法:

我假设您在本地使用botkit,所以您必须使用一些隧道,比如ngrok或local隧道。在这种情况下,请确保:

  1. 您提供了Slack的重定向URL (Ex,url/oauth)
  2. 您访问了url/login页面

当您访问/login路由并授权应用程序时,Botkit会将您的团队id保存在所提供的存储上。因此,如果您跳过了这个部分,那么botkit将不会保存您的团队id,因此在稍后收到事件时会抛出一个错误。

[https://github.com/howdyai/botkit/issues/938]一样检查这个主题的查询

我希望这能帮到你!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52795925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档