Отправка изображения telegram api python
Light mode Dark mode Auto light/dark mode
PTB has undergone significant changes in v20. Please read the documentation carefully and also check out the transition guide in the wiki.
- Animation
- Audio
- BotCommand
- BotCommandScope
- BotCommandScopeAllChatAdministrators
- BotCommandScopeAllGroupChats
- BotCommandScopeAllPrivateChats
- BotCommandScopeChat
- BotCommandScopeChatAdministrators
- BotCommandScopeChatMember
- BotCommandScopeDefault
- BotDescription
- BotName
- BotShortDescription
- CallbackQuery
- Chat
- ChatAdministratorRights
- ChatInviteLink
- ChatJoinRequest
- ChatLocation
- ChatMember
- ChatMemberAdministrator
- ChatMemberBanned
- ChatMemberLeft
- ChatMemberMember
- ChatMemberOwner
- ChatMemberRestricted
- ChatMemberUpdated
- ChatPermissions
- ChatPhoto
- ChatShared
- Contact
- Dice
- Document
- File
- ForceReply
- ForumTopic
- ForumTopicClosed
- ForumTopicCreated
- ForumTopicEdited
- ForumTopicReopened
- GeneralForumTopicHidden
- GeneralForumTopicUnhidden
- InlineKeyboardButton
- InlineKeyboardMarkup
- InputFile
- InputMedia
- InputMediaAnimation
- InputMediaAudio
- InputMediaDocument
- InputMediaPhoto
- InputMediaVideo
- InputSticker
- KeyboardButton
- KeyboardButtonPollType
- KeyboardButtonRequestChat
- KeyboardButtonRequestUser
- Location
- LoginUrl
- MenuButton
- MenuButtonCommands
- MenuButtonDefault
- MenuButtonWebApp
- Message
- MessageAutoDeleteTimerChanged
- MessageEntity
- MessageId
- PhotoSize
- Poll
- PollAnswer
- PollOption
- ProximityAlertTriggered
- ReplyKeyboardMarkup
- ReplyKeyboardRemove
- SentWebAppMessage
- SwitchInlineQueryChosenChat
- TelegramObject
- Update
- User
- UserProfilePhotos
- UserShared
- Venue
- Video
- VideoChatEnded
- VideoChatParticipantsInvited
- VideoChatScheduled
- VideoChatStarted
- VideoNote
- Voice
- WebAppData
- WebAppInfo
- WebhookInfo
- WriteAccessAllowed
- ChosenInlineResult
- InlineQuery
- InlineQueryResult
- InlineQueryResultArticle
- InlineQueryResultAudio
- InlineQueryResultCachedAudio
- InlineQueryResultCachedDocument
- InlineQueryResultCachedGif
- InlineQueryResultCachedMpeg4Gif
- InlineQueryResultCachedPhoto
- InlineQueryResultCachedSticker
- InlineQueryResultCachedVideo
- InlineQueryResultCachedVoice
- InlineQueryResultContact
- InlineQueryResultDocument
- InlineQueryResultGame
- InlineQueryResultGif
- InlineQueryResultLocation
- InlineQueryResultMpeg4Gif
- InlineQueryResultPhoto
- InlineQueryResultsButton
- InlineQueryResultVenue
- InlineQueryResultVideo
- InlineQueryResultVoice
- InputMessageContent
- InputTextMessageContent
- InputLocationMessageContent
- InputVenueMessageContent
- InputContactMessageContent
- InputInvoiceMessageContent
- Credentials
- DataCredentials
- EncryptedCredentials
- EncryptedPassportElement
- FileCredentials
- IdDocumentData
- PassportData
- PassportElementError
- PassportElementErrorDataField
- PassportElementErrorFile
- PassportElementErrorFiles
- PassportElementErrorFrontSide
- PassportElementErrorReverseSide
- PassportElementErrorSelfie
- PassportElementErrorTranslationFile
- PassportElementErrorTranslationFiles
- PassportElementErrorUnspecified
- PassportFile
- PersonalDetails
- ResidentialAddress
- SecureData
- SecureValue
- Application
- ApplicationBuilder
- ApplicationHandlerStop
- BaseUpdateProcessor
- CallbackContext
- ContextTypes
- Defaults
- ExtBot
- Job
- JobQueue
- SimpleUpdateProcessor
- Updater
- Handlers
- BaseHandler
- CallbackQueryHandler
- ChatJoinRequestHandler
- ChatMemberHandler
- ChosenInlineResultHandler
- CommandHandler
- ConversationHandler
- filters Module
- InlineQueryHandler
- MessageHandler
- PollAnswerHandler
- PollHandler
- PreCheckoutQueryHandler
- PrefixHandler
- ShippingQueryHandler
- StringCommandHandler
- StringRegexHandler
- TypeHandler
- arbitrarycallbackdatabot.py
- chatmemberbot.py
- contexttypesbot.py
- conversationbot.py
- conversationbot2.py
- customwebhookbot.py
- deeplinking.py
- echobot.py
- errorhandlerbot.py
- inlinebot.py
- inlinekeyboard.py
- inlinekeyboard2.py
- nestedconversationbot.py
- passportbot.py
- paymentbot.py
- persistentconversationbot.py
- pollbot.py
- rawapibot.py
- timerbot.py
- webappbot.py
Telegram бот на Python, отправка файлов, встроенная клавиатура
Это вторая часть статьи, где мы продолжим создавать нашего телеграм бота на Python, и научим его отправлять файлы и выводить настраиваемую клавиатуру.
Отправка файлов Telegram API
В Telegram API есть три способа отправки файлов, для демонстрации воспользуемся методом sendPhoto и добавим три функции для отправки фотографии.
Первая способ: Предоставить файл по URL, Telegram скачает и отправит его (максимальный размер 5 МБ).
def send_photo_url(chat_id, img_url): requests.get(f'/sendPhoto?chat_id=&photo=')
Второй способ: Отправить файл с компьютера (максимальный размер фотографий — 10 МБ, для остальных файлов — 50 МБ).
def send_photo_file(chat_id, img): files = requests.post(f'/sendPhoto?chat_id=', files=files)
Третий способ: Отправить, передав в параметрах file_id файла который уже хранится где-то на серверах Telegram (ограничений нет).
def send_photo_file_id(chat_id, file_id): requests.get(f'/sendPhoto?chat_id=&photo=')
Проверка
Почти все готово, осталось немного отредактировать функцию check_message и приступим к проверке бота.
def check_message(chat_id, message): if message.lower() in ['привет', 'hello']: send_message(chat_id, 'Привет :)') elif message.lower() in 'фото по url': # Отправить URL-адрес картинки (телеграм скачает его и отправит) send_photo_url(chat_id, 'https://ramziv.com/static/assets/img/home-bg.jpg') elif message.lower() in 'фото с компьютера': # Отправить файл с компьютера send_photo_file(chat_id, 'photo.jpg') elif message.lower() in 'фото с сервера телеграм': # Отправить id файла (файл уже хранится где-то на серверах Telegram) send_photo_file_id(chat_id, 'AgACAgIAAxkBAAMqYVGBbdbivL53IzKLfUKUClBnB0cAApy0MRtfMZBKHL0tNw9aITwBAAMCAAN4AAMhBA')
import requests import time TOKEN = 'токен' URL = 'https://api.telegram.org/bot' def get_updates(offset=0): result = requests.get(f'/getUpdates?offset=').json() return result['result'] def send_message(chat_id, text): requests.get(f'/sendMessage?chat_id=&text=') def send_photo_url(chat_id, img_url): requests.get(f'/sendPhoto?chat_id=&photo=') def send_photo_file(chat_id, img): files = requests.post(f'/sendPhoto?chat_id=', files=files) def send_photo_file_id(chat_id, file_id): requests.get(f'/sendPhoto?chat_id=&photo=') def check_message(chat_id, message): if message.lower() in ['привет', 'hello']: send_message(chat_id, 'Привет :)') elif message.lower() in 'фото по url': # Отправить URL-адрес картинки (телеграм скачает его и отправит) send_photo_url(chat_id, 'https://ramziv.com/static/assets/img/home-bg.jpg') elif message.lower() in 'фото с компьютера': # Отправить файл с компьютера send_photo_file(chat_id, 'photo.jpg') elif message.lower() in 'фото с сервера телеграм': # Отправить id файла (файл уже хранится где-то на серверах Telegram) send_photo_file_id(chat_id, 'AgACAgIAAxkBAAMqYVGBbdbivL53IzKLfUKUClBnB0cAApy0MRtfMZBKHL0tNw9aITwBAAMCAAN4AAMhBA') def run(): update_id = get_updates()[-1]['update_id'] # Присваиваем ID последнего отправленного сообщения боту while True: time.sleep(2) messages = get_updates(update_id) # Получаем обновления for message in messages: # Если в обновлении есть ID больше чем ID последнего сообщения, значит пришло новое сообщение if update_id < message['update_id']: update_id = message['update_id'] # Присваиваем ID последнего отправленного сообщения боту # Отвечаем тому кто прислал сообщение боту check_message(message['message']['chat']['id'], message['message']['text']) if __name__ == '__main__': run()
Таким образом вы можете отправить документ, видео, или аудиофайл заменив в URL метод sendPhoto на подходящий.
- sendVoice Используйте этот метод для отправки аудиофайлов, если вы хотите, чтобы клиент Telegram отображал файл как воспроизводимое голосовое сообщение.
- sendDocument Используйте этот метод для отправки общих файлов.
- sendAudio Используйте этот метод для отправки аудиофайлов, если вы хотите, чтобы клиент Telegram отображал их в музыкальном проигрывателе.
- sendVideo Используйте этот метод для отправки видеофайлов, клиент Telegram поддерживают видео в формате mp4 (другие форматы могут быть отправлены как документ ).
- sendPhoto Используйте этот метод для отправки фотографий.
С полным списком методов можно ознакомиться здесь
Встроенная клавиатура
Добавим две функции для вывода настраиваемой клавиатуры в телеграм
InlineKeyboardMarkup - Этот объект представляет собой встроенную клавиатуру, которая появляется рядом с отправленным сообщением.
def inline_keyboard(chat_id, text): reply_markup = ]]> data = requests.post(f'/sendMessage', data=data)
ReplyKeyboardMarkup - Этот объект представляет собой настраиваемую клавиатуру с параметрами ответа
def reply_keyboard(chat_id, text): reply_markup = < "keyboard": [["Фото по url", "Сайт"], ["Привет"]], "resize_keyboard": True, "one_time_keyboard": True>data = requests.post(f'/sendMessage', data=data)
Отредактируем функцию check_message для вывода нашей клавиатуры
def check_message(chat_id, message): if message.lower() in ['привет', 'hello']: send_message(chat_id, 'Привет :)') elif message.lower() in 'сайт': inline_keyboard(chat_id, 'Вы можете ознакомиться\nс товаром на сайте') elif message.lower() in 'фото по url': # Отправить URL-адрес картинки (телеграм скачает его и отправит) send_photo_url(chat_id, 'https://ramziv.com/static/assets/img/home-bg.jpg') elif message.lower() in 'фото с компьютера': # Отправить файл с компьютера send_photo_file(chat_id, 'photo.jpg') elif message.lower() in 'фото с сервера телеграм': # Отправить id файла (файл уже хранится где-то на серверах Telegram) send_photo_file_id(chat_id, 'AgACAgIAAxkBAAMqYVGBbdbivL53IzKLfUKUClBnB0cAApy0MRtfMZBKHL0tNw9aITwBAAMCAAN4AAMhBA') else: reply_keyboard(chat_id, 'Вот что я умею')
Проверка
Проверим как все работает
Отправим боту сообщение Сайт
Если отправить сообщение на которые бот не может дать ответ, он выведет клавиатуру и сообщение Вот что я умею
import requests import time import json TOKEN = 'токен' URL = 'https://api.telegram.org/bot' def get_updates(offset=0): result = requests.get(f'/getUpdates?offset=').json() return result['result'] def send_message(chat_id, text): requests.get(f'/sendMessage?chat_id=&text=') def send_photo_url(chat_id, img_url): requests.get(f'/sendPhoto?chat_id=&photo=') def send_photo_file(chat_id, img): files = requests.post(f'/sendPhoto?chat_id=', files=files) def send_photo_file_id(chat_id, file_id): requests.get(f'/sendPhoto?chat_id=&photo=') def inline_keyboard(chat_id, text): reply_markup = ]]> data = requests.post(f'/sendMessage', data=data) def reply_keyboard(chat_id, text): reply_markup = < "keyboard": [["Фото по url", "Сайт"], ["Привет"]], "resize_keyboard": True, "one_time_keyboard": True>data = requests.post(f'/sendMessage', data=data) def check_message(chat_id, message): if message.lower() in ['привет', 'hello']: send_message(chat_id, 'Привет :)') elif message.lower() in 'сайт': inline_keyboard(chat_id, 'Вы можете ознакомиться\nс товаром на сайте') elif message.lower() in 'фото по url': # Отправить URL-адрес картинки (телеграм скачает его и отправит) send_photo_url(chat_id, 'https://ramziv.com/static/assets/img/home-bg.jpg') elif message.lower() in 'фото с компьютера': # Отправить файл с компьютера send_photo_file(chat_id, 'photo.jpg') elif message.lower() in 'фото с сервера телеграм': # Отправить id файла (файл уже хранится где-то на серверах Telegram) send_photo_file_id(chat_id, 'AgACAgIAAxkBAAMqYVGBbdbivL53IzKLfUKUClBnB0cAApy0MRtfMZBKHL0tNw9aITwBAAMCAAN4AAMhBA') else: reply_keyboard(chat_id, 'Вот что я умею') def run(): update_id = get_updates()[-1]['update_id'] # Присваиваем ID последнего отправленного сообщения боту while True: time.sleep(2) messages = get_updates(update_id) # Получаем обновления for message in messages: # Если в обновлении есть ID больше чем ID последнего сообщения, значит пришло новое сообщение if update_id < message['update_id']: update_id = message['update_id'] # Присваиваем ID последнего отправленного сообщения боту # Отвечаем тому кто прислал сообщение боту check_message(message['message']['chat']['id'], message['message']['text']) if __name__ == '__main__': run()
Вот и все, теперь бот может не только поприветствовать, но и отправить файл, и вывести настраиваемую клавиатуру. Скоро я выпушу третью часть, где мы добавим оплату через QIWI кошелек, или любой другой функционал который вы пожелаете. (напишите мне если вы хотите третью часть побыстрее)
Дополнительную информацию о методах вы можете получить в документации.