Отправка изображений с помощью Телеграмм-бота
Телеграмм позволяет отправлять не только текстовые сообщения, но и изображения.
Сегодня мы рассмотрим отправку изображений с помощью Телеграмм-бота.
Существует несколько способов отправки изображений:
- С помощью URL – вы просто указываете адрес картинки и Телеграмм скачивает ее и вставляет в сообщение
- Загрузка напрямую с помощью multipart/form-data
- Так же вы можете указать file_id файла уже загруженного на сервера Telegram.
Сегодня мы рассмотрим первые два способа.
Отправка изображения из URL
Чтобы отправить изображение с помощью его URL вы должны указать полный путь для файла.
Давайте создадим в папке с нашим ботом новый файл image.php
touch /var/phpbots/landing-bot/image.php
Со следующим содержимым:
<?php
include('vendor/autoload.php');
$token = "1234567890:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
use Telegram\Bot\Api;
$telegram = new Api($token);
$result = $telegram->getWebhookUpdates();
$chat_id = -517371153;
$url = 'https://blog.altuninvv.ru/apple-touch-icon.png';
$telegram->sendPhoto(['chat_id' => $chat_id, 'photo' => $url, 'parse_mode' => "html"]);
echo "Сообщение в группу отправлено!";
Откроем в браузере адрес:
http://192.168.1.42:9966/d2549d33-255a-40a6-8cce-36c8f7efe780/image.php
И в нашей группе увидим нашу картинку:
Добавляем подпись для картинки.
Очень часто одной картинки недостаточно. Изображение выглядит намного лучше, если у него есть подпись. Для этого потребуются небольшие изменения в коде, в результате файл image.php примет вид:
<?php
include('vendor/autoload.php');
$token = "1234567890:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
use Telegram\Bot\Api;
$telegram = new Api($token);
$result = $telegram->getWebhookUpdates();
$chat_id = -517371153;
$url = 'https://blog.altuninvv.ru/apple-touch-icon.png';
$caption = "Это подпись к нашей картинке!";
$telegram->sendPhoto(['chat_id' => $chat_id,
'photo' => $url,
'caption' => $caption,
'parse_mode' => "html"]);
echo "Сообщение в группу отправлено!";
Запустим и получим вот такой результат:
Отправляем изображение с подписью наверху
Возможно, вам захочется добавить подпись на самый верх картинки, для этого вы можете воспользоваться следующим способом:
<?php
include('vendor/autoload.php');
$token = "1234567890:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
use Telegram\Bot\Api;
$telegram = new Api($token);
$result = $telegram->getWebhookUpdates();
$chat_id = -517371153;
$url = 'https://blog.altuninvv.ru/apple-touch-icon.png';
$caption = "Это подпись к нашей картинке!";
$link = "[ ](".$url.')'.$caption;
$telegram->sendMessage(['chat_id' => $chat_id,
'text' => $link,
'parse_mode' => "markdown"]);
echo "Сообщение в группу отправлено!";
Обратите внимание, между скобок [ ] должен быть пробел!
Запустим и получим вот такой результат:
Загрузка изображения с помощью multipart/form-data
Использование библиотеки Telegrambotsdk позволяет нам серьезно экономить время на разработку! Она умеет автоматически обрабатывать отправку локальных файлов на сервер с помощью multipart/form-data.
Скачаем в папку с ботом файл:
cd /var/phpbots/landing-bot/
wget https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Telegram_2019_Logo.svg/80px-Telegram_2019_Logo.svg.png
Переименуем файл покороче:
mv 80px-Telegram_2019_Logo.svg.png logo.png
Внесем изменения в файл image.php:
<?php
include('vendor/autoload.php');
$token = "1234567890:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
use Telegram\Bot\Api;
$telegram = new Api($token);
$result = $telegram->getWebhookUpdates();
$chat_id = -517371153;
$url = '/var/phpbots/landing-bot/logo.png';
$caption = "Это логотип Телеграм!";
$telegram->sendPhoto(['chat_id' => $chat_id,
'photo' => $url,
'caption' => $caption,
'parse_mode' => "html"]);
echo "Сообщение в группу отправлено!";
Запустим и получим результат:
Обратите внимание, всё что мы сделали это указали полный путь к локальному файлу, библиотека сама определила, что файл существует и загрузила его на сервер!
Заключение
Сегодня мы рассмотрели отправку изображений с помощью Телеграм-бота на PHP.
Изображения были загружены с помощью URL и посредством прямой загрузки, с использованием multipart/form-data.
Мы узнали, как прикрепить описание перед изображением и после него.
В следующей статье мы рассмотрим создание меню навигации для бота.
Добавить комментарий