6.10 Как разместить Telegram-бота

Банер Мессенджеры стали неотъемлемой частью нашей жизни и Telegram занимает особое место среди них. Одной из уникальных особенностей Telegram является возможность создания ботов – специальных аккаунтов, управляемых программами. Эти боты могут выполнять различные задачи: от простых ответов на сообщения до сложных операций с данными.

Установка Telegram бота на виртуальном сервере открывает широкие возможности для автоматизации процессов, улучшения коммуникации с клиентами или просто для развлечения. Этот процесс может показаться сложным для новичков, но, следуя нашему пошаговому руководству, Вы сможете легко справиться с этой задачей.

Важно: перед началом установки убедитесь, что у Вас есть root-доступ к Вашему виртуальному серверу и базовые знания работы с командной строкой.

Установка и настройка Telegram-бота на PHP

Эта статья описывает пошаговую установку и настройку Telegram-бота с использованием PHP. Мы рассмотрим, как создать и зарегистрировать бота через BotFather, настроить Webhook, а также использовать библиотеку PHP Telegram Bot для автоматизации процесса.

Создание бота через BotFather

Для начала работы с Telegram API необходимо создать нового бота и получить уникальный API-токен:

1. Откройте Telegram и найдите @BotFather. Отправьте команду /newbot и следуйте инструкциям. Вам потребуется указать название и уникальное имя бота (имя должно заканчиваться на bot, например, example_bot).

2. После создания бота @BotFather выдаст API-токен, который потребуется для подключения вашего бота к Telegram API. Сохраните его в надежном месте.

Установка библиотеки PHP Telegram Bot

Чтобы работать с Telegram API на PHP, добавим библиотеку longman/telegram-bot в проект с помощью Composer. Выполните следующую команду в терминале:

  1. composer require longman/telegram-bot

Эта библиотека упростит взаимодействие с API и позволит обрабатывать команды и сообщения.

Настройка Webhook для бота

Webhook позволяет получать обновления от Telegram в реальном времени, но для его работы нужен сервер с поддержкой HTTPS. Создайте файл set.php для установки Webhook:

set.php
<?php
require __DIR__ . '/vendor/autoload.php';

$bot_api_key  = 'ВАШ_API_ТОКЕН';
$bot_username = 'ВАШ_ИМЯ_БОТА';
$hook_url     = 'https://your-domain/path/to/hook.php';

try {
    $telegram = new Longman\TelegramBot\Telegram($bot_api_key, $bot_username);
    $result = $telegram->setWebhook($hook_url);
    echo $result->isOk() ? $result->getDescription() : 'Ошибка установки Webhook';
} catch (Longman\TelegramBot\Exception\TelegramException $e) {
    // Обработка ошибок Telegram
}

Затем создайте файл hook.php, который будет обрабатывать запросы, поступающие от Telegram:

hook.php
[label getUpdatesCLI.php]
<?php
require __DIR__ . '/vendor/autoload.php';

$bot_api_key  = 'ВАШ_API_ТОКЕН';
$bot_username = 'ВАШ_ИМЯ_БОТА';

try {
    $telegram = new Longman\TelegramBot\Telegram($bot_api_key, $bot_username);
    $telegram->handle();
} catch (Longman\TelegramBot\Exception\TelegramException $e) {
    // Обработка ошибок Telegram
}

Загрузите оба файла на сервер и откройте set.php в браузере для регистрации Webhook. Если все правильно настроено, вы увидите сообщение Webhook was set.

Использование метода getUpdates (Альтернатива Webhook)

Если ваш сервер не поддерживает HTTPS, вместо Webhook можно использовать метод getUpdates. Он будет вручную запрашивать сообщения от Telegram. Настройте файл getUpdatesCLI.php и добавьте данные для подключения к базе данных, если хотите сохранять сообщения и пользователей:

$mysql_credentials = [
    'host'     => 'localhost',
    'port'     => 3306,
    'user'     => 'dbuser',
    'password' => 'dbpass',
    'database' => 'dbname',
];

$telegram->enableMySql($mysql_credentials);

Чтобы запустить скрипт, выполните:

  1. php getUpdatesCLI.php

Информируем: при использовании Composer для установки PHP Telegram Bot не требуется ручной автозапуск бота при каждом новом сообщении, так как работа бота автоматизируется с помощью Webhook или getUpdates.

После того как Webhook установлен, Telegram отправляет обновления автоматически на ваш сервер, вызывая скрипт hook.php. Этот файл содержит обработчик для запросов от Telegram и работает в реальном времени. Главное условие для Webhook — ваш сервер должен поддерживать HTTPS, чтобы Telegram мог отправлять обновления. Если Webhook настроен правильно, бот будет автоматически реагировать на сообщения, и не потребуется дополнительных действий для его запуска.

Альтернативой Webhook является getUpdates — метод опроса, который можно использовать на серверах без HTTPS. При его использовании скрипт нужно запускать вручную (например, через cron), чтобы бот мог регулярно проверять на наличие новых сообщений.

Примеры использования

Библиотека PHP Telegram Bot поддерживает множество команд и методов для управления ботом и взаимодействия с Telegram API. Вот несколько примеров возможностей, которые можно использовать:

  1. Отправка медиа: Вы можете отправлять фотографии, документы и видео.

    use Longman\TelegramBot\Request;
    
    $result = Request::sendPhoto([
        'chat_id' => $chat_id,
        'photo'   => 'https://example.com/image.jpg',
        'caption' => 'Вот ваше фото!',
    ]);
    
  2. Создание инлайн-кнопок: Вы можете добавить инлайн-кнопки для более интерактивного взаимодействия с пользователями.

    $keyboard = [
        'inline_keyboard' => [
            [
                ['text' => 'Перейти на сайт', 'url' => 'https://example.com'],
                ['text' => 'Получить больше информации', 'callback_data' => 'info']
            ],
        ],
    ];
    
    $result = Request::sendMessage([
        'chat_id'      => $chat_id,
        'text'         => 'Выберите опцию:',
        'reply_markup' => json_encode($keyboard),
    ]);
    
  3. Обработка команд: Можно настраивать команды, которые бот будет обрабатывать автоматически.

    $telegram->addCommand('/start', function ($chat_id) {
        return Request::sendMessage([
            'chat_id' => $chat_id,
            'text'    => 'Добро пожаловать в наш бот!',
        ]);
    });
    
  4. Автоответчики и уведомления: Вы можете настроить автоматические ответы на определенные сообщения или периодические уведомления.

    // Пример автоответчика
    $telegram->addCommand('/help', function ($chat_id) {
        return Request::sendMessage([
            'chat_id' => $chat_id,
            'text'    => 'Доступные команды: /start, /help',
        ]);
    });
    

Для подробной информации о возможностях библиотеки и примерах использования команд, посетите официальную документацию PHP Telegram Bot на GitHub.