Надсилання повідомлення в Telegram канал

Telegram бот на PHP: Надсилання повідомлень в Telegram-канал

В мене виникла необхідність створити Telegram бот на PHP який би відправляв в Telegram-канал певне повідомлення у відповідь на команду /start і автоматично, щодня у певний час.

Для цього був створений PHP скрипт, автоматичний запуск якого на сервері реалізовувався за допомогою Cron.

Код Telegram бота для надсилання повідомлення в Telegram-канал

<?php
# Важливі константи
define('TOKEN', 'токен_бота');

# Список каналів для надсилання повідомлень
$channelIds = array(
    '@канал1',
    '@канал2'
);

# Приймаємо запит
$data = json_decode(file_get_contents('php://input'), TRUE);

if (isset($data['channel_post'])) {
    exit;
}

file_put_contents(__DIR__ . '/message.txt', print_r($data, true)); //зберігаємо вхідні дані у файл

# Якщо команда /start, або скрипт запущено за допомогою Cron, то надсилаємо повідомлення в Telegram-канали
if (isset($data['message']) && isset($data['message']['text']) && $data['message']['text'] == '/start') {
    foreach ($channelIds as $channelId) {
        $method = 'sendMessage';
        $send_data = [
            'chat_id' => $channelId,
            'text' => 'Hello, world!'
        ];
        sendTelegram($method, $send_data);
    }
} else if (php_sapi_name() === 'cli') {
    foreach ($channelIds as $channelId) {
        $method = 'sendMessage';
        $send_data = [
            'chat_id' => $channelId,
            'text' => 'Hello, world!'
        ];
        sendTelegram($method, $send_data);
    }
}

# Функція надсилання повідомлення в Telegram
function sendTelegram($method, $data, $headers = [])
{
    $curl = curl_init();
    curl_setopt_array($curl, [
        CURLOPT_POST => 1,
        CURLOPT_HEADER => 0,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_URL => 'https://api.telegram.org/bot' . TOKEN . '/' . $method,
        CURLOPT_POSTFIELDS => json_encode($data),
        CURLOPT_HTTPHEADER => array_merge(array("Content-Type: application/json"), $headers)
    ]);   
    
    $result = curl_exec($curl);
    curl_close($curl);
    return (json_decode($result, 1) ? json_decode($result, 1) : $result);
}

Main Menu