Ошибка необработанного отклонения: ETELEGRAM: 400 Неверный запрос: текст сообщения пуст

#javascript #node.js #json #telegram #node-telegram-bot-api

#javascript #node.js #json #telegram #узел-telegram-bot-api

Вопрос:

Я новичок в telegram bot и node js, я разрабатываю простого бота, который вызывает URL-адреса API для получения объектов json, но у меня эта ошибка с командой. Это код команды:

 bot.onText(//fixtures/, (msg) => {
  const chatId = msg.chat.id;
  var out = "";

  function myFunction(arr) {
      var i;
      for(i = 0; i < arr.length; i  ) {
          out  = arr[i].name   "--";
      }
  }

  request.onreadystatechange = function() {
      if (this.readyState == 4 amp;amp; this.status == 200) {
          var myArr = JSON.parse(this.responseText);
          myFunction(myArr);
      }
  };

  request.open("GET", url, true);
  request.send();

  bot.sendMessage(chatId, out);
  

И это полная ошибка:

 Unhandled rejection Error: ETELEGRAM: 400 Bad Request: message text is empty
at request.then.resp (C:UsersUtente1DesktopMyFootballBotnode_modulesnode-telegram-bot-apisrctelegram.js:280:15)
at tryCatcher (C:UsersUtente1DesktopMyFootballBotnode_modulesbluebirdjsreleaseutil.js:16:23)
at Promise._settlePromiseFromHandler (C:UsersUtente1DesktopMyFootballBotnode_modulesbluebirdjsreleasepromise.js:512:31)
at Promise._settlePromise (C:UsersUtente1DesktopMyFootballBotnode_modulesbluebirdjsreleasepromise.js:569:18)
at Promise._settlePromise0 (C:UsersUtente1DesktopMyFootballBotnode_modulesbluebirdjsreleasepromise.js:614:10)
at Promise._settlePromises (C:UsersUtente1DesktopMyFootballBotnode_modulesbluebirdjsreleasepromise.js:694:18)
at _drainQueueStep (C:UsersUtente1DesktopMyFootballBotnode_modulesbluebirdjsreleaseasync.js:138:12)
at _drainQueue (C:UsersUtente1DesktopMyFootballBotnode_modulesbluebirdjsreleaseasync.js:131:9)
at Async._drainQueues (C:UsersUtente1DesktopMyFootballBotnode_modulesbluebirdjsreleaseasync.js:147:5)
at Immediate.Async.drainQueues [as _onImmediate] (C:UsersUtente1DesktopMyFootballBotnode_modulesbluebirdjsreleaseasync.js:17:14)
at runCallback (timers.js:705:18)
at tryOnImmediate (timers.js:676:5)
at processImmediate (timers.js:658:5)
  

Комментарии:

1. Переменная запроса — это простой вариант xmlhttprequest: var request = new XMLHttpRequest();

Ответ №1:

Вы должны отправить свое сообщение после успешного ответа на запрос ajax. Переместить bot.sendMessage(chatId, out); внутрь onReadyStateChange обратного вызова:

 request.onreadystatechange = function() {
    if (this.readyState == 4 amp;amp; this.status == 200) {
        var myArr = JSON.parse(this.responseText);
        myFunction(myArr);
        bot.sendMessage(chatId, out);
    }
};
  

Ответ №2:

Вам нужно будет прочитать текст, полученный от бота Telegram. Один из способов сделать это -:

 var out = msg.text;
  

Итак, у вас будет это:

  bot.onText(//fixtures/, (msg) => {
 const chatId = msg.chat.id;
  var out = msg.text;

  function myFunction(arr) {
      var i;
      for(i = 0; i < arr.length; i  ) {
          out  = arr[i].name   "--";
      }
  }

 request.onreadystatechange = 
function() {
      if (this.readyState == 4 amp;amp; 
      this.status == 200) {
        var myArr = JSON.parse(this.responseText);
        myFunction(myArr);
      }
  };

  request.open("GET", url, true);
  request.send();

  bot.sendMessage(chatId, out);