В этой статье я покажу, как создать универсальный PHP класс для отправки уведомлений в Telegram. Класс работает без дополнительных зависимостей и может быть использован в любом проекте: Laravel, Bitrix, MODX, WordPress или обычном PHP скрипте.
<?php
/**
* Universal Telegram Notifier
* Работает в любом PHP проекте: Laravel, Bitrix, MODX, WordPress и т.д.
*
* @author YR-Dev
* @version 1.0
*/
class TelegramNotifier
{
private $botToken;
private $chatId;
/**
* Конструктор
*
* @param string $botToken Токен бота от @BotFather
* @param string $chatId ID чата или пользователя
*/
public function __construct($botToken, $chatId)
{
$this->botToken = $botToken;
$this->chatId = $chatId;
}
/**
* Отправка текстового сообщения
*
* @param string $message Текст сообщения
* @param string $parseMode Форматирование: 'HTML', 'Markdown' или null
* @return bool
*/
public function send($message, $parseMode = 'HTML')
{
$url = "https://api.telegram.org/bot{$this->botToken}/sendMessage";
$data = [
'chat_id' => $this->chatId,
'text' => $message,
'parse_mode' => $parseMode
];
return $this->makeRequest($url, $data);
}
/**
* Отправка уведомления о новой заявке
*
* @param array $data Данные заявки
* @return bool
*/
public function sendLead($data)
{
$message = "НОВАЯ ЗАЯВКА\n\n";
$message .= "Имя: " . ($data['name'] ?? 'Не указано') . "\n";
if (!empty($data['phone'])) {
$message .= "Телефон: {$data['phone']}\n";
}
if (!empty($data['email'])) {
$message .= "Email: {$data['email']}\n";
}
if (!empty($data['telegram'])) {
$message .= "Telegram: {$data['telegram']}\n";
}
if (!empty($data['message'])) {
$message .= "\nСообщение:\n{$data['message']}\n";
}
$message .= "\nВремя: " . date('d.m.Y H:i:s');
return $this->send($message, 'HTML');
}
/**
* Отправка уведомления об ошибке
*
* @param string $error Текст ошибки
* @param string $context Дополнительный контекст
* @return bool
*/
public function sendError($error, $context = '')
{
$message = "ОШИБКА НА САЙТЕ\n\n";
$message .= "Ошибка: {$error}\n";
if ($context) {
$message .= "Контекст: {$context}\n";
}
$message .= "\nВремя: " . date('d.m.Y H:i:s');
$message .= "\nIP: " . ($_SERVER['REMOTE_ADDR'] ?? 'Unknown');
return $this->send($message, 'HTML');
}
/**
* Отправка уведомления о новом пользователе
*
* @param array $user Данные пользователя
* @return bool
*/
public function sendNewUser($user)
{
$message = "НОВЫЙ ПОЛЬЗОВАТЕЛЬ\n\n";
$message .= "ID: {$user['id']}\n";
$message .= "Имя: {$user['name']}\n";
$message .= "Email: {$user['email']}\n";
$message .= "\nДата: " . date('d.m.Y H:i:s');
return $this->send($message, 'HTML');
}
/**
* Отправка уведомления о заказе
*
* @param array $order Данные заказа
* @return bool
*/
public function sendOrder($order)
{
$message = "НОВЫЙ ЗАКАЗ #{$order['id']}\n\n";
$message .= "Сумма: {$order['total']} ₽\n";
$message .= "Клиент: {$order['customer_name']}\n";
if (!empty($order['items'])) {
$message .= "\nТовары:\n";
foreach ($order['items'] as $item) {
$message .= "- {$item['name']} x {$item['quantity']} = {$item['price']} ₽\n";
}
}
$message .= "\nВремя: " . date('d.m.Y H:i:s');
return $this->send($message, 'HTML');
}
/**
* Отправка простого текста без форматирования
*
* @param string $message Текст
* @return bool
*/
public function sendPlain($message)
{
return $this->send($message, null);
}
/**
* Отправка в несколько чатов
*
* @param string $message Текст сообщения
* @param array $chatIds Массив ID чатов
* @return array Результаты отправки
*/
public function sendToMultiple($message, $chatIds)
{
$results = [];
foreach ($chatIds as $chatId) {
$url = "https://api.telegram.org/bot{$this->botToken}/sendMessage";
$data = [
'chat_id' => $chatId,
'text' => $message,
'parse_mode' => 'HTML'
];
$results[$chatId] = $this->makeRequest($url, $data);
}
return $results;
}
/**
* Выполнение запроса к Telegram API
*
* @param string $url URL API
* @param array $data Данные для отправки
* @return bool
*/
private function makeRequest($url, $data)
{
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($data),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => true,
CURLOPT_TIMEOUT => 10,
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded'
]
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
$this->log("CURL Error: " . $error);
return false;
}
if ($httpCode !== 200) {
$this->log("HTTP Error: {$httpCode}, Response: {$response}");
return false;
}
$result = json_decode($response, true);
return isset($result['ok']) && $result['ok'] === true;
}
/**
* Логирование ошибок
*
* @param string $message
*/
private function log($message)
{
error_log("[TelegramNotifier] " . $message);
}
}