Primer commit del sistema separado falta mejorar mucho
This commit is contained in:
144
telegram/api/welcome/send_test.php
Executable file
144
telegram/api/welcome/send_test.php
Executable file
@@ -0,0 +1,144 @@
|
||||
<?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);
|
||||
}
|
||||
Reference in New Issue
Block a user