6.11 Як розмістити 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.