Thet Htun
Thet Htun

Reputation: 551

Viber setWebhook failed with error - The "data" argument must be one of type string, TypedArray, or DataView. Received type object

Trying to setup a viber webhook. I already have an express server setup. So I just add the bot as middleware. Everything is find and the server is up and running.

Once called bot.setWebhook(process.env.VB_WEBHOOK_URL), it throws error saying --> The "data" argument must be one of type string, TypedArray, or DataView. Received type object

It works fine when trying with ngrok in local server configuration. The only issue when setting up the webhook in live server configuration. Please check the code below

        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' file

        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]: The "data" argument must be one of type string, TypedArray, or DataView. Received type object
    at Hmac.update (internal/crypto/hash.js:58:11)
    at MessageValidator._calculateHmacFromMessage (/home/thettun/project_folder/funfun_viber/node_modules/viber-bot/lib/message/message-validator.js:19:54)
    at MessageValidator.validateMessage (/home/thettun/project_folder/funfun_viber/node_modules/viber-bot/lib/message/message-validator.js:11:30)
    at _app.use (/home/thettun/project_folder/funfun_viber/node_modules/viber-bot/lib/middleware.js:61:32)
    at Layer.handle [as handle_request] (/home/thettun/project_folder/funfun_viber/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/home/thettun/project_folder/funfun_viber/node_modules/express/lib/router/index.js:317:13)
    at /home/thettun/project_folder/funfun_viber/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/home/thettun/project_folder/funfun_viber/node_modules/express/lib/router/index.js:335:12)
    at next (/home/thettun/project_folder/funfun_viber/node_modules/express/lib/router/index.js:275:10)
    at textParser (/home/thettun/project_folder/funfun_viber/node_modules/body-parser/lib/types/text.js:60:7)
    at Layer.handle [as handle_request] (/home/thettun/project_folder/funfun_viber/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/home/thettun/project_folder/funfun_viber/node_modules/express/lib/router/index.js:317:13)
    at /home/thettun/project_folder/funfun_viber/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/home/thettun/project_folder/funfun_viber/node_modules/express/lib/router/index.js:335:12)
    at next (/home/thettun/project_folder/funfun_viber/node_modules/express/lib/router/index.js:275:10)
    at expressInit (/home/thettun/project_folder/funfun_viber/node_modules/express/lib/middleware/init.js:40:5)

Upvotes: 2

Views: 3024

Answers (1)

tintoverano
tintoverano

Reputation: 11

this topic solved it for me

i.e. don't use bodyParser when calling setWebhook, only on specific routes:

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

Upvotes: 1

Related Questions