web-dev-qa-db-ja.com

Telegram Botが「Bad Request:message text is empty」を取得する

TelegramボットがsendMessageをTelegramサーバーに送信すると、エラーメッセージが表示されます。

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

今朝、問題が発生しました。その前に、ボットがエラーなく1年間動作しました。 GetUpdatesコマンドは以前と同様に機能します。 GET HTTPメソッドを使用してコンマを送信します。

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

uTF-8でエンコードされたデータが添付されている場合:

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

誰かがこれに遭遇しましたか?

15
Kryvich

それでも問題が解決しない場合は、カールリクエストを変更してみてください。ヘッダーを追加する'Content-Type: application/json'および-d '{"chat_id":133057877,"text":"any text"}'修正された問題

4
Drey

私もこのエラーを受け取りました。私は sendMessage() メソッドを「低レベル」でのみ使用しました 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();

ASCIIテキストの場合は問題ありませんでしたが、ASCII以外のテキストの場合は次のようになりました。

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

エラー:

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

私の場合、コンテンツの長さは無効な長さで計算されました'Content-Length': data.length(Telegramでは無効?...)なので、このヘッダーをコメント化すると、UTF-8

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

ボットが空のメッセージを送信している状態になっています。どういうわけか、その状態が変更されるまで、同じURL上の他の要求は処理されません。私のto-doリストボットで行ったように、空である可能性のあるリストを印刷していますか?空のメッセージ出力セグメントが見つかるまで、コードのセグメントを1つずつ実行することを検討できます。

0

フォームをエミュレートしてメッセージを送信する別の方法:

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

0
ededed