从 Viber bot 向 botbuilder-viber 发送消息时出现错误 ERR_INVALID_ARG_TYPE

Posted

技术标签:

【中文标题】从 Viber bot 向 botbuilder-viber 发送消息时出现错误 ERR_INVALID_ARG_TYPE【英文标题】:Error ERR_INVALID_ARG_TYPE when sending message from Viber bot to botbuilder-viber 【发布时间】:2018-10-31 00:05:12 【问题描述】:

npm 模块中的问题

https://www.npmjs.com/package/botbuilder-viber

平台

操作系统:Ubuntu

节点版本:9.3.0

NPM 版本:5.5.1。

代码

var viber = require('botbuilder-viber');
var express = require('express');
var bodyParser = require('body-parser');

var viberOptions = 
  Token: '***',
  Name: '***',
  AvatarUrl: '***'

var viberChannel = new viber.ViberEnabledConnector(viberOptions);

var expressApp = express();

expressApp.listen(process.env.port || process.env.PORT || 3978, function() 
    console.log("Express server is running.");
);

expressApp.use(bodyParser.urlencoded( extended: false ));

expressApp.use(bodyParser.json());

bot.connector(viber.ViberChannelId, viberChannel);

expressApp.use('/viber/webhook', viberChannel.listen());

预期行为

没有错误

实际行为

当我从我的 viber 机器人发送消息时出错(每次重复两次)。

TypeError [ERR_INVALID_ARG_TYPE]:“data”参数必须是 string、TypedArray 或 DataView 类型之一 在 Hmac.update (internal/crypto/hash.js:53:11) 在 MessageValidator._calculateHmacFromMessage (/app/node_modules/viber-bot/lib/message/message-validator.js:17:54) 在 MessageValidator.validateMessage (/app/node_modules/viber-bot/lib/message/message-validator.js:11:30) 在 _app.use (/app/node_modules/viber-bot/lib/middleware.js:61:32) 在 Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) 在 trim_prefix (/app/node_modules/express/lib/router/index.js:317:13) 在 /app/node_modules/express/lib/router/index.js:284:7 在 Function.process_params (/app/node_modules/express/lib/router/index.js:335:12) 在下一个(/app/node_modules/express/lib/router/index.js:275:10) 在 textParser (/app/node_modules/body-parser/lib/types/text.js:60:7) 在 Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) 在 trim_prefix (/app/node_modules/express/lib/router/index.js:317:13) 在 /app/node_modules/express/lib/router/index.js:284:7 在 Function.process_params (/app/node_modules/express/lib/router/index.js:335:12) 在下一个(/app/node_modules/express/lib/router/index.js:275:10) 在 expressInit (/app/node_modules/express/lib/middleware/init.js:40:5) 在 Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) 在 trim_prefix (/app/node_modules/express/lib/router/index.js:317:13) 在 /app/node_modules/express/lib/router/index.js:284:7 在 Function.process_params (/app/node_modules/express/lib/router/index.js:335:12) 在下一个(/app/node_modules/express/lib/router/index.js:275:10) 在查询 (/app/node_modules/express/lib/middleware/query.js:45:5) 在 Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) 在 trim_prefix (/app/node_modules/express/lib/router/index.js:317:13) 在 /app/node_modules/express/lib/router/index.js:284:7 在 Function.process_params (/app/node_modules/express/lib/router/index.js:335:12) 在下一个(/app/node_modules/express/lib/router/index.js:275:10) 在 Function.handle (/app/node_modules/express/lib/router/index.js:174:3)

TypeError [ERR_INVALID_ARG_TYPE]:“data”参数必须是 string、TypedArray 或 DataView 类型之一 在 Hmac.update (internal/crypto/hash.js:53:11) 在 MessageValidator._calculateHmacFromMessage (/app/node_modules/viber-bot/lib/message/message-validator.js:17:54) 在 MessageValidator.validateMessage (/app/node_modules/viber-bot/lib/message/message-validator.js:11:30) 在 _app.use (/app/node_modules/viber-bot/lib/middleware.js:61:32) 在 Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) 在 trim_prefix (/app/node_modules/express/lib/router/index.js:317:13) 在 /app/node_modules/express/lib/router/index.js:284:7 在 Function.process_params (/app/node_modules/express/lib/router/index.js:335:12) 在下一个(/app/node_modules/express/lib/router/index.js:275:10) 在 textParser (/app/node_modules/body-parser/lib/types/text.js:60:7) 在 Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) 在 trim_prefix (/app/node_modules/express/lib/router/index.js:317:13) 在 /app/node_modules/express/lib/router/index.js:284:7 在 Function.process_params (/app/node_modules/express/lib/router/index.js:335:12) 在下一个(/app/node_modules/express/lib/router/index.js:275:10) 在 expressInit (/app/node_modules/express/lib/middleware/init.js:40:5) 在 Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) 在 trim_prefix (/app/node_modules/express/lib/router/index.js:317:13) 在 /app/node_modules/express/lib/router/index.js:284:7 在 Function.process_params (/app/node_modules/express/lib/router/index.js:335:12) 在下一个(/app/node_modules/express/lib/router/index.js:275:10) 在查询 (/app/node_modules/express/lib/middleware/query.js:45:5) 在 Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) 在 trim_prefix (/app/node_modules/express/lib/router/index.js:317:13) 在 /app/node_modules/express/lib/router/index.js:284:7 在 Function.process_params (/app/node_modules/express/lib/router/index.js:335:12) 在下一个(/app/node_modules/express/lib/router/index.js:275:10) 在 Function.handle (/app/node_modules/express/lib/router/index.js:174:3)

【问题讨论】:

你试过不使用快递吗? 是的,我尝试使用 Restify,而不是错误,当我发送消息时没有任何反应。回到 Express:我完全删除了 bodyParser.json(相同的 express.json)并且这个 viber-connector 开始工作,但现在我无法处理我的项目的端点,因为删除了 json 解析。 @EricDahlvang 我在 bodyparser 文档中找到了决定 :) 将 bodyparser 添加到特定路由器:var jsonParser = bodyParser.json(); app.post('/api/users', jsonParser, function (req, res) ) 我认为您需要向npmjs.com/package/botbuilder-viber 的作者寻求帮助。 【参考方案1】:

在此连接器开始工作后,我仅将 bodyparser 添加到特定路由。

【讨论】:

以上是关于从 Viber bot 向 botbuilder-viber 发送消息时出现错误 ERR_INVALID_ARG_TYPE的主要内容,如果未能解决你的问题,请参考以下文章

从Viber bot发送消息给订阅用户

如何使用 Python 向 Viber 机器人发送消息?

Microsoft BotBuilder Bot State API 已弃用。 , 在理解新架构方面需要帮助

Viber REST API,如何找到唯一的 Viber 用户 ID?

Nodejs 和 microsoft bot 框架

Heroku Hosting Microsoft Bot Framework Chatbot 不工作