web-dev-qa-db-fra.com

Telegram Bot obtient "Mauvaise demande: le texte du message est vide"

Lorsque mon bot Telegram envoie sendMessage au serveur Telegram, il obtient le message d'erreur:

{"ok":false,"error_code":400,"description":"Bad Request: message text is empty"}

Le problème est apparu ce matin, avant que mon bot ait travaillé toute une année sans erreur. La commande GetUpdates fonctionne bien comme avant. J'utilise la méthode GET HTTP pour envoyer des virgules:

https://api.telegram.org/bot<MyToken>/sendMessage

avec des données encodées en UTF-8:

{"chat_id":123456789,"text":"any text"}

Quelqu'un l'a-t-il rencontré?

15
Kryvich

Si le problème persiste, essayez de modifier votre demande de boucle. Pour moi, ajouter un en-tête 'Content-Type: application/json' et -d '{"chat_id":133057877,"text":"any text"}' problème corrigé

4
Drey

J'ai aussi eu cette erreur. J'ai utilisé la méthode sendMessage () uniquement avec "bas niveau" Node https :

const https = require('https');

const data = JSON.stringify({
  chat_id: config.telegram.chatId,
  text: 'some ASCII text'),
});

const options = {
  hostname: 'api.telegram.org',
  port: 443,
  path: `/bot${config.telegram.botToken}/sendMessage`,
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': data.length
  }
};

const req = https.request(options, (res) => {
  let chunks = [];
  res.on('data', chunk => chunks.Push(chunk));
  res.on('end', () => {
    const resBody = Buffer.concat(chunks).toString('utf8');
    if (res.statusCode === 200) {
      console.log(`Message sent`);
    } else {
      console.error(`${res.statusCode} ${res.statusMessage} ${res.headers['content-type']}
${resBody}`)
    }
  });
});

req.on('error', (error) => {
  reject(error)
});

req.write(data);
req.end();

Et pour ASCII text it was ok, cependant pour certains textes non ASCII j'ai eu:

const data = JSON.stringify({
  chat_id: config.telegram.chatId,
  text: 'Привет Мир!'),
});

Erreur:

400 Bad Request application/json
{"ok":false,"error_code":400,"description":"Bad Request: message text is empty"}

Dans mon cas, la longueur du contenu a été calculée avec une longueur non valide 'Content-Length': data.length (invalide pour Telegram? ...), donc je commente cet en-tête et maintenant ça marche pour UTF-8!

  headers: {
    'Content-Type': 'application/json',
    //'Content-Length': data.length
  }
0
Alexey Volodko

Votre bot est bloqué dans un état où il envoie un message vide. D'une manière ou d'une autre, il ne traitera aucune autre demande sur la même URL jusqu'à ce que cet état soit modifié. Imprimez-vous une liste qui a la possibilité d'être vide?, Comme je l'ai fait dans mon bot de liste de tâches. Vous pouvez envisager d'exécuter des segments de votre code un par un jusqu'à ce que vous trouviez le segment d'impression de message vide.

0
Mantahan Srivastava

Une autre façon d'envoyer un message en émulant un formulaire:

curl -s -X POST https://api.telegram.org/bot{apitoken}/sendMessage \ -F chat_id='-1234567890' -F text='test message'

0
ededed