javascript - 在 Node js中将json数组返回给电报机器人?

标签 javascript arrays json node.js

我的电报机器人有点卡住了。我已经用 Node js 构建了机器人,我的后端是用 Java 编写的。因此,基本上,当用户在机器人中输入类别时,它将返回具有不同类别的选项列表。现在,我的 Java Web 服务将类别作为 JSON 数组返回。当我尝试将 JSON 数组返回给我的机器人时,出现一些错误。我可能做错了什么?这是我的代码。

Bot.js

telegram.on("text",function (message,req,res) {

    var messagetext = message.text;
    var receiver = message.chat.id; //the user receiving the response from the bot
    var timestamp = message.date; //timestamp
    var msgid = message.message_id;//message id
    var sender = message.from.id; //id of the telegram bot
    console.log("message",messagetext);
    fd.itemcategory().then(function (v) {
        console.log(v);
        telegram.sendMessage(sender,v);


    });
});

Botservice.js

module.exports = {
    itemcategory: function(callback) {
        var categories=[];
        return new Promise(function(resolve, reject){
            request('https://********.ngrok.io/', { json: true },  function(err,res,body) {

                for(i=0;i<body.categories.length;i++){
                    categories.push(body.categories[i].categories.name);
                }
                resolve(categories);


            });



        });


    }

};

错误日志

Unhandled rejection Error: ETELEGRAM: 400 Bad Request: message text is empty
    at TelegramError.Error (native)
    at TelegramError.BaseError (C:\Users\Brian\Desktop\TelegramBot\node_modules\
node-telegram-bot-api\lib\errors.js:22:108)
    at new TelegramError (C:\Users\Brian\Desktop\TelegramBot\node_modules\node-t
elegram-bot-api\lib\errors.js:90:117)
    at C:\Users\Brian\Desktop\TelegramBot\node_modules\node-telegram-bot-api\lib
\telegram.js:213:15
    at tryCatcher (C:\Users\Brian\Desktop\TelegramBot\node_modules\bluebird\js\r
elease\util.js:16:23)
    at Promise._settlePromiseFromHandler (C:\Users\Brian\Desktop\TelegramBot\nod
e_modules\bluebird\js\release\promise.js:512:31)
    at Promise._settlePromise (C:\Users\Brian\Desktop\TelegramBot\node_modules\b
luebird\js\release\promise.js:569:18)
    at Promise._settlePromise0 (C:\Users\Brian\Desktop\TelegramBot\node_modules\
bluebird\js\release\promise.js:614:10)
    at Promise._settlePromises (C:\Users\Brian\Desktop\TelegramBot\node_modules\
bluebird\js\release\promise.js:693:18)
    at Async._drainQueue (C:\Users\Brian\Desktop\TelegramBot\node_modules\bluebi
rd\js\release\async.js:133:16)
    at Async._drainQueues (C:\Users\Brian\Desktop\TelegramBot\node_modules\blueb
ird\js\release\async.js:143:10)
    at Immediate.Async.drainQueues [as _onImmediate] (C:\Users\Brian\Desktop\Tel
egramBot\node_modules\bluebird\js\release\async.js:17:14)
    at processImmediate [as _immediateCallback] (timers.js:367:17)

v - Json 数组

[ 'Delivery',
  'Dine-out',
  'Nightlife',
  'Catching-up',
  'Takeaway',
  'Cafes',
  'Daily Menus',
  'Breakfast',
  'Lunch',
  'Dinner',
  'Pubs & Bars',
  'Pocket Friendly Deli
  'Clubs & Lounges' ]

最佳答案

根据documentation ,消息必须是字符串格式。您正在发送一个数组。这可能会导致错误。

所以你需要手动将数组解析为字符串。下面是一些实现它的代码:

var text = '';
for (var i = 0; i < v.length; i++) {
    text += v[i] + ' '; // or however you want to format it
}
telegram.sendMessage(sender, text);

关于javascript - 在 Node js中将json数组返回给电报机器人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45996105/

相关文章:

php - 如何使用 jQuery 在表单上以红色字体显示错误消息?

javascript ,在名称也是 attrName 的函数中使用 this.attrName

javascript - 修改多维数组的一个索引会导致其他所有子数组发生变异?

javascript - 仅推送数组中的唯一元素

.net - 如何正确处理 WCF 数据服务的 JSON 日期格式问题

java - 如何使用带有 json 的 Map 从数据库设置 map latlng 值?

javascript - 具有多个下拉过滤器的页面

javascript - 根据另一个选择器中的值动态填充一个选择器

c - 指针的问题 - C

javascript - 如何解决 Access-Control-Allow-Origin 错误?