В новом уроке мы с вами научимся отправлять файлы и изображения в Telegram сообщениях. Мы с вами изучим 2 новых метода: sendPhoto() и sendDocument().
Для отправки файлов в Телеграм, нам необходимо воспользоваться функцией curl_file_create(), которая формирует специальный объект файла, для того чтобы его можно было передавать через HTTP запросы.
Полный список всех записей курса находится на сайте https://prog-time.ru/course_cat/telegram-bot-basic/ или в публикациях на Хабр https://habr.com/ru/users/Prog-Time/posts/
Отправка изображений в Telegram чат
Пример отправки изображения выглядит так:
/*токен который выдаётся при регистрации бота */ $token = "5340791844:AAEXXDdu324vInvQrlWHyk8V91USOQSevrPVU"; $arrayQuery = array( 'chat_id' => 1424646511, 'caption' => 'Проверка работы', 'photo' => curl_file_create(__DIR__ . '/cat.jpg', 'image/jpg' , 'cat.jpg') ); $ch = curl_init('https://api.telegram.org/bot'. $token .'/sendPhoto'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $arrayQuery); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch);
Здесь мы как и в прошлый раз собираем в массив $arrayQuery параметры для отправки запросов. Для отправки изображения, нам необходимо передать id чата, текст сообщения (для изображений он передается в параметре caption), и новый параметр photo в который мы передаём сформированный, с помощью функции curl_file_create(), объект изображения.
Ниже мы указываем что все данные должны передаваться методом POST и не забываем передавать токен в URL запроса.
Таким образом мы отправляем сжатое изображение в чат с указанной подписью.

Давайте рассмотрим дополнительные параметры, которые предлагает нам документация Telegram.
protect_content — данный параметр запрещает сохранение и пересылку изображения.

reply_markup — позволяет добавить кнопки под изображение
Отправка файлов в Telegram чат
Отправка документов производится аналогичным образом, меняется только метод отправки и параметр photo заменяется на document.
/*токен который выдаётся при регистрации бота */ $token = "5340791844:AAEXXDdu324vInvQrlWHyk8V91USOQSevrPVU"; $arrayQuery = array( 'chat_id' => 1424646511, 'caption' => 'Проверка работы', 'document' => curl_file_create(__DIR__ . '/cat.jpg', 'image/jpg' , 'cat.jpg') ); $ch = curl_init('https://api.telegram.org/bot'. $token .'/sendDocument'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $arrayQuery); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch);

Разбор ответа при отправке файла
Давайте теперь разберём ответ получаемый от сервера при отправке файла в чат.
В данном примере я получаю следующий ответ:
{ "ok": true, "result": { "message_id": 20, "from": { "id": 5340791844, "is_bot": true, "first_name": "test_prog_time", "username": "test_prog_time_bot" }, "chat": { "id": 1424646511, "first_name": "Илья", "last_name": "Лящук", "username": "iliyalyachuk", "type": "private" }, "date": 1658991191, "document": { "file_name": "cat.jpg", "mime_type": "image/jpeg", "thumb": { "file_id": "AAMCAgADGQMAAxRi4jJXqhVVPzULdQ1xw_LeYcZGRwACGhkAAmCwEEuw8OvQNNsHDQEAB20AAykE", "file_unique_id": "AQADGhkAAmCwEEty", "file_size": 24268, "width": 320, "height": 320 }, "file_id": "BQACAgIAAxkDAAMUYuIyV6oVVT81C3UNccPy3mHGRkcAAhoZAAJgsBBLsPDr0DTbBw0pBA", "file_unique_id": "AgADGhkAAmCwEEs", "file_size": 132208 }, "caption": "Проверка работы" } }
В ответе мы видим много знакомых параметров, которые мы с вами разбирали в уроке по отправке текстовых сообщений. Это информация о чате, о получателе, о дате отправки и текст сообщения.
Новым параметром для нас, в данном случае является — document, в котором указываются данные об отправленном файле.
Для того чтобы не дублировать отправку файлов с сервера, вы можете обратиться к ранее отправленному файлу указав его идентификатор.
ID отправленного файла хранится в массиве ответа, в параметре document -> file_id.
Выглядит это следующим образом
$arrayQuery = array( 'chat_id' => 1424646511, 'caption' => 'Проверка работы', 'document' => "BQACAgIAAxkDAAMUYuIyV6oVVT81C3UNccPy3mHGRkcAAhoZAAJgsBBLsPDr0DTbBw0pBA", ); $ch = curl_init('https://api.telegram.org/bot'. $token .'/sendDocument'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $arrayQuery); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch);
Групповая отправка изображений и файлов
Для групповой отправки изображений в чат, нам необходимо воспользоваться методом sendMediaGroup() и немного переделать наш массив с параметрами запроса.
Вот так будет выглядеть наш следующий пример.
/*токен который выдаётся при регистрации бота */ $token = "5340791844:AAEXXDduvInvQrlWHRXykV91USOQSevrPVU"; $arrayQuery = [ 'chat_id' => 1424646511, 'media' => json_encode([ ['type' => 'photo', 'media' => 'attach://cat.jpg' ], ['type' => 'photo', 'media' => 'attach://cat_2.jpg' ], ['type' => 'photo', 'media' => 'attach://cat_3.jpg' ], ]), 'cat.jpg' => new CURLFile(__DIR__ . '/cat.jpg'), 'cat_2.jpg' => new CURLFile(__DIR__ . '/cat_2.jpg'), 'cat_3.jpg' => new CURLFile(__DIR__ . '/cat_3.jpg'), ]; $ch = curl_init('https://api.telegram.org/bot'. $token .'/sendMediaGroup'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $arrayQuery); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch); echo $res;
Для передачи группы файлов, нам необходимо передать в качестве параметра media массив с параметрами изображений которые необходимо сгруппировать.
Каждый массив вложенный в параметр media имеет следующие параметры:
-
type — тип файла который необходимо передать (в нашем случае это photo)
-
media — строка указывающая вложенный файл. Добавление подстроки attach:// является обязательным правилом.
Далее указываем файлы которые необходимо передать. Название параметра приравнивается к названию передаваемого файла.
Для формирования объекта изображений мы будем использовать аналог функции curl_file_create() — класс CURLFile(), который просто принимает путь до изображения.
После отправки запроса, мы получаем следующий результат.

Подведём итоги. В новом уроке мы с вами научились:
-
работать с функцией curl_file_create() и классом CURLFile()
-
отправлять документы в Telegram чат
-
отправлять сжатые изображения в Telegram
-
отправлять сгруппированные изображения в одном сообщение
В следующих уроках я научу вас обрабатывать хуки и принимать информацию, о действиях пользователей, на наш сервер.
Оригинал на сайте Prog-Time — https://prog-time.ru/course/bot-v-telegram-4/
ссылка на оригинал статьи https://habr.com/ru/post/697010/
Добавить комментарий