首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Viber数据失败并返回错误-“setWebhook”参数必须是string、TypedArray或DataView类型之一。接收到的类型对象

Viber数据失败并返回错误-“setWebhook”参数必须是string、TypedArray或DataView类型之一。接收到的类型对象
EN

Stack Overflow用户
提问于 2019-10-09 21:06:04
回答 1查看 2.5K关注 0票数 2

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

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

当尝试在本地服务器配置中使用ngrok时,它工作得很好。在实时服务器配置中设置webhook时的唯一问题。请检查下面的代码

代码语言:javascript
复制
        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‘文件

代码语言:javascript
复制
        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;
代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2019-12-19 06:29:36

这个topic帮我解决了这个问题

例如,在调用setWebhook时不要使用bodyParser,只在特定的路由上使用:

代码语言:javascript
复制
// app.use(bodyParser.json());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58304866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档