如何解决转发消息的问题?
How can I solve the problem with forwarding messages?
我使用“botact”库创建了一个聊天机器人,但是
当我尝试在 vk-community API 工作页面上验证我的 bot 时,我在 'Windows PowerShell[=20] 中收到错误=]'(这里我为机器人启动了服务器):
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
所以我对botact
了解不多,但是根据你在/
路线时的代码,你需要传递一个包含object
属性.
现在,由于这是 vk bots
的机器人框架,它可能会自动发送请求正文。您可以通过记录请求正文来确定。
server.post('/', async (req,res)=>{
console.dir(req.body);
await bot.listen(req, res);
});
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
时,表达传递 req
作为第一个参数。 { type, secret, object, group_id }
这些字段从 req.body
.
然后 object
被传递给 getLastMessage
函数。
因此对于请求正文,您至少需要
{ "object": {} }
这是我将其添加到 Postman
的请求正文后得到的 200 OK
输出
POC代码:
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);
我使用“botact”库创建了一个聊天机器人,但是 当我尝试在 vk-community API 工作页面上验证我的 bot 时,我在 'Windows PowerShell[=20] 中收到错误=]'(这里我为机器人启动了服务器):
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
所以我对botact
了解不多,但是根据你在/
路线时的代码,你需要传递一个包含object
属性.
现在,由于这是 vk bots
的机器人框架,它可能会自动发送请求正文。您可以通过记录请求正文来确定。
server.post('/', async (req,res)=>{
console.dir(req.body);
await bot.listen(req, res);
});
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
时,表达传递 req
作为第一个参数。 { type, secret, object, group_id }
这些字段从 req.body
.
然后 object
被传递给 getLastMessage
函数。
因此对于请求正文,您至少需要
{ "object": {} }
这是我将其添加到 Postman
的请求正文后得到的200 OK
输出
POC代码:
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);