Files

144 lines
5.2 KiB
PHP
Executable File

<?php
/**
* API - Enviar Mensaje de Bienvenida de Prueba a Telegram
*/
header('Content-Type: application/json');
// Habilitar errores para debug (quitar en producción estricta)
ini_set('display_errors', 0);
error_reporting(E_ALL);
require_once __DIR__ . '/../../../shared/utils/helpers.php';
require_once __DIR__ . '/../../../shared/auth/jwt.php';
require_once __DIR__ . '/../../../shared/database/connection.php';
// Verificar autenticación
$userData = JWTAuth::authenticate();
if (!$userData) {
jsonResponse(['success' => false, 'error' => 'No autenticado'], 401);
}
// Verificar permiso
if (!hasPermission('manage_welcome', 'telegram')) {
jsonResponse(['success' => false, 'error' => 'No tienes permiso para gestionar el mensaje de bienvenida de Telegram.'], 403);
}
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
jsonResponse(['success' => false, 'error' => 'Método no permitido'], 405);
}
try {
$db = getDB();
$botToken = $_ENV['TELEGRAM_BOT_TOKEN'] ?? getenv('TELEGRAM_BOT_TOKEN');
if (!$botToken) {
throw new Exception("Token de bot de Telegram no configurado.");
}
// 1. Obtener la configuración de bienvenida
$stmt = $db->query("
SELECT b.*, g.ruta as imagen_ruta
FROM bienvenida_telegram b
LEFT JOIN gallery g ON b.imagen_id = g.id
LIMIT 1
");
$config = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$config || empty($config['activo'])) {
throw new Exception("El mensaje de bienvenida no está activo o configurado.");
}
if (empty($config['chat_id'])) {
throw new Exception("No hay un canal de bienvenida configurado.");
}
$chat_id = $config['chat_id'];
$texto = $config['texto'] ?? "¡Bienvenido {usuario}!";
$imagen_url = !empty($config['imagen_id']) && !empty($config['imagen_ruta']) ?
($_ENV['APP_URL'] ?? 'http://localhost') . '/gallery/uploads/' . basename($config['imagen_ruta']) : null;
// Simular un nuevo usuario para el mensaje de prueba
$testUser = $userData->username ?? 'Tester'; // Usar el username del usuario logueado como test
$messageText = str_replace('{usuario}', $testUser, $texto);
// Preparar opciones de teclado (botones de idioma y botón "Únete al grupo")
$keyboard = [];
$inline_keyboard = [];
// Botones de Idioma
$idiomasHabilitados = json_decode($config['idiomas_habilitados'], true) ?? [];
if (!empty($idiomasHabilitados)) {
$row = [];
foreach ($idiomasHabilitados as $langCode) {
// Suponemos que tienes una forma de obtener el nombre del idioma por su código
$langName = strtoupper($langCode); // Simplificado: usa el código como nombre
$row[] = ['text' => $langName, 'callback_data' => "lang_select_{$langCode}"];
if (count($row) == 2) { // 2 botones por fila
$inline_keyboard[] = $row;
$row = [];
}
}
if (!empty($row)) {
$inline_keyboard[] = $row;
}
}
// Botón "Únete al grupo"
if (!empty($config['boton_unirse_texto']) && !empty($config['boton_unirse_url'])) {
$inline_keyboard[] = [['text' => $config['boton_unirse_texto'], 'url' => $config['boton_unirse_url']]];
}
if (!empty($inline_keyboard)) {
$keyboard = ['inline_keyboard' => $inline_keyboard];
}
$telegramApiUrl = "https://api.telegram.org/bot{$botToken}/";
$method = 'sendMessage';
$postFields = [
'chat_id' => $chat_id,
'parse_mode' => 'HTML', // o 'MarkdownV2', dependiendo del formato de Summernote
];
if ($imagen_url) {
$method = 'sendPhoto';
$postFields['photo'] = $imagen_url;
$postFields['caption'] = $messageText;
unset($postFields['text']); // sendPhoto usa 'caption' en lugar de 'text'
} else {
$postFields['text'] = $messageText;
}
if (!empty($keyboard)) {
$postFields['reply_markup'] = json_encode($keyboard);
}
$ch = curl_init($telegramApiUrl . $method);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postFields));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curlError = curl_error($ch);
curl_close($ch);
if ($curlError) {
throw new Exception("Error cURL: " . $curlError);
}
$responseJson = json_decode($response, true);
if ($httpCode !== 200 || !($responseJson['ok'] ?? false)) {
$errorMsg = $responseJson['description'] ?? 'Error desconocido de Telegram API';
throw new Exception("Telegram API Error ({$httpCode}): {$errorMsg}");
}
logToFile('telegram/messages.log', "Mensaje de bienvenida de prueba enviado a {$chat_id} por {$userData->username}");
jsonResponse(['success' => true, 'message' => 'Mensaje de prueba enviado con éxito a Telegram!', 'telegram_response' => $responseJson]);
} catch (Exception $e) {
logToFile('telegram/errors.log', "Error enviando mensaje de bienvenida de prueba: " . $e->getMessage(), 'ERROR');
jsonResponse(['success' => false, 'error' => $e->getMessage()], 500);
}