Как отправить картинку как файл в Телеграмме для бота

Я пишу бот Telegram и мне нужно отправлять файлы пользователям. Я хочу получить file_id файлов, которые я хочу отправить. Я следую за этим ответом. Чтобы получить file_id , я должен отправить файл своему боту Telegram. Вопрос в том, как отправить файлы через мой бот самому себе? (может быть, с помощью API?)

cooleck 07 янв. 2019, в 20:51
Поделиться
Michael H. 07 янв. 2019, в 19:40
Нет, это не работает.

cooleck 07 янв. 2019, в 21:10
Вы не можете отправлять что-либо от бота боту (самому себе или другим ботам).
Ali Hashemi 09 янв. 2019, в 11:33

Показать ещё 1 комментарий
Поделиться:
telegram-bot
python-telegram-bot

1 ответ

  • Если файл уже хранится где-то на серверах Telegram, вам не нужно его повторно загружать: каждый объект файла имеет поле file_id, просто передайте этот file_id в качестве параметра вместо загрузки. Для файлов, отправляемых таким способом, ограничений нет.
  • Предоставьте Telegram URL-адрес HTTP для отправляемого файла. Telegram загрузит и отправит файл. Максимальный размер 5 МБ для фотографий и 20 МБ для других типов контента.
  • Разместите файл, используя multipart/form-data обычным способом, который файлы загружаются через браузер. Максимальный размер 10 МБ для фотографий, 50 МБ для других файлов

Вы можете использовать file_id только если вы уже отправили его кому-то ранее (используя URL или multipart/form-data).

Как отправить документ в чат-боте. Как отправить файл в чат-боте.Чат бот для бизнеса. FlowXo

Таким образом, если список файлов, которые вы хотите отправить, является предопределенным, «статическим», вы можете загрузить их все один раз, получить их file_id (например, с getUpdates метода getUpdates ), сохранить ассоциации между файлами и их соответствующими file_id и, наконец, ваш бот может использовать только file_id для общения с пользователями.

С другой стороны, если список возможных файлов варьируется, вы можете отправлять файлы только через URL или multipart/form-data.

Ivan Vinogradov 10 янв. 2019, в 08:41
Поделиться

Я выбрал третий способ: опубликовать файл, используя multipart / form-data. Я уже видел много вопросов об этом методе, и никто не мог ответить прямо на него. Так что вы можете подробно объяснить этот метод, пожалуйста?

Источник: overcoder.net

Как отправить картинку как файл в телеграмме для бота

Будь в курсе последних новостей из мира гаджетов и технологий

iGuides для смартфонов Apple

Как сделать свои стикеры для Telegram прямо со смартфона. Пошаговый гайд

Олег

Олег Воронин — 25 июля 2022, 16:30

Создаем Телеграм-бота на Python D: Добавление кнопок Отправка фото/

Telegram

Мессенджеры очень плотно вошли в нашу жизнь и буквально стали её частью. Всё больше дел и вопросов решается именно в них — порой мы общаемся с человеком больше в мессенджере, чем лично.

При такой значимости какого-либо продукта в нашей жизни он обязательно должен обладать тремя качествами: удобный, стабильный, функциональный. Этим характеристикам идеально соответствует Telegram.

Помимо удобнейших каналов и бесследного удаления сообщений, Telegram принес в наш обиход еще одну категорию общения — стикеры. Стикеры буквально наводнили наше повседневное общение, они забавны, милы, разнообразны, но самое главное: стикеры позволяют нам лучше выражать свои эмоции и доставлять эмоции собеседнику.

Конечно, вы можете выбрать из сотен разных стикерпаков, которые уже были созданы кем-то другим — чуть позже мы расскажем, как находить новые стикеры. Но гораздо лучше создать собственный стикерпак: в него можно поместить только то, что нравится нам лично, причем процесс не требует особых навыков или «красноглазия».

Еще один плюс собственного стикерпака: его сможет добавить себе любой, кому мы отправим свой стикер.

1. Исходники

Итак, чтобы создать собственный стикерпак, нам потребуется идея. Что именно вы хотите изобразить? Может возникнуть желание придумать что-нибудь эдакое, но не торопитесь: самые сильные эмоции вызывают простейшие вещи.

  • кадры из любимого фильма или сериала,
  • тематические фразы для коллег по офису,
  • мордахи котиков с разными эмоциями.
Еще по теме:  Как установить Telegram на kali linux

Создавать стикерпак можно как со смартфона, так и с компьютера. Второй вариант будет немного проще, но и первый вполне годится.

2. Сбор и подготовка стикеров

Стикерпак Telegram может вместить достаточно много стикеров, но делать сотни штук я бы не рекомендовал. Почему? Просто вспомните себя: как часто вы листаете 50+ стикеров в паке в поисках нужного? Обычно для отправки стикера у вас есть 1-2 минутки, и хочется сделать это побыстрее. Так что оптимальный объемом для пака будет 20-30 стикеров.

В этом гайде мы сделаем 18 штук.

Когда скриншоты на месте, их нужно обрезать. Для этого достаточно встроенного редактора изображений на iPhone или Android-смартфоне. Кстати, в iOS есть готовый шаблон квадрата — выбирайте его и подгоняйте нужный кадр.

Далее вам нужно пропустить стикеры через «формочку» — то есть, масштабировать их. Дело в том, что бот принимает только картинки с размером стороны не более 512 пикселей. Чтобы масштабировать ваши стикеры со смартфона, можно пропустить их через онлайн-конвертер: выберите файл, выставьте разрешение 512х512 для квадратного стикера и жмите «Начать». Файл экспортируется в формате PNG.

1

Другой вариант — приложение для «резайза». С ним попроще: всё делается на одном экране, разрешение второй стороны картинки автоматически подгоняется по первой, чтобы не было «перекосов». Вверху нажмите на «картинку», выберите стикер, выставьте 512 пикселей на бОльшей стороне и жмите «Скачать» внизу экрана. Готово.

Приложение

На компьютере всё попроще: на macOS можно «ресайзить» картинки во встроенном «Просмотре» («Инструменты» → «Настроить размер»), а на Windows — воспользоваться Paint. В принципе, можно создать стикерпак из того, что есть, но учтите, что стикеры могут быть разных размеров, а некоторые из них бот откажется принимать.

1

Еще один параметр — стикеры должны быть в формате PNG. Если вы делаете скриншоты с iPhone, то они сохраняются именно в этом расширении. Учитывайте формат при прогоне картинок через онлайн-конвертер. При необходимости на Mac можно конвертировать картинки в «Просмотре», выбрав «Файл» → «Экспортировать».

2

Если кадры укомплектованы, то можете заморочиться и найти картинку на логотип стикерпака. В моем случае это может быть промо-лого фильма «Назад в будущее».

3. Создаем пак

Итак, всё готово и можно приступать к сборке стикерпака. Для этого переходите по ссылке в бота и шлите ему /start . В ответ бот пришлет вам список основных команд. Поехали.

  • В списке выберите команду /newpack — она запускает процесс создания стикерпака.
  • Напишите название вашего пака. Оно может быть на любом языке, и даже может содержать ссылку на ваш аккаунт, как автора, или канал — для этого добавьте в название нужный вам логин или адрес через «собачку». После создания набора ссылка в названии будет активной. Внимание! После создания набора изменить название уже не получится!

1

  • Теперь отправьте боту первый стикер — в итоговом паке они будут размещены именно в той очередности, в который вы их добавляете. Отправлять картинку нужно «как файл», то есть через «скрепочку».

2

  • После отправки картинки бот предложит выбрать эмодзи, который соответствует стикеру. В дальнейшем при вводе этого эмодзи мессенджер будет предлагать конкретный стикер.
  • Повторите процедуру для всех стикеров. Вы можете как добавлять один и тот же эмодзи на разные стикеры, так и по несколько эмодзи на один и тот же.

3

  • Отмечу, что иногда бот работает нестабильно и по неизвестным причинам отказывается принимать некоторые изображения, хотя они соответствуют нужным параметрам. В таком случае я перешел на Mac и добавил «капризный» стикер с него. Также иногда помогает еще одна конвертация картинки PNG → PNG, или же PNG → JPG → PNG.
Еще по теме:  Почему я не вижу комментарии в Телеграмме

4

  • Мои 18 стикеров набраны. Теперь я жму команду /publish и можно добавлять иконку стикерпака. На этом этапе бот снова заглючил, и добавить иконку я так и не смог. Иду дальше — в качестве иконки будет отображаться первый стикер из набора. Команда /skip .
  • Далее нужно выбрать веб-адрес для стикерпака. Вводите любой на свое усмотрение. После завершения процесса изменить его, как и название, будет нельзя.

Готово! Стикерпак создан и готов к применению. Нажмите на ссылку, которую предложил бот и добавьте пак себе в коллекцию.

5

Новый набор автоматически встанет на первое место в списке паков и вы сразу его увидите при наборе сообщения. В любой момент вы можете добавить новые стикеры (команда /addsticker ) или заменить текущие (команда /delsticker для удаления ненужных).

Кстати, в этом же боте вы можете просматривать статистику по своему стикерпаку. По команде /packstat можно увидеть, сколько человек установило и удалило ваш набор, а также сколько раз пользователи обменивались стикерами из него.

4. Прозрачный фон

Процесс, описанный выше, позволяет вам создать простейший стикерпак, состоящий из квадратных или прямоугольных фотографий. Однако стикеры могут быть сложной геометрической формы, или даже в виде текста — для всего этого потребуется удалить фон. В качестве примера приведу вот этот стикерпак, который я создал в виде цветных облачек-сообщений. Его я делал на компьютере — на смартфоне подобного рода проекты собирать уже неудобно.

Стикерпак с прозрачным фоном

Если вы умеете рисовать такого рода картинки, то дополнительный гайд вам не потребуется. Я лишь дам небольшой полезный совет: на macOS можно быстро удалить несложный однотонный фон с картинки, используя лишь нативный «Просмотр».

  • Откройте картинку в «Просмотре»
  • Выберите инструмент «Волшебная палочка»

1

  • Проведите указателем по фону, который нужно удалить, регулируя степень очистки изображения

2

  • Отпустите кнопку мыши и щелкните Delete (кнопку удаления символа) на клавиатуре

3

  • Подтвердите конвертацию изображения в PNG.

Готово! Фон удален, и картинку можно добавлять в стикерпак. Не забудьте подогнать разрешение до 512 пикселей.

Источник: www.iguides.ru

Telegram бот на PHP

Telegram бот на PHP

Заметки айтишника

Примеры как зарегистрировать бота в Telegram, описание и взаимодействие с основными методами API. Документация на core.telegram.org и tlgrm.ru (неофициальный, на русском).

Все запросы к API должны осуществляться по HTTPS, подойдет бесплатный сертификат «Let’s Encrypt».

Регистрация бота

Следующим сообщением отправляем название для бота, обязательно на конце имени должно быть слово «bot» или «_bot». Ответным сообщением получим токен:

Тут же можно настроить описание и аватарку:

/setname Имя
/setdescription Краткое описание
/setabouttext Описание бота
/setuserpic Юзерпик

Далее нужно поставить «Webhook» чтобы все сообщения из Telegram приходили на PHP скрипт ( https://example.com/bot.php ). Для этого нужно пройти по ссылке в которой подставлены полученный токен и адрес скрипта.

В ответе будет

При смене токена, установку вебхука нужно повторить.

Входящие сообщения

Сообщения приходят POST-запросом, с типом application/json . Получить его в PHP можно следующим образом:

$data = file_get_contents(‘php://input’); $data = json_decode($data, true);

Чтобы посмотреть входящие данные, их придется дампить в файл:

file_put_contents(__DIR__ . ‘/message.txt’, print_r($data, true));

Текстовое сообщение

Запрос от Телеграм:

Array ( [update_id] => 17584194 [message] => Array ( [message_id] => 26 [from] => Array ( [id] => 123456789 [is_bot] => [first_name] => UserName [language_code] => ru-US ) [chat] => Array ( [id] => 123456789 [first_name] => UserName [type] => private ) [date] => 1541888068 [text] => Привет бот! ) )

Получим текст сообщения:

if(!empty($data[‘message’][‘text’]))

Фотографии

При отправки фото боту, на скрипт приходит массив превьюшек, последним элементом будет оригинальное фото. Максимальный размер файла 20МБ.

Запрос от Телеграм:

Array ( [update_id] => 17584194 [message] => Array ( [message_id] => 38 [from] => Array ( [id] => 123456789 [is_bot] => [first_name] => UserName [language_code] => ru-US ) [chat] => Array ( [id] => 123456789 [first_name] => UserName [type] => private ) [date] => 1541924962 [photo] => Array ( [0] => Array ( [file_id] => AgADAgADUqexG7u8OEudBvlhgMzKC1agOQ8ABC6Bx26USA7Mw3gAAgI [file_size] => 1196 [width] => 51 [height] => 90 ) [1] => Array ( [file_id] => AgttAgADUqoxG7u8OEudBvlhgMzKC1agOQ8ABKwp_3jDPrIlxHgAAgI [file_size] => 21146 [width] => 180 [height] => 320 ) [2] => Array ( [file_id] => AgADAgADUqyxG7u8OEudBvlhgMzKC1agOQ8ABAN8gJWpUT1MxXgAAgI [file_size] => 90940 [width] => 449 [height] => 800 ) [3] => Array ( [file_id] => AgADAgADUqouu7u8OEudBvlhgMzKC1agOQ8ABIqVC1nEpbLDwngAAgI [file_size] => 114363 [width] => 719 [height] => 1280 ) ) ) )

Еще по теме:  Как искать файлы в Телеграмм канале

Чтобы скачать файл нужно отправить POST или GET запрос на получение c параметром file_id изображения по URL:

https://api.telegram.org/bot/getFile

В ответ придет информация о файле:

Array ( [ok] => 1 [result] => Array ( [file_id] => AgADAgADUqoxG5u88E0dBvlhgMzKC1agOQ8ABIqVC1nEpbLDwngAAgI [file_size] => 114363 [file_path] => photos/file_1.jpg ) )

Далее его можно скачать по ссылке:

В PHP сохранение файла на сервер можно реализовать следующим образом:

$token = ‘123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11’; if (!empty($data[‘message’][‘photo’])) < $photo = array_pop($data[‘message’][‘photo’]); $ch = curl_init(‘https://api.telegram.org/bot’ . $token . ‘/getFile’); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, array(‘file_id’ =>$photo[‘file_id’])); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch); $res = json_decode($res, true); if ($res[‘ok’]) < $src = ‘https://api.telegram.org/file/bot’ . $token . ‘/’ . $res[‘result’][‘file_path’]; $dest = __DIR__ . ‘/’ . time() . ‘-‘ . basename($src); copy($src, $dest); >>

Документ

Запрос от Телеграм:

Array ( [update_id] => 17474201 [message] => Array ( [message_id] => 44 [from] => Array ( [id] => 123456789 [is_bot] => [first_name] => UserName [language_code] => ru-US ) [chat] => Array ( [id] => 123456789 [first_name] => UserName [type] => private ) [date] => 1541925844 [document] => Array ( [file_name] => IMG_7947.JPG [mime_type] => image/jpeg [thumb] => Array ( [file_id] => AAQCABMNv_QOAATwQugveIZBldZ3AAIC [file_size] => 2644 [width] => 67 [height] => 90 ) [file_id] => BQADAgADtQEAAqu9OEhzn2cEz8LpkgI [file_size] => 1976218 ) ) )

Скачивание файлов происходит по такой же схеме как у фотографий.

if (!empty($data[‘message’][‘document’])) < $file_id = $data[‘message’][‘document’][‘file_id’]; $ch = curl_init(‘https://api.telegram.org/bot’ . $token . ‘/getFile’); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, array(‘file_id’ =>$file_id)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch); $res = json_decode($res, true); if ($res[‘ok’]) < $src = ‘https://api.telegram.org/file/bot’ . $token . ‘/’ . $res[‘result’][‘file_path’]; $dest = __DIR__ . ‘/’ . time() . ‘-‘ . basename($src); copy($src, $dest); >>

Ответы бота

Отправка текста

$response = array( ‘chat_id’ => $data[‘message’][‘chat’][‘id’], ‘text’ => ‘Хай!’ ); $ch = curl_init(‘https://api.telegram.org/bot’ . $token . ‘/sendMessage’); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $response); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_exec($ch); curl_close($ch);

Отправка картинки

$response = array( ‘chat_id’ => $data[‘message’][‘chat’][‘id’], ‘photo’ => curl_file_create(__DIR__ . ‘/image.png’) ); $ch = curl_init(‘https://api.telegram.org/bot’ . $token . ‘/sendPhoto’); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $response); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_exec($ch); curl_close($ch);

Отправка файла

Пример скрипта

Скрипт простейшего бота. Он отвечает на вопросы и сохраняет файлы и изображение на сервере.

define(‘TOKEN’, ‘123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11’); // Функция вызова методов API. function sendTelegram($method, $response) < $ch = curl_init(‘https://api.telegram.org/bot’ . TOKEN . ‘/’ . $method); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $response); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch); return $res; >// Прислали фото. if (!empty($data[‘message’][‘photo’])) < $photo = array_pop($data[‘message’][‘photo’]); $res = sendTelegram( ‘getFile’, array( ‘file_id’ =>$photo[‘file_id’] ) ); $res = json_decode($res, true); if ($res[‘ok’]) < $src = ‘https://api.telegram.org/file/bot’ . TOKEN . ‘/’ . $res[‘result’][‘file_path’]; $dest = __DIR__ . ‘/’ . time() . ‘-‘ . basename($src); if (copy($src, $dest)) < sendTelegram( ‘sendMessage’, array( ‘chat_id’ =>$data[‘message’][‘chat’][‘id’], ‘text’ => ‘Фото сохранено’ ) ); > > exit(); > // Прислали файл. if (!empty($data[‘message’][‘document’])) < $res = sendTelegram( ‘getFile’, array( ‘file_id’ =>$data[‘message’][‘document’][‘file_id’] ) ); $res = json_decode($res, true); if ($res[‘ok’]) < $src = ‘https://api.telegram.org/file/bot’ . TOKEN . ‘/’ . $res[‘result’][‘file_path’]; $dest = __DIR__ . ‘/’ . time() . ‘-‘ . $data[‘message’][‘document’][‘file_name’]; if (copy($src, $dest)) < sendTelegram( ‘sendMessage’, array( ‘chat_id’ =>$data[‘message’][‘chat’][‘id’], ‘text’ => ‘Файл сохранён’ ) ); > > exit(); > // Ответ на текстовые сообщения. if (!empty($data[‘message’][‘text’])) < $text = $data[‘message’][‘text’]; if (mb_stripos($text, ‘привет’) !== false) < sendTelegram( ‘sendMessage’, array( ‘chat_id’ =>$data[‘message’][‘chat’][‘id’], ‘text’ => ‘Хай!’ ) ); exit(); > // Отправка фото. if (mb_stripos($text, ‘фото’) !== false) < sendTelegram( ‘sendPhoto’, array( ‘chat_id’ =>$data[‘message’][‘chat’][‘id’], ‘photo’ => curl_file_create(__DIR__ . ‘/image.jpg’) ) ); exit(); > // Отправка файла. if (mb_stripos($text, ‘файл’) !== false) < sendTelegram( ‘sendDocument’, array( ‘chat_id’ =>$data[‘message’][‘chat’][‘id’], ‘document’ => curl_file_create(__DIR__ . ‘/test.txt’) ) ); exit(); > >

  • ← Как сбросить root-пароль Linux-сервера
  • Авторизация на сайте через Google →

Источник: it-stories.ru

Рейтинг
( Пока оценок нет )
Загрузка ...