diff --git a/api/lab/save_config.php b/api/lab/save_config.php index 42fb5c7..aed766b 100644 --- a/api/lab/save_config.php +++ b/api/lab/save_config.php @@ -18,6 +18,9 @@ $permitidas = [ 'doc_color', 'doc_logo_base64', 'doc_pie_pagina', 'gemini_api_key', 'ia_activa', + 'sms_url', + 'sms_api_key', + 'sms_activo', ]; $guardadas = 0; diff --git a/api/lab/test_sms.php b/api/lab/test_sms.php new file mode 100644 index 0000000..58ed902 --- /dev/null +++ b/api/lab/test_sms.php @@ -0,0 +1,59 @@ + $numero, + 'mensaje' => $mensaje, +], JSON_UNESCAPED_UNICODE); + +$endpoint = $baseUrl . '/api/sms/send'; + +$ch = curl_init($endpoint); +curl_setopt_array($ch, [ + CURLOPT_RETURNTRANSFER => true, + CURLOPT_POST => true, + CURLOPT_POSTFIELDS => $payload, + CURLOPT_HTTPHEADER => [ + 'Content-Type: application/json', + 'Authorization: Bearer ' . $key, + ], + CURLOPT_TIMEOUT => 15, + CURLOPT_SSL_VERIFYPEER => true, +]); +$raw = curl_exec($ch); +$code = curl_getinfo($ch, CURLINFO_HTTP_CODE); +$err = curl_error($ch); +curl_close($ch); + +if ($err) jsonError('Error de conexión: ' . $err, 502); +if (!$raw) jsonError('Sin respuesta del servidor SMS.', 502); + +$resp = json_decode($raw, true); +if ($code >= 200 && $code < 300 && !empty($resp['ok'])) { + jsonOk(['id' => $resp['id'] ?? null]); +} + +$msg = $resp['error'] ?? "Error HTTP {$code}"; +jsonError($msg, 502); diff --git a/lab_configuracion.php b/lab_configuracion.php index c84bb6c..6e70b72 100644 --- a/lab_configuracion.php +++ b/lab_configuracion.php @@ -199,6 +199,58 @@ require_once __DIR__ . '/shared/components/sidebar.php'; + +
+ Permite enviar SMS a pacientes desde el sistema. Requiere una cuenta en WEBSms. +
+ +/api/sms/send.${d.id || '—'}`;
+ } else {
+ res.innerHTML = `${d.error || 'Error desconocido'}`;
+ }
+ } catch(_) {
+ res.innerHTML = 'No se pudo conectar.';
+ } finally {
+ btn.disabled = false;
+ btn.innerHTML = 'Enviar';
+ }
+}
+
async function probarIA() {
const key = $('c-gemini-key').value.trim();
const res = document.getElementById('ia-test-result');