У меня возникла необходимость создать 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);
}
В данном коде вам нужно изменить следующие параметры:
- токен_бота – токен, который вы получили при создании бота в @BotFather;
- канал1, канал2 – список Telegram каналов, в которые необходимо отправлять сообщения;
- Hello, world! – сообщение, которое будет отправляться в Telegram-канал.
Важно!
Ваш бот обязательно должен быть администратором в указанных в коде каналах.