【问题标题】:Viber setWebhook failed with error - The "data" argument must be one of type string, TypedArray, or DataView. Received type objectViber setWebhook 因错误而失败 - “数据”参数必须是字符串、TypedArray 或 DataView 类型之一。接收到的类型对象
【发布时间】:2020-02-06 20:00:24
【问题描述】:

尝试设置 viber webhook。我已经有一个快速服务器设置。所以我只是将机器人添加为中间件。一切都已找到,服务器已启动并正在运行。

一旦调用bot.setWebhook(process.env.VB_WEBHOOK_URL),它会抛出错误说--> The "data" argument must be one of type string, TypedArray, or DataView. Received type object

在本地服务器配置中尝试使用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]: 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)

【问题讨论】:

  • process.env.VB_API_KEY 在吗?你能再确认一下吗?通过控制台记录
  • @AritraChakraborty 是的。 process.env.VB_API_KEY 打印密钥。 console.log() 显示密钥。

标签: node.js bots webhooks viber viber-api


【解决方案1】:

这个topic 帮我解决了

即调用 setWebhook 时不要使用 bodyParser,仅在特定路由上使用:

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

【讨论】:

  • 您应该详细说明您的答案。像这样的简短回复更适合评论而不是答案
猜你喜欢
  • 2022-01-21
  • 2021-10-27
  • 2021-03-16
  • 2021-08-07
  • 1970-01-01
  • 2019-10-13
  • 1970-01-01
  • 2020-06-20
  • 2020-12-09
相关资源
最近更新 更多