Как я могу решить проблему с пересылкой сообщений? - PullRequest
2 голосов
/ 11 января 2020

Я создал чат-бота с использованием библиотеки ' botact ', но когда я пытаюсь проверить мой бот на рабочей странице API vk-сообщества, я получаю сообщение об ошибке в 'Windows PowerShell ' (здесь я запустил сервер для бота):

TypeError: Cannot read property 'fwd_messages' of undefined
 at Botact.getLastMessage (C:\Users\whoami\Desktop\Bot-test\node_modules\botact\lib\utils\getLastMessage.js:2:11)
    at Botact.module.exports (C:\Users\whoami\Desktop\Bot-test\node_modules\botact\lib\methods\listen.js:29:28).

Файл 'getLastMessage. js' содержит этот код:

    const getLastMessage = (msg) => {
      if (msg.fwd_messages && msg.fwd_messages.length) {
        return getLastMessage(msg.fwd_messages[0])
      }

      return msg
    }

module.exports = getLastMessage

1 Ответ

1 голос
/ 11 января 2020

Так что я не знаю много о botact, но согласно коду, когда вы выбираете маршрут /, вам нужно передать тело, содержащее свойство object.

Теперь как это бот-фреймворк для vk bots, может быть, он автоматически отправляет тело запроса. В этом можно убедиться, зарегистрировав тело запроса.

server.post('/', async (req,res)=>{
    console.dir(req.body);
    await bot.listen(req, res);
});

/ lib / Methods / Listen. js:

const { type, secret, object, group_id } = framework === 'koa'
    ? args[0].request.body
    : args[0].body
...
...
...
const { events, middlewares } = actions
const forwarded = this.getLastMessage(object)

Теперь, когда вы делаете bot.listen express передает req в качестве первого аргумента. и { type, secret, object, group_id } эти поля разрушаются из req.body.

И затем object передается в функцию getLastMessage.

Так что для тела запроса как минимум вы бы нужно

{ "object": {} }

Вот вывод 200 OK, который я получил после добавления этого к телу запроса от Почтальона

postman request example

PO C Код:

const express = require("express");
const bodyParser = require("body-parser");
const { Botact } = require("botact");
const server = express();
const bot = new Botact({
  token: "token_for_my_group_i_just_hided_it",
  confirmation: "code_for_my_group_i_just_hided_it"
});
server.use(bodyParser.json());

server.post("/",bot.listen);
server.listen(8080);
...