В этом уроке мы научимся создавать телеграм-бота на PHP, который будет отправлять приветственное сообщение новым пользователям. Это будет полезно, если у вас свой чат. В приветственном сообщении можно рассказать о правилах чата.
Не будем останавливаться на пунктах, которые мы уже рассмотрели в уроке Первый бот. Если вы ещё не читали этот материал, рекомендуется ознакомиться с ним.
Подготовка окружения
- Убедитесь, что у вас установлен PHP на вашем хостинге. Как выбрать и купить хостинг написано тут.
- Создайте папку для вашего проекта, например,
telegram-bot
. - Внутри этой папки создайте файл
index.php
. Это будет основной файл нашего бота.
Настройка Webhook
Telegram использует Webhook для отправки данных о событиях (например, когда пользователь заходит в чат). Чтобы наш бот мог получать эти данные, нужно настроить Webhook.
- Убедитесь, что у вас есть доступ к серверу с поддержкой HTTPS (это обязательное требование Telegram).
- Разместите ваш файл
index.php
на сервере. - Настройте Webhook с помощью команды:
https://api.telegram.org/bot<ВАШ_ТОКЕН>/setWebhook?url=<URL_ВАШЕГО_СКРИПТА>
Например:
https://api.telegram.org/bot123456789:ABCdefGhIJKlmNoPQRstuVWXyz/setWebhook?url=https://yourdomain.com/index.php
Написание кода бота
Теперь напишем код, который будет обрабатывать события от Telegram и отправлять приветственное сообщение.
<?php
// index.php
// Шаг 1: Получаем данные от Telegram
// Когда происходит событие (например, пользователь заходит в чат), Telegram отправляет POST-запрос на наш сервер.
// Мы получаем эти данные через file_get_contents('php://input').
$update = file_get_contents('php://input');
// Преобразуем JSON-данные в массив PHP
$update = json_decode($update, true);
// Проверяем, что данные получены
if (isset($update['message'])) {
// Если это обычное сообщение
handleMessage($update);
} elseif (isset($update['my_chat_member'])) {
// Если это событие изменения состояния чата (например, пользователь зашел в группу)
handleChatMemberUpdate($update);
}
/**
* Функция для обработки обычных сообщений
*/
function handleMessage($update) {
// Извлекаем ID чата из данных
$chatId = $update['message']['chat']['id'];
// Отправляем приветственное сообщение
sendMessage($chatId, "Привет! Я твой бот.");
}
/**
* Функция для обработки событий изменения состояния чата
*/
function handleChatMemberUpdate($update) {
// Извлекаем ID пользователя, который зашел в чат
$userId = $update['my_chat_member']['from']['id'];
// Извлекаем ID чата
$chatId = $update['my_chat_member']['chat']['id'];
// Проверяем, что пользователь действительно зашел в чат
if ($update['my_chat_member']['new_chat_member']['status'] === 'member') {
// Отправляем приветственное сообщение
sendMessage($chatId, "Добро пожаловать в чат!");
}
}
/**
* Функция для отправки сообщений через Telegram API
*/
function sendMessage($chatId, $text) {
// Замените <ВАШ_ТОКЕН> на ваш токен, полученный от BotFather
$token = "<ВАШ_ТОКЕН>";
// Формируем URL для отправки сообщения
$url = "https://api.telegram.org/bot$token/sendMessage";
// Формируем параметры запроса
$params = [
'chat_id' => $chatId,
'text' => $text
];
// Инициализируем cURL
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
// Выполняем запрос
$response = curl_exec($ch);
// Закрываем соединение
curl_close($ch);
// Выводим ответ от Telegram (для отладки)
// echo $response;
}
Разберем написанный код
- Получение данных от Telegram:
- Telegram отправляет данные в формате JSON через POST-запрос.
- Мы используем
file_get_contents('php://input')
, чтобы получить эти данные. - Затем преобразуем JSON в массив PHP с помощью
json_decode
.
- Обработка событий:
- Если это обычное сообщение, вызывается функция
handleMessage
. - Если это событие изменения состояния чата (например, пользователь зашел в группу), вызывается функция
handleChatMemberUpdate
.
- Если это обычное сообщение, вызывается функция
- Отправка сообщений:
- Для отправки сообщений используется метод
sendMessage
Telegram API. - Мы используем cURL для выполнения HTTP-запроса к API Telegram.
- Для отправки сообщений используется метод
- Проверка статуса пользователя:
- В событии
my_chat_member
проверяем полеnew_chat_member['status']
. Если оно равно'member'
, значит, пользователь зашел в чат.
- В событии
Теперь протестируем наш код
Добавляем админом нашего в бота в тестовую группу и входим и выходим другим аккунтом в этот чат. Бот должен начать отправить приветственное сообщение.
Как улучшить нашего бота
Не буду писать код, который поможет улучшить функционал, просто расскажу вам пару идей, которые вы сами сможете внедрить.
- Удаление старых сообщений. Как сделать: пишете в базу id последнего приветственного сообщения при его отправке. Потом ботом удаляете это сообщение по его id.
- Можно персонализировать сообщение, получив имя пользователя из поля first_name.
- Можно проверять что ваш бот работает только в вашей группе, просто проверив что $update['message']['chat']['id'] совпадает с id вашей группы.
- Можно удалять системные сообщения о добавлении в чат или выходе из него. Так чат будет выглядеть красивей.
- Бот получает все сообщения в чате, а значит мы может проверять их на спам. Но думаю это тема для отдельного урока.
Теперь вы знаете, как создать простого Telegram-бота на PHP, который приветствует пользователей при заходе в чат. Если есть вопросы то пишите в наш чат @botphp_ru.