Перейти к содержимому
Меню
Светлый путь
  • Главная
  • Документация
    • Php
    • Linux
    • Windows
    • Bitrix
    • WordPress
    • Полезное
  • Бесплатный хостинг
    • Российский бесплатный хостинг
    • Зарубежный бесплатный хостинг
Светлый путь

Telegram бот на php

Опубликовано 19 октября, 202319 октября, 2023

1: регистрация бота у @BotFather

Прежде чем начать писать код, нового бота нужно зарегистрировать у «папы всех ботов» — @BotFather, чтобы получить токен (ключ) для работы с Telegram API.

Регистрация проходит в 5 простых этапов:

1) Открываете чат с @BotFather;
2) Вводите или выбираете из списка команду /newbot;
3) Отправляете желаемое название для бота;
4) Пишете юзернейм бота, по которому его будут находить через поиск. Обязательно на конце вашего юзернейма должно быть слово «bot» или «_bot». В моем случаи это @svpt_bot ссылка на него https://t.me/svpt_bot;
5) По желанию можно сразу настроить полное или краткое описание, список команд и аватарку.

По итогу регистрации получаем наш токен — 6604813784:AAHMpxRvi8Dc9M9UlQlUbvchsd_-NYEOtBs
Будьте осторожны: никогда и никому не показывайте токен, иначе ваш бот может быть скомпрометирован. Если по несчастливой случайности кто-то нехороший все-таки узнал ваш токен, то заменить его можно всё в том же @BotFather, нажав на кнопку «Revoke current token» в разделе «API Token».

Шаг 2: выбираем способ обработки запросов

Исходя из официальной документации, Telegram API основан на простых HTTP-запросах. Существует всего два различных способа обрабатывать запросы, которые пользователи будут посылать боту:

1) проверять «вручную», используя «Long Polling»;
2) доверить всё Telegram, поставив «Webhook». В этом случае любой запрос от пользователя Telegram сам будет посылать нам на сервер.

Мы остановимся на втором варианте, но у него есть ограничение: у вас на сайте обязательно должен быть установлен SSL-сертификат, чтобы все запросы проходили через безопасный протокол HTTPS. Самоподписанные и бесплатные сертификаты «Let’s Encrypt», которые поддерживает большинство хостингов, также подходят.

Шаг 3 — Регистрация хука

Регистрация вебхука — это явное указание, по какому https адресу должен вызываться наш php-файл обработчик. Для начала его нужно создать, например index.php в моем случаи po.php или любой другой.

Для установки вебхука(скрипта), который будет обрабатывать команды и отвечать на сообщения, необходимо открыть в браузере такую строку:

https://api.telegram.org/bot6604813784:AAHMpxRvi8Dc9M9UlQlUbvchsd_-NYEOtBs/setWebhook?url=https://sv-pt.ru/1/po.php

Где после слова bot мы вставляем токен выделенный желта красным цветом взятый у бота отца. И выделенное голубым мы вставляем адрес сайта где у нас находится скрипт обработки команд.

В результате открытия этой строки в браузере и нажатии кнопки enter, мы получаем такое сообщение : {«ok»:true,»result»:true,»description»:»Webhook was set»} — это означает, что вебхук установлен и теперь отправленные боту сообщения будут приходить на этот адрес.

4. Задаем список команд.

Теперь создадим список кнопок по которым будут обрабатывается команды. Сообщим о том что они у нас есть в Botfather’а. Идем туда и вбиваем /mybots потом выбираем имя вашего бота в котором будут всплывать команды. Потом Edit Bot и в следующем меню как на картинке выделенное красной точкой Edit Commands. Потом вбиваем в формате как на картинке.

И проверяем в боте появилось ли наше меню.

5. Обработка запросов.

Писать код бота будем на PHP, воспользуемся уже готовой и очень удобной библиотекой c гидхаба или можно скачать у меня с сервера .

Просмотрим сперва полный листинг кода.

<?php
header('Content-Type: text/html; charset=utf-8');
require_once("vendor/autoload.php");

$token = "6604813784:AAHMpxRvi8Dc9M9UlQlUbvchsd_-NYEOtBs";
$bot = new \TelegramBot\Api\Client($token);

$update = json_decode(file_get_contents('php://input'));
file_put_contents(__DIR__ . '/logos',print_r($update,1),FILE_APPEND);
 
 $bot->command('start', function ($message) use ($bot) {
		$answer = 'Добро пожаловать. Посетите наш сайт https://sv-pt.ru. Подробное описание по ссылке';
		$bot->sendMessage($message->getChat()->getId(), $answer);
	});

 $bot->command('help', function ($message) use ($bot) {
	 $answer = 'Команды:
	 /start - Начало
	 /help - Помощь
	 /mess - Сообщение
	 /foto - Картинки
	 /doc - Документ
	 /video - Видео
	 /gif - Гиф анимация
     /knopka - Кнопка
	 
	 ';
	 $bot->sendMessage($message->getChat()->getId(), $answer);
		});


 $bot->command('mess', function ($message) use ($bot) {
		
		$mess = 'Текст сообщения';
		
		$bot->sendMessage($message->getChat()->getId(), $mess);
		
	});	
		
 $bot->command('foto', function ($message) use ($bot) {
	$siteimg = 'https://sv-pt.ru/download/telegram/svpt_bot/bot.png';
	
		$bot->sendPhoto($message->getChat()->getId(), $siteimg,'Отправляем картинку');
		
	});


$bot->command('doc', function ($message) use ($bot) {

	$sitedoc = new \CURLFile('file.txt');
	//$sitedoc = new \CURLFile('/../telegram/sv-pt.ru/download/telegram/svpt_bot/doc.txt');
	//$sitedoc = 'http://sv-pt.ru/download/telegram/svpt_bot/doc.txt';

	$bot->sendDocument($message->getChat()->getId(), $sitedoc);
		
	});
 

$bot->command('video', function ($message) use ($bot) {
	
			$sitevideo = 'https://sv-pt.ru/download/telegram/svpt_bot/sample.mp4';		
			$bot->sendVideo($message->getChat()->getId(), $sitevideo);

	}); 
 

 $bot->command('gif', function ($message) use ($bot) {
	
				$sitegif = 'https://sv-pt.ru/download/telegram/svpt_bot/bot.gif';		
				$bot->sendVideo($message->getChat()->getId(), $sitegif);

	}); 
	
$bot->command('knopka', function ($message) use ($bot) {
	
	 	$keyboard = new \TelegramBot\Api\Types\Inline\InlineKeyboardMarkup(
			[
				[
					['callback_data' => 'smile4', 'text' => hex2bin('f09f97a1').'Подробная инс.', 'url' => 'https://sv-pt.ru'],
                                        ['callback_data' => 'smile4', 'text' => hex2bin('f09f97a2').'Подробная инс. 2', 'url' => 'https://sv-pt.ru'],
					['callback_data' => 'smile4', 'text' => hex2bin('f09f97a3').'Подробная инс. 3', 'url' => 'https://sv-pt.ru']
				]
			]
		);
		$bot->sendMessage($message->getChat()->getId(),"Перейти на сайт", null, false, null, $keyboard);
		

	}); 
 


$bot->run();


?>

Собственно создаем в директорию в моем случаии в папке 1/po.php в котором мы и будем писать код нашего проекта. Внимание: кодировка файла — utf-8 без bom!

6. Код по частям

С помощью команды /start выводим строку приветствия. Выполняется простая работа со строками.

 $bot->command('start', function ($message) use ($bot) {
		$answer = 'Добро пожаловать. Посетите наш сайт https://sv-pt.ru. Подробное описание по ссылке';
		$bot->sendMessage($message->getChat()->getId(), $answer);
	});

С помощью команды /help выводим полную справку команд. Которую можно использовать в данном боте.

 $bot->command('help', function ($message) use ($bot) {
	 $answer = 'Команды:
	 /start - Начало
	 /help - Помощь
	 /mess - Сообщение
	 /foto - Картинки
	 /doc - Документ
	 /video - Видео
	 /gif - Гиф анимация
	 /knopka - Кнопка
	 
	 ';
	 $bot->sendMessage($message->getChat()->getId(), $answer);
		});

С помощью команды $bot->sendMessage. Мы отправляем свободную строковая переменная по вашему желанию. В данном случаи переменную $mess.

 $bot->command('mess', function ($message) use ($bot) {
		
		$mess = 'Текст сообщения';
		
		$bot->sendMessage($message->getChat()->getId(), $mess);
		
	});	

Далее обрабатываем фотографии с помощью команды отправки фото $bot->sendPhoto. Используем ссылку на фото и подпись с низу фотографии.

 $bot->command('foto', function ($message) use ($bot) {
	$siteimg = 'https://sv-pt.ru/download/telegram/svpt_bot/bot.png';
	
		$bot->sendPhoto($message->getChat()->getId(), $siteimg,'Отправляем картинку');
		
	});

Далее идет пример отправки документов с помощью команды $bot->sendDocument.

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

$bot->command('doc', function ($message) use ($bot) {

	$sitedoc = new \CURLFile('file.txt');
	$bot->sendDocument($message->getChat()->getId(), $sitedoc);
		
	});

Далее отправку выполняем с помощью команды отправки видео $bot->sendVideo. Используем ссылку на видео.

$bot->command('video', function ($message) use ($bot) {
	
			$sitevideo = 'https://sv-pt.ru/download/telegram/svpt_bot/sample.mp4';		
			$bot->sendVideo($message->getChat()->getId(), $sitevideo);

	}); 

Отправка гиф анимации выполняется аналогично видео форматам с помощью $bot->sendVideo.

 $bot->command('gif', function ($message) use ($bot) {
	
				$sitegif = 'https://sv-pt.ru/download/telegram/svpt_bot/bot.gif';		
				$bot->sendVideo($message->getChat()->getId(), $sitegif);

	}); 

Обработка кнопок выполняется с помощью InlineKeyboardMarkup библиотеки. А отправка выполняется как и отправку простого текста $bot->sendMessage. В данном примере выводится три кнопки с помощью hex2bin(‘f09f97a1’) можно вставить понравившиеся смайлики. При нажатии выполняется переход на сайт https://sv-pt.ru

$bot->command('knopka', function ($message) use ($bot) {
	
	 	$keyboard = new \TelegramBot\Api\Types\Inline\InlineKeyboardMarkup(
			[
				[
					['callback_data' => 'smile4', 'text' => hex2bin('f09f97a1').'Подробная инс. 1', 'url' => 'https://sv-pt.ru'],
					['callback_data' => 'smile4', 'text' => hex2bin('f09f97a2').'Подробная инс. 2', 'url' => 'https://sv-pt.ru'],
					['callback_data' => 'smile4', 'text' => hex2bin('f09f97a3').'Подробная инс. 3', 'url' => 'https://sv-pt.ru']
				]
			]
		);
		$bot->sendMessage($message->getChat()->getId(),"Выберите вариант", null, false, null, $keyboard);
		

	}); 

Свежие записи

  • Настройка Wazuh 4.11 в качестве SIEM на CentOS 9
  • infinityfree.com
  • Создание API токена Zabbix 7.2.5
  • Установка и настройка Elasticsearch + kibana + logstash + filebeat 8.17 на CentOS9
  • Установка и настройка Fail2ban на старые машины Centos 7,8

Свежие комментарии

  • Vag-Key.ru к записи Подключения к MySQL через ODBC connector для 1С.
  • Offensive strategies к записи 0fees.net
  • tenisi к записи Capcha PHP

Архивы

  • Май 2025
  • Апрель 2025
  • Март 2025
  • Октябрь 2024
  • Сентябрь 2024
  • Август 2024
  • Апрель 2024
  • Март 2024
  • Январь 2024
  • Декабрь 2023
  • Октябрь 2023
  • Сентябрь 2023
  • Август 2023
  • Март 2023
  • Январь 2023
  • Декабрь 2022
  • Сентябрь 2022
  • Август 2022
  • Июль 2022
  • Июнь 2022
  • Май 2022
  • Июль 2021
  • Июнь 2021
  • Февраль 2021
  • Октябрь 2020
  • Сентябрь 2020
  • Август 2020
  • Июль 2020

Рубрики

  • Bitrix
  • htaccess
  • Linux
  • Mysql
  • Php
  • SEO
  • Windows
  • WordPress
  • Zabbix
  • Бесплатный хостинг
  • Веб Сервер
  • Виртуальные машины
  • Главная
  • Документация
  • Зарубежный бесплатный хостинг
  • Книги
  • Полезное
  • Российский бесплатный хостинг

Мета

  • Войти
  • Лента записей
  • Лента комментариев
  • WordPress.org

Search

Свежие записи

  • Настройка Wazuh 4.11 в качестве SIEM на CentOS 9
  • infinityfree.com
  • Создание API токена Zabbix 7.2.5
  • Установка и настройка Elasticsearch + kibana + logstash + filebeat 8.17 на CentOS9
  • Установка и настройка Fail2ban на старые машины Centos 7,8

Свежие комментарии

  • Vag-Key.ru к записи Подключения к MySQL через ODBC connector для 1С.
  • Offensive strategies к записи 0fees.net
  • tenisi к записи Capcha PHP

Архивы

  • Май 2025
  • Апрель 2025
  • Март 2025
  • Октябрь 2024
  • Сентябрь 2024
  • Август 2024
  • Апрель 2024
  • Март 2024
  • Январь 2024
  • Декабрь 2023
  • Октябрь 2023
  • Сентябрь 2023
  • Август 2023
  • Март 2023
  • Январь 2023
  • Декабрь 2022
  • Сентябрь 2022
  • Август 2022
  • Июль 2022
  • Июнь 2022
  • Май 2022
  • Июль 2021
  • Июнь 2021
  • Февраль 2021
  • Октябрь 2020
  • Сентябрь 2020
  • Август 2020
  • Июль 2020

Рубрики

  • Bitrix
  • htaccess
  • Linux
  • Mysql
  • Php
  • SEO
  • Windows
  • WordPress
  • Zabbix
  • Бесплатный хостинг
  • Веб Сервер
  • Виртуальные машины
  • Главная
  • Документация
  • Зарубежный бесплатный хостинг
  • Книги
  • Полезное
  • Российский бесплатный хостинг

Мета

  • Войти
  • Лента записей
  • Лента комментариев
  • WordPress.org

Тизер

cod

©2025 Светлый путь | На платформе SuperbThemes
Яндекс.Метрика
Этот веб-сайт использует файлы cookie. Продолжая здесь, вы соглашаетесь на использование файлов cookie.