Ошибка skbot Botkit "Не удалось загрузить команду во время обработки webhook" - PullRequest
0 голосов
/ 13 октября 2018

Я создал простой экспресс-сервер и добавил маршрут /slack/receive для обработки запросов веб-крюка из API событий Slack:

// 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)

До сих пор я обнаружил, что:

  • Наличие / отсутствие хранилища в бот-пакете slackbot не имеет значения
  • Ошибка возникает в методе handleWebhookPayload, поскольку код в controller.hears() не выполняется

1 Ответ

0 голосов
/ 24 февраля 2019

Эта ошибка возникает из-за того, что боткит нуждается в некоторой форме хранилища, где он может хранить все команды (каналы и пользователи тоже) и извлекать его позже.

Итак, когда ваш метод handleWebhookPayload выполняется, он вызывает другой метод с именем findAppropriateTeam, который будет запрашивать указанную командную запись в предоставленном вами хранилище (это может быть mongoDB или файл JSON или другой),Ошибка говорит о том, что у вас нет записи в хранилище с предоставленным идентификатором.

Так что это может подразумевать две вещи:

  1. Вы не предоставили хранилище для боткита дляработа
  2. Вы не сохранили идентификатор команды в хранилище

Решение первой проблемы довольно простое.Вам просто нужно установить mongodb на вашем компьютере, а затем перейти к боткиту MONGO_URL.

ПРИМЕЧАНИЕ.хранилище не сохраняет записи.

const controller = botkit.slackbot({
  storage: 'mongodb//localhost:27017:/yourdb',

})

//OR

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

})

Возможное решение второй проблемы:

Я предполагаю, что вы используете botkit локально, поэтому вы должны использовать какой-то туннель, такой как ngrok или localtunnel,В этом случае убедитесь, что:

  1. Вы предоставили URL перенаправления Slack (например, https://your_url/oauth)
  2. Вы открыли страницу https://your_url/login

Botkit сохраняет идентификатор вашей команды в предоставленном хранилище при доступе к маршруту / login и авторизует приложение. Поэтому, если вы пропустили эту часть, то botkit не сохранит идентификатор вашей команды, поэтому при получении событий позже будет выдано сообщение об ошибке.вкл.

Отметьте это, как [https://github.com/howdyai/botkit/issues/938], на предмет разногласий по теме

Надеюсь, это поможет!

...