Полезные материалы:
Добро пожаловать на девятый (заключительный) урок курса для начинающих разработчиков под названием “Как гуглить?”.
Ранее мы познакомились с языком разметки HTML, каскадными таблицами стилей CSS, языками программирования PHP и Javascript, научились работать с базами данных MySQL и сегодня я бы хотел поговорить о том, с чем вам придется сталкиваться постоянно – об интеграциях.
В реальном мире крайне редко встречаются полностью обособленные информационные системы. Наоборот, зачастую, разработчику приходится реализовывать интеграции со сторонними системами.
На прошлом уроке, мы уже немного затронули вопрос интеграций – мы реализовали собственный API и сами же произвели интеграцию с этим API на стороне нашего мобильного приложения. В этом уроке, мы рассмотрим интеграцию со сторонними сервисами.
В качестве примера, я предлагаю реализовать Telegram-бота для сохранёнок. Бот позволит сохранять пересланные изображения на нашем сервере а в ответ отправлять прямую ссылку на сохранённое изображение.
Не изменяя своим принципам и не имея совершенно никакого понимания как делать чат-боты, мы идем в Google и формируем наш поисковый запрос: “Telegram бот php”.
По первой же ссылке в поисковой выдаче мы находим подробнейшую инструкцию, как мы можем реализовать нашего первого Telegram-бота, используя тот технологический стек, который мы хотим.
Перво-наперво, нам нужно создать нашего бота через другого бота (BotFather): https://t.me/BotFather
Открываем Telegram, находим бота @BotFather и отправляем ему сообщение:
/newbot
Отвечаем на предложенные вопросы и получаем токен, который нам позволит взаимодействовать с API Telegram для управления нашим ботом.
Продвигаясь по найденной ранее инструкции мы наткнёмся на так называемые “вебхуки”. Как говорит википедия, вебхук – метод расширения или изменения поведения веб-страницы или веб-приложения с помощью обратных вызовов. Эти обратные вызовы могут поддерживаться, изменяться и управляться сторонними пользователями и разработчиками, которые не обязательно связаны с исходным веб-сайтом или приложением.
Простыми словами, Telegram может отправлять на наш сервер информацию, которую получает Telegram-бот от использующих его пользователей.
Для того, чтобы Telegram отправлял информацию по нужному адресу нам нужно задать URL для вебхуков.
Переходим в панель управления нашим хостингом, создаем в корневой директории сайта, который мы использовали на всех прошлых уроках новую директорию – telegram, а в ней создадим файл webhook.php и сделаем так, чтобы все POST- и GET-запросы, которые отправляются в файл webhook.php сохранялись где-то рядом в текстовых файлах и у нас была возможность изучить, что приходит в наш вебхук.
Также, в панели управления хостингом, для используемого нами доменного имени необходимо выпустить SSL-сертификат, т.к. API Telegram может работать только по протоколу HTTPS. Для этого переходим в раздел “Веб-сайты”, выбираем наш сайт и нажимаем “Редактировать”. В разделе “SSL-сертификаты” выбираем пункт “Новый сертификат Let’s encrypt” и нажимаем “Сохранить”.
https://api.telegram.org/bot5236473451:AAEAjVbZY0kbxOLwBFYTV4j1YXRs77HmJEI/setWebhook?url=https://илонмаск.рф/telegram/webhook.php
Кусок 5236473451:AAEAjVbZY0kbxOLwBFYTV4j1YXRs77HmJEI в запросе необходимо заменить токеном, который мы получили от @BotFather, а https://илонмаск.рф/telegram/webhook.php – на полный URL-адрес нашего вебхука
Теперь нам необходимо отправить запрос в API Telegram, чтобы назначить URL вебхука для нашего бота. И просто копируем получившийся URL в адресную строку браузера.
Сейчас мы можем найти нашего бота в Telegram и написать ему что-нибудь.
Теперь проверим логи и убедимся, что сообщение, которое мы отправили боту в Telegram дошло до нашего сервера.
Перейдем к директории telegram, откроем папку logs и попробуем открыть только что созданный текстовый документ.
В логах мы видим JSON-массив с информацией о пользователе и его сообщении, которое он отправил в наш бот.
Сейчас попробуем переслать в наш бот какой-нибудь пост с картинкой и посмотрим, что придет в логи.
message -> photo;
$user_id = $json_data -> message -> from -> id;
$bytes = 0;
foreach ($pictures as $picture) {
if ($picture -> file_size > $bytes){
$maxres_image = $picture -> file_id;
$bytes = $picture -> file_size;
}
}
if ($bytes > 0){
$filename = generateRandomString();
$tg_response = file_get_contents("https://api.telegram.org/bot$tg_token/getFile?file_id=$maxres_image");
$tg_response = json_decode($tg_response);
$image_path = $tg_response -> result -> file_path;
$image = file_get_contents("https://api.telegram.org/file/bot$tg_token/" . $image_path);
file_put_contents("../uploads/$filename.jpg", $image);
$tg_data = [
'chat_id' => $user_id,
'text' => "$website/uploads/$filename.jpg"
];
file_get_contents("https://api.telegram.org/bot$tg_token/sendMessage?".http_build_query($tg_data));
}
?>
Готово! Теперь у нас есть Telegram-бот, позволяющий организовать хостинг картинок. Просто отправляем боту картинку или пересылаем в него чье-нибудь сообщение и получаем от бота прямую ссылку на изображение – отличная альтернатива Joxi или ipic.su
Скачать исходные файлы урока №9