Viber setWebhook失败,并显示错误-“数据”参数必须是字符串,TypedArray或DataView类型之一。收到的类型对象

时间:2019-10-09 13:06:03

标签: node.js bots webhooks viber

尝试设置viber Webhook。我已经有一个快速服务器设置。因此,我只是将Bot添加为中间件。一切都已找到,服务器已启动并正在运行。一旦调用bot.setWebhook(process.env.VB_WEBHOOK_URL),就会引发错误,提示->“ data”参数必须是字符串,TypedArray或DataView类型之一。收到的类型对象”

在本地服务器配置中尝试使用ngrok时,它可以正常工作。在实时服务器配置中设置Webhook时的唯一问题。请检查下面的代码

    const path = require("path");
    const publicPath = path.join(__dirname, "../public");
    const express = require("express");
    const http = require("http");
    const env = require("dotenv");
    const bodyParser = require("body-parser");
    env.config({
        path: path.resolve(__dirname + "/.env")
    });
    const app = express();
    const server = http.createServer(app);

    const adminActionRoute = require('./routes/admin');

    app.use(express.static(publicPath));
    app.use(bodyParser.json({ verify: verifyRequestSignature }));
    app.use(bodyParser.urlencoded({ limit: '200mb', extended: true                         }));
    app.use('/api/admin', adminActionRoute);

    const viberBot = require('../viber_chat/utils/bot')
    app.use('/viber/webhook', viberBot.middleware())

    server.listen(5000, () => {
        viberBot.setWebhook(process.env.VB_WEBHOOK_URL);
        console.log("server starts at port 5000");
    });


    module.exports = server; //for testing 

'/ viber_chat / utils / bot'文件

    require('dotenv').config();
    const ViberBot = require('viber-bot').Bot;
    const BotEvents = require('viber-bot').Events;
    const logger = require('../utils/logger');

    const bot = new ViberBot(logger, {
        authToken: process.env.VB_API_KEY, 
        name: "Bot Name",
        avatar: "" 
    });

    bot.onSubscribe(response => {

    });

    bot.on(BotEvents.CONVERSATION_STARTED, (response) => {

    })


    module.exports = bot;

TypeError [ERR_INVALID_ARG_TYPE]:“数据”参数必须是字符串,TypedArray或DataView类型之一。收到的类型对象     在Hmac.update(internal / crypto / hash.js:58:11)     在MessageValidator._calculateHmacFromMessage(/home/thettun/project_folder/funfun_viber/node_modules/viber-bot/lib/message/message-validator.js:19:54)     在MessageValidator.validateMessage(/home/thettun/project_folder/funfun_viber/node_modules/viber-bot/lib/message/message-validator.js:11:30)     在_app.use(/home/thettun/project_folder/funfun_viber/node_modules/viber-bot/lib/middleware.js:61:32)     在Layer.handle [作为handle_request](/home/thettun/project_folder/funfun_viber/node_modules/express/lib/router/layer.js:95:5)     在trim_prefix(/home/thettun/project_folder/funfun_viber/node_modules/express/lib/router/index.js:317:13)     在/home/thettun/project_folder/funfun_viber/node_modules/express/lib/router/index.js:284:7     在Function.process_params(/home/thettun/project_folder/funfun_viber/node_modules/express/lib/router/index.js:335:12)     在下一个(/home/thettun/project_folder/funfun_viber/node_modules/express/lib/router/index.js:275:10)     在textParser(/home/thettun/project_folder/funfun_viber/node_modules/body-parser/lib/types/text.js:60:7)     在Layer.handle [作为handle_request](/home/thettun/project_folder/funfun_viber/node_modules/express/lib/router/layer.js:95:5)     在trim_prefix(/home/thettun/project_folder/funfun_viber/node_modules/express/lib/router/index.js:317:13)     在/home/thettun/project_folder/funfun_viber/node_modules/express/lib/router/index.js:284:7     在Function.process_params(/home/thettun/project_folder/funfun_viber/node_modules/express/lib/router/index.js:335:12)     在下一个(/home/thettun/project_folder/funfun_viber/node_modules/express/lib/router/index.js:275:10)     在expressInit(/home/thettun/project_folder/funfun_viber/node_modules/express/lib/middleware/init.js:40:5)

1 个答案:

答案 0 :(得分:0)

这个topic为我解决了

即调用setWebhook时不要使用bodyParser,而只能在特定的路由上使用

// app.use(bodyParser.json());