Php bot telegram отправить файл

Создание Telegram бота на PHP: Отправка и сохранение файлов. Урок 4

Процесс скачивания и отправки файлов в Telegram бот аналогичен тому, как происходит отправка и получение картинок.

Получение и скачивание файлов в Telegram

Если мы отправим боту какой-нибудь файл через мессенджер, то в наш файл message.txt на сервере, будет записан следующий запрос от Telegram:

Array
(
[update_id] => 699174174
[message] => Array
(
[message_id] => 232
[from] => Array
(
[id] => 1526361849
[is_bot] =>
[first_name] => FirstName
[last_name] => LastName
[username] => UserName
[language_code] => uk
)

[chat] => Array
(
[id] => 1526361849
[first_name] => FirstName
[last_name] => LastName
[username] => UserName
[type] => private
) [date] => 1671007433
[document] => Array
(
[file_name] => Черги.xlsx
[mime_type] => application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
[file_id] => BQACAgIAAxkBAAPoY5mMyU1S7gM7XjYRX5cBrTaedUMAAgEgAAIm8MhIDO_GOO_9z1IsBA
[file_unique_id] => AgADASAAAibwyEg
[file_size] => 10794
)

Зная , мы можем скачать файл, который отправил пользователь. Для достаточно сформировать ссылку следующего вида:

https://api.telegram.org/bot/getFile?file_id=

В моём случае ссылка будет выглядеть так:

https://api.telegram.org/bot5741786015:AAGTuEwCBGHmcJP9kO-OzV_xKIduBkbAK6Y/getFile?file_id=BQACAgIAAxkBAAPoY5mMyU1S7gM7XjYRX5cBrTaedUMAAgEgAAIm8MhIDO_GOO_9z1IsBA

В ответе будет получена следующая информация:

Здесь, в указан адрес файла – documents/file_2.xlsx.

Теперь, мы можем сформировать ссылку, перейдя по которой произойдёт скачивание файла:

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

Вот пример ссылки, перейдя по которой начнётся скачивание файла, который был отправлен боту в мессенджере:

https://api.telegram.org/file/bot5741786015:AAGTuEwCBGHmcJP9kO-OzV_xKIduBkbAK6Y/documents/file_2.xlsx

Сохранение файла на сервере Telegram

Получение файла и его сохранение на сервере, можно реализовать следующим образом:

 // Якщо прислали файл 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(); > ?>

Отправка файлов Telegram боту

Для отправки файлов Telegram боту используют метод sendDocument.

 // Відповідь на повідомлення // Отримуємо текст, який відправив користувач Телеграм боту в месенджері if (!empty($data['message']['text'])) < $text = $data['message']['text']; // Відправляємо файл боту if (mb_stripos($text, '/sendfile') !== false) < sendTelegram( 'sendDocument', array( 'chat_id' =>$data['message']['chat']['id'], 'document' => curl_file_create(__DIR__ . '/myFile.xlsx') ) ); exit(); > > ?>

В данном примере, если пользователь отправит нашему Телеграм боту команду /sendfile, то в ответном сообщении, он получит файл myFile.xlsx, который находится на сервере, в папке с нашим скриптом.

Читайте также:  Html elements and styles

Весь код отправки и сохранения файлов в Telegram

 // Якщо прислали файл 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, '/sendfile') !== false) < sendTelegram( 'sendDocument', array( 'chat_id' =>$data['message']['chat']['id'], 'document' => curl_file_create(__DIR__ . '/myFile.xlsx') ) ); exit(); > > ?>

Вас может заинтересовать

Источник

Создание Telegram бота на PHP #4: отправка файлов и изображений в Telegram

В новом уроке мы с вами научимся отправлять файлы и изображения в Telegram сообщениях. Мы с вами изучим 2 новых метода: sendPhoto() и sendDocument().

Для отправки файлов в Телеграм, нам необходимо воспользоваться функцией curl_file_create(), которая формирует специальный объект файла, для того чтобы его можно было передавать через HTTP запросы.

Отправка изображений в 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_HEADER, false); $res = curl_exec($ch); curl_close($ch);

Здесь мы как и в прошлый раз собираем в массив $arrayQuery параметры для отправки запросов. Для отправки изображения, нам необходимо передать id чата, текст сообщения (для изображений он передается в параметре caption), и новый параметр photo в который мы передаём сформированный, с помощью функции curl_file_create(), объект изображения.

Читайте также:  Оптимизация загрузки шрифтов css

Ниже мы указываем что все данные должны передаваться методом 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_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, в котором указываются данные об отправленном файле.

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

Читайте также:  Comparator function in java

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_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_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
  • отправлять сгруппированные изображения в одном сообщение

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

Источник

Оцените статью