Извините меня за столь глупый вопрос, я просто новичок)
Я хочу сделать обычного телеграм бота на python для группы.
Я сделал так, чтобы при отправки команды /start выскакивало сообщение.
Если в первый раз пишешь, то оно работает, а в следующие разы нет. Выдает Ошибку 400.
Вот код
import telebot
import telebot
from telebot import types
bot = telebot.TeleBot('1459835204:AAE2AO9nUSaBSIWTz5Rf9nnsmlyg5oyfOkc')
Text = 'Привет, я роздаю котов :) nНапиши в чат "Хочу кота", чтобы получить его'
img = open('Ржомба.png','rb')
@bot.message_handler(commands=['start'])
def welcome_message(message):
bot.send_photo(message.chat.id, img, caption = Text)
bot.polling(none_stop = True)
Вот ошибка :
2020-12-12 17:51:58,760 (util.py:66 WorkerThread2) ERROR — TeleBot: «ApiException occurred, args=(‘A request to the Telegram API was unsuccessful. The server returned HTTP 400 Bad Request. Response body:n[b'{«ok»:false,»error_code»:400,»description»:»Bad Request: file must be non-empty»}’]’,)
Traceback (most recent call last):
File «C:UsersМаринаAppDataLocalProgramsPythonPython38-32libsite-packagestelebotutil.py», line 60, in run
task(*args, **kwargs)
File «C:/Users/Марина/Desktop/telebot_for_group.py», line 14, in welcome_message
bot.send_photo(message.chat.id, img, caption = Text)
File «C:UsersМаринаAppDataLocalProgramsPythonPython38-32libsite-packagestelebot__init__.py», line 638, in send_photo
apihelper.send_photo(self.token, chat_id, photo, caption, reply_to_message_id, reply_markup,
File «C:UsersМаринаAppDataLocalProgramsPythonPython38-32libsite-packagestelebotapihelper.py», line 276, in send_photo
return _make_request(token, method_url, params=payload, files=files, method=’post’)
File «C:UsersМаринаAppDataLocalProgramsPythonPython38-32libsite-packagestelebotapihelper.py», line 60, in _make_request
return _check_result(method_name, result)[‘result’]
File «C:UsersМаринаAppDataLocalProgramsPythonPython38-32libsite-packagestelebotapihelper.py», line 79, in _check_result
raise ApiException(msg, method_name, result)
telebot.apihelper.ApiException: A request to the Telegram API was unsuccessful. The server returned HTTP 400 Bad Request. Response body:
[b'{«ok»:false,»error_code»:400,»description»:»Bad Request: file must be non-empty»}’]
«
2020-12-12 17:51:58,804 (__init__.py:420 MainThread) ERROR — TeleBot: «A request to the Telegram API was unsuccessful. The server returned HTTP 400 Bad Request. Response body:
[b'{«ok»:false,»error_code»:400,»description»:»Bad Request: file must be non-empty»}’]»
Помогите пожалуйста, если не трудно)
There will be errors when working with the API, and they must be correctly handled on the client.
An error is characterized by several parameters:
Error Code
Numerical value similar to HTTP status. Contains information on the type of error that occurred: for example, a data input error, privacy error, or server error. This is a required parameter.
Error Type
A string literal in the form of /[A-Z_0-9]+/
, which summarizes the problem. For example, AUTH_KEY_UNREGISTERED
. This is an optional parameter.
Error Database
A full human-readable JSON list of RPC errors that can be returned by all methods in the API can be found here », what follows is a description of its fields:
errors
— All error messages and codes for each method (object).- Keys: Error codes as strings (numeric strings)
- Values: All error messages for each method (object)
- Keys: Error messages (string)
- Values: An array of methods which may emit this error (array of strings)
descriptions
— Descriptions for every error mentioned inerrors
(and a few other errors not related to a specific method)- Keys: Error messages
- Values: Error descriptions
user_only
— A list of methods that can only be used by users, not bots.bot_only
— A list of methods that can only be used by bots, not users.
Error messages and error descriptions may contain printf
placeholders in key positions, for now only %d
is used to map durations contained in error messages to error descriptions.
Example:
{
"errors": {
"420": {
"2FA_CONFIRM_WAIT_%d": [
"account.deleteAccount"
],
"SLOWMODE_WAIT_%d": [
"messages.forwardMessages",
"messages.sendInlineBotResult",
"messages.sendMedia",
"messages.sendMessage",
"messages.sendMultiMedia"
]
}
},
"descriptions": {
"2FA_CONFIRM_WAIT_%d": "Since this account is active and protected by a 2FA password, we will delete it in 1 week for security purposes. You can cancel this process at any time, you'll be able to reset your account in %d seconds.",
"SLOWMODE_WAIT_%d": "Slowmode is enabled in this chat: wait %d seconds before sending another message to this chat.",
"FLOOD_WAIT_%d": "Please wait %d seconds before repeating the action."
},
"user_only": [
"account.deleteAccount"
],
"bot_only": [
"messages.setInlineBotResults"
]
}
Error Constructors
There should be a way to handle errors that are returned in rpc_error constructors.
Below is a list of error codes and their meanings:
303 SEE_OTHER
The request must be repeated, but directed to a different data center.
Examples of Errors:
- FILE_MIGRATE_X: the file to be accessed is currently stored in a different data center.
- PHONE_MIGRATE_X: the phone number a user is trying to use for authorization is associated with a different data center.
- NETWORK_MIGRATE_X: the source IP address is associated with a different data center (for registration)
- USER_MIGRATE_X: the user whose identity is being used to execute queries is associated with a different data center (for registration)
In all these cases, the error description’s string literal contains the number of the data center (instead of the X) to which the repeated query must be sent.
More information about redirects between data centers »
400 BAD_REQUEST
The query contains errors. In the event that a request was created using a form and contains user generated data, the user should be notified that the data must be corrected before the query is repeated.
Examples of Errors:
- FIRSTNAME_INVALID: The first name is invalid
- LASTNAME_INVALID: The last name is invalid
- PHONE_NUMBER_INVALID: The phone number is invalid
- PHONE_CODE_HASH_EMPTY: phone_code_hash is missing
- PHONE_CODE_EMPTY: phone_code is missing
- PHONE_CODE_EXPIRED: The confirmation code has expired
- API_ID_INVALID: The api_id/api_hash combination is invalid
- PHONE_NUMBER_OCCUPIED: The phone number is already in use
- PHONE_NUMBER_UNOCCUPIED: The phone number is not yet being used
- USERS_TOO_FEW: Not enough users (to create a chat, for example)
- USERS_TOO_MUCH: The maximum number of users has been exceeded (to create a chat, for example)
- TYPE_CONSTRUCTOR_INVALID: The type constructor is invalid
- FILE_PART_INVALID: The file part number is invalid
- FILE_PARTS_INVALID: The number of file parts is invalid
- FILE_PART_X_MISSING: Part X (where X is a number) of the file is missing from storage
- MD5_CHECKSUM_INVALID: The MD5 checksums do not match
- PHOTO_INVALID_DIMENSIONS: The photo dimensions are invalid
- FIELD_NAME_INVALID: The field with the name FIELD_NAME is invalid
- FIELD_NAME_EMPTY: The field with the name FIELD_NAME is missing
- MSG_WAIT_FAILED: A request that must be completed before processing the current request returned an error
- MSG_WAIT_TIMEOUT: A request that must be completed before processing the current request didn’t finish processing yet
401 UNAUTHORIZED
There was an unauthorized attempt to use functionality available only to authorized users.
Examples of Errors:
- AUTH_KEY_UNREGISTERED: The key is not registered in the system
- AUTH_KEY_INVALID: The key is invalid
- USER_DEACTIVATED: The user has been deleted/deactivated
- SESSION_REVOKED: The authorization has been invalidated, because of the user terminating all sessions
- SESSION_EXPIRED: The authorization has expired
- AUTH_KEY_PERM_EMPTY: The method is unavailable for temporary authorization key, not bound to permanent
403 FORBIDDEN
Privacy violation. For example, an attempt to write a message to someone who has blacklisted the current user.
404 NOT_FOUND
An attempt to invoke a non-existent object, such as a method.
406 NOT_ACCEPTABLE
Similar to 400 BAD_REQUEST, but the app must display the error to the user a bit differently.
Do not display any visible error to the user when receiving the rpc_error
constructor: instead, wait for an updateServiceNotification update, and handle it as usual.
Basically, an updateServiceNotification popup
update will be emitted independently (ie NOT as an Updates constructor inside rpc_result
but as a normal update) immediately after emission of a 406 rpc_error
: the update will contain the actual localized error message to show to the user with a UI popup.
An exception to this is the AUTH_KEY_DUPLICATED
error, which is only emitted if any of the non-media DC detects that an authorized session is sending requests in parallel from two separate TCP connections, from the same or different IP addresses.
Note that parallel connections are still allowed and actually recommended for media DCs.
Also note that by session we mean a logged-in session identified by an authorization constructor, fetchable using account.getAuthorizations, not an MTProto session.
If the client receives an AUTH_KEY_DUPLICATED
error, the session was already invalidated by the server and the user must generate a new auth key and login again.
420 FLOOD
The maximum allowed number of attempts to invoke the given method with the given input parameters has been exceeded. For example, in an attempt to request a large number of text messages (SMS) for the same phone number.
Error Example:
- FLOOD_WAIT_X: A wait of X seconds is required (where X is a number)
500 INTERNAL
An internal server error occurred while a request was being processed; for example, there was a disruption while accessing a database or file storage.
If a client receives a 500 error, or you believe this error should not have occurred, please collect as much information as possible about the query and error and send it to the developers.
Other Error Codes
If a server returns an error with a code other than the ones listed above, it may be considered the same as a 500 error and treated as an internal server error.
I am getting the correct response after doing some POC. I am using java com.github.pengrad
.
Below the code.
GetUpdatesResponse updatesResponse = bot.execute(new GetUpdates());
List updates = updatesResponse.updates();
for(Update update:updates){
InlineQuery inlineQuery = update.inlineQuery();
System.out.println(update);
System.out.println(inlineQuery);
System.out.println("----------------");
if(inlineQuery!=null) {
InlineQueryResult r1 = new InlineQueryResultPhoto("AgADBQADrqcxG5q8tQ0EKSz5JaZjzDWgvzIABL0Neit4ar9MsXYBAAEC", "https://api.telegram.org/file/bot230014106:AAGtWr8xUCqUy8HjSgSFrY3aCs4IZs00Omg/photo/file_1.jpg", "https://api.telegram.org/file/bot230014106:AAGtWr8xUCqUy8HjSgSFrY3aCs4IZs00Omg/photo/file_1.jpg");
BaseResponse baseResponse = bot.execute(new AnswerInlineQuery(inlineQuery.id(), r1)
.cacheTime(6000)
.isPersonal(true)
.nextOffset("offset")
.switchPmParameter("pmParam")
.switchPmText("pmText"));
System.out.println(baseResponse.isOk());
System.out.println(baseResponse.toString());
System.out.println(baseResponse.description());
}
}
Below the console output:
Update{update_id=465103212, message=null, edited_message=null, inline_query=InlineQuery{id='995145139265927135', from=User{id=231700283, first_name='Manabendra', last_name='Maji', username='null'}, location=null, query='hi', offset=''}, chosen_inline_result=null, callback_query=null}
InlineQuery{id='995145139265927135', from=User{id=231700283, first_name='Manabendra', last_name='Maji', username='null'}, location=null, query='hi', offset=''}
true
BaseResponse{ok=true, error_code=0, description='null'}
null
And I am getting proper response in my mobile telegram app also.
В данной статье собраны ошибки, возвращаемые API Telegram. Числовое значение аналогично статусу HTTP. Содержит информацию о типе возникшей ошибки: например, ошибка ввода данных, ошибка конфиденциальности или ошибка сервера.
303 SEE_OTHER
Запрос необходимо повторить, но направить в другой центр обработки данных.
Примеры ошибок:
- FILE_MIGRATE_X: файл, к которому нужно получить доступ, в настоящее время хранится в другом центре обработки данных.
- PHONE_MIGRATE_X: номер телефона, который пользователь пытается использовать для авторизации, связан с другим центром обработки данных.
- NETWORK_MIGRATE_X: исходный IP-адрес связан с другим центром обработки данных (для регистрации)
- USER_MIGRATE_X: пользователь, личность которого используется для выполнения запросов, связан с другим центром обработки данных (для регистрации)
Во всех этих случаях строковый литерал описания ошибки содержит номер центра обработки данных (вместо X), в который должен быть отправлен повторный запрос.
ОШИБКА 400, НЕВЕРНЫЙ ЗАПРОС
Запрос содержит ошибки. В случае, если запрос был создан с использованием формы и содержит данные, созданные пользователем, пользователь должен быть уведомлен о том, что данные должны быть исправлены, прежде чем запрос будет повторен.
Примеры ошибок:
- FIRSTNAME_INVALID: имя недействительно
- LASTNAME_INVALID: фамилия недействительна
- PHONE_NUMBER_INVALID: номер телефона недействителен
- PHONE_CODE_HASH_EMPTY: phone_code_hash отсутствует
- PHONE_CODE_EMPTY: phone_code отсутствует
- PHONE_CODE_EXPIRED: срок действия кода подтверждения истек
- API_ID_INVALID: комбинация api_id / api_hash недействительна
- PHONE_NUMBER_OCCUPIED: номер телефона уже используется
- PHONE_NUMBER_UNOCCUPIED: номер телефона еще не используется
- USERS_TOO_FEW: недостаточно пользователей (например, для создания чата)
- USERS_TOO_MUCH: превышено максимальное количество пользователей (например, для создания чата)
- TYPE_CONSTRUCTOR_INVALID: конструктор типа недействителен
- FILE_PART_INVALID: неверный номер части файла.
- FILE_PARTS_INVALID: недопустимое количество частей файла.
- FILE_PART_Х_MISSING: часть X (где X — номер) файла отсутствует в хранилище
- MD5_CHECKSUM_INVALID: контрольные суммы MD5 не совпадают
- PHOTO_INVALID_DIMENSIONS: размеры фотографии недействительны
- FIELD_NAME_INVALID: поле с именем FIELD_NAME недействительно
- FIELD_NAME_EMPTY: поле с названием FIELD_NAME отсутствует
- MSG_WAIT_FAILED: запрос, который должен быть выполнен перед обработкой текущего запроса, возвратил ошибку
- MSG_WAIT_TIMEOUT: запрос, который должен быть выполнен перед обработкой текущего запроса, еще не завершил обработку
401 ОШИБКА ДОСТУПА
Произошла попытка несанкционированного использования функций, доступных только авторизованным пользователям.
Примеры ошибок:
- AUTH_KEY_UNRIGN: Ключ не зарегистрирован в системе
- AUTH_KEY_INVALID: ключ недействителен
- USER_DEACTIVATED: пользователь удален / деактивирован
- SESSION_REVOKED: авторизация была аннулирована из-за того, что пользователь завершил все сеансы
- SESSION_EXPIRED: срок авторизации истек
- AUTH_KEY_PERM_EMPTY: метод недоступен для временного ключа авторизации, не привязан к постоянному
403 ЗАПРЕЩЕНО
Нарушение конфиденциальности. Например, попытка написать сообщение кому-то, кто занес текущего пользователя в черный список.
404 НЕ НАЙДЕНО
Попытка вызвать несуществующий объект, например метод.
406 NOT_ACCEPTABLE
Подобно 400 BAD_REQUEST , но приложение не должно отображать сообщения об ошибках для пользователя в пользовательском интерфейсе в результате этого ответа. Вместо этого сообщение об ошибке будет доставлено через updateServiceNotification.
420 FLOOD
Превышено максимально допустимое количество попыток вызвать данный метод с заданными входными параметрами. Например, при попытке запросить большое количество текстовых сообщений (SMS) на один и тот же номер телефона.
Пример ошибки:
- FLOOD_WAIT_X: требуется ожидание X секунд (где X — число)
500 ВНУТРЕННИЙ
Произошла внутренняя ошибка сервера во время обработки запроса; например, произошел сбой при доступе к базе данных или файловому хранилищу.
Если клиент получает ошибку 500 или вы считаете, что эта ошибка не должна была возникнуть, пожалуйста, соберите как можно больше информации о запросе и ошибке и отправьте ее разработчикам.
Другие коды ошибок
Если сервер возвращает ошибку с кодом, отличным от перечисленных выше, это может рассматриваться как ошибка 500 и рассматриваться как внутренняя ошибка сервера.
Время чтения статьи ⏳ 3 мин.
Как и любая ошибка, начинающаяся на четверку, 400 Bad Request указывает на возникшую проблему со стороны пользователя. Она появляется, когда возникшая неисправность не подходит ни под одну из категорий ошибок. Код 400 напрямую связан с клиентом (например, браузером) и означает, что запрос, отправленный пользователем, вызвал сбой еще до обработки сервером. Если вы столкнулись с ошибкой 400 в Telegram, проверьте правильность запроса и убедитесь, что он соответствует действующим протоколам и ограничениям. Также стоит обновить приложение Телеграм и перезапустить устройство.
Ниже перечислены наиболее распространенные ошибки 400 в Telegram и их значения:
- user is deactivated — это происходит, когда пользователь удалил свой номер телефона в Telegram или его номер находится в процессе деактивации.
- phone number invalid — это связано с тем, что пользователь неправильно указал свой номер телефона в Телеграм.
- bad request chat not found — происходит, когда пользователь не написал ничего в ваш телеграм-бот. Чтобы бот мог написать сообщение пользователю, пользователь должен сначала написать сообщение в бот.
- [400]Bad Request: wrong HTTP URL — это происходит, когда неправильно указана ссылка в рассылке Telegram. Чаще всего это связано с опечатками в ссылке.
- [400]Bad Request: can’t parse entities: Unexpected end tag at byte offset — это может произойти, если в теле письма не закрыты какие-либо HTML-теги.
- [400]Bad Request: MEDIA_CAPTION_TOO_LONG — это связано с ограничением в количестве символов в подписи к медиафайлам (1024 символа, включая пробелы).
- [400]Bad Request: message is too long — это говорит о том, что количество используемых символов в тексте письма превысило 4096 символов. Данное ограничение установлено Telegram (Телеграм).
- [400]Bad Request: wrong file identifier/HTTP URL specified — это связано с неправильным указанием идентификатора файла. При использовании «image url» изображение должно быть в формате «.jpeg».
- [400]Bad Request: failed to get HTTP URL content или Bad Request: wrong file identifier/HTTP URL specified — это может произойти, если превышен максимальный размер вложения (5 Мб для картинок и 20 Мб для других типов файлов).
- [400]Bad Request: unsupported URL protocol — это связано с неправильным указанием ссылки в синтаксисе кнопки. Например, при наличии лишнего пробела.
- bot was blocked by the user — это происходит, когда пользователь удаляет чат с ботом в Telegram, таким образом отписываясь от получения сообщений.
- bad request chat not found — это происходит, когда пользователь не написал ничего в ваш телеграм-бот. Чтобы бот мог написать сообщение пользователю, пользователь должен сначала написать сообщение в бот.
При возникновении указанных выше 400 ошибок в Телеграм происходит автоматическая отписка пользователя от вашего телеграм-бота, и статус меняется на «Отключен».
Ошибка 400 Telegram при создании бота
Пользователи, создавая бота в Telegram с использованием библиотеки Telebot, сталкиваются с ошибкой 404. Как исправить это значение?
Конкретно, ошибка 400: невозможно распознать кнопку встроенной клавиатуры. Кнопки текста встроенной клавиатуры не допускаются. Это происходит из-за того, что в коде использована неправильная функция для встроенной клавиатуры. Она должна содержать либо данные, либо ссылку, но в данном случае используется только текст кнопки.
Неправильно: markup.add(types.InlineKeyboardButton(‘Button’))
Правильно: markup.add(types.InlineKeyboardButton(‘Button’, callback_data=’qwerty’))
или
markup.add(types.InlineKeyboardButton(‘Button’, url=’google.com’))
Кроме того, если вы получаете ошибку 404 при работе с Telegram API, убедитесь, что вы используете правильный токен доступа и что ваш бот Телеграм настроен правильно.
Пользователь забанен в канале Telegram: ошибка #400
Что делать, когда вы получаете сообщение об ошибке «#400_USER_BANNED_IN_CHANNEL» при отправке сообщений в Telegram.
Ошибка Телеграм с кодом 400: have no write access to the chat
При работе с Телеграм ботом может возникнуть ошибка с кодом 400, которая сообщает о том, что у вас нет доступа для записи в чат. Такая ситуация может возникнуть, если ваш аккаунт попал в лимит Телеграмм, или если вы не добавили аккаунт в Телеграм.
Описание и причина ошибки «Have no write access to the chat» связаны с невозможностью отправки сообщений в чат. Если вы столкнулись с данной ошибкой, то нужно проверить наличие доступа для записи в чат.
Если причина ошибки не связана с лимитами или отсутствием аккаунта, то стоит проверить текст сообщения на наличие ошибок. Возможно, в сообщении есть некорректные значения, которые нужно убрать.
Также, для избежания ошибки «Bad Request» в Telegram, необходимо убедиться, что все параметры переданы корректно. В целом, данная ошибка Телеграм с кодом 400 может возникнуть в самых разных ситуациях, поэтому стоит быть внимательным и проверять все параметры и данные, которые вы передаете в Телеграмм бот.
Ошибка 400 в Телеграм: Phone_Number_Flood
При попытке входа в Telegram возникает ошибка: #400:Phone_Number_Flood. Эта ошибка возникает, когда вы пытаетесь авторизоваться слишком много раз за короткий промежуток времени.
Рекомендуется подождать 24 часа и попробовать войти снова в Телеграм. Это распространенная проблема, с которой сталкиваются многие пользователи. Вы можете посетить страницу рекомендаций, чтобы узнать, как избежать данной ошибки в будущем.