Бот на PHP приветствующий всех в чате

Урок по созданию своего бота на PHP который будет приветствовать всех новичков в чате.

Бот на PHP приветствующий всех в чате

В этом уроке мы научимся создавать телеграм-бота на PHP, который будет отправлять приветственное сообщение новым пользователям. Это будет полезно, если у вас свой чат. В приветственном сообщении можно рассказать о правилах чата.

Не будем останавливаться на пунктах, которые мы уже рассмотрели в уроке Первый бот. Если вы ещё не читали этот материал, рекомендуется ознакомиться с ним.

Подготовка окружения

  1. Убедитесь, что у вас установлен PHP на вашем хостинге. Как выбрать и купить хостинг написано тут.
  2. Создайте папку для вашего проекта, например, telegram-bot.
  3. Внутри этой папки создайте файл index.php. Это будет основной файл нашего бота.

Настройка Webhook

Telegram использует Webhook для отправки данных о событиях (например, когда пользователь заходит в чат). Чтобы наш бот мог получать эти данные, нужно настроить Webhook.

  1. Убедитесь, что у вас есть доступ к серверу с поддержкой HTTPS (это обязательное требование Telegram).
  2. Разместите ваш файл index.php на сервере.
  3. Настройте 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;
}

Разберем написанный код

  1. Получение данных от Telegram:
    • Telegram отправляет данные в формате JSON через POST-запрос.
    • Мы используем file_get_contents('php://input'), чтобы получить эти данные.
    • Затем преобразуем JSON в массив PHP с помощью json_decode.
  2. Обработка событий:
    • Если это обычное сообщение, вызывается функция handleMessage.
    • Если это событие изменения состояния чата (например, пользователь зашел в группу), вызывается функция handleChatMemberUpdate.
  3. Отправка сообщений:
    • Для отправки сообщений используется метод sendMessage Telegram API.
    • Мы используем cURL для выполнения HTTP-запроса к API Telegram.
  4. Проверка статуса пользователя:
    • В событии my_chat_member проверяем поле new_chat_member['status']. Если оно равно 'member', значит, пользователь зашел в чат.

Теперь протестируем наш код

Добавляем админом нашего в бота в тестовую группу и входим и выходим другим аккунтом в этот чат. Бот должен начать отправить приветственное сообщение.

Как улучшить нашего бота

Не буду писать код, который поможет улучшить функционал, просто расскажу вам пару идей, которые вы сами сможете внедрить.

  1. Удаление старых сообщений. Как сделать: пишете в базу id последнего приветственного сообщения при его отправке. Потом ботом удаляете это сообщение по его id.
  2. Можно персонализировать сообщение, получив имя пользователя из поля first_name.
  3. Можно проверять что ваш бот работает только в вашей группе, просто проверив что $update['message']['chat']['id'] совпадает с id вашей группы.
  4. Можно удалять системные сообщения о добавлении в чат или выходе из него. Так чат будет выглядеть красивей.
  5. Бот получает все сообщения в чате, а значит мы может проверять их на спам. Но думаю это тема для отдельного урока.

Теперь вы знаете, как создать простого Telegram-бота на PHP, который приветствует пользователей при заходе в чат. Если есть вопросы то пишите в наш чат @botphp_ru.

Комментарии