feat(chat): botón Nuevo mensaje con búsqueda de paciente y picker de plantilla
- chat_buscar_paciente.php: GET ?q= busca en lab_pacientes por nombre,
documento o teléfono (mín. 2 chars, máx. 20 resultados)
- chat_start_conversation.php: POST {phone, template_name, lang, params}
— normaliza teléfono, busca/crea usuario en users, envía plantilla
vía WhatsAppService('turnero'), devuelve {ok, user_id}
- chat.php: botón "+ Nuevo" en sidebar header; modal 3 pasos:
1) buscar paciente (debounce 350ms) o ingresar número libre
2) lista de plantillas habilitadas
3) variables de la plantilla + Enviar
Al enviar recarga el sidebar y abre la conversación automáticamente
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
67efd470de
commit
ab72750410
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
/**
|
||||
* GET ?q= — Busca pacientes en lab_pacientes por nombre o documento.
|
||||
* Usado por el modal "Nuevo mensaje" del chat turnero.
|
||||
*/
|
||||
require_once __DIR__ . '/../../../config/config.php';
|
||||
requireAuthentication();
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
$q = trim($_GET['q'] ?? '');
|
||||
if (strlen($q) < 2) { echo json_encode(['ok' => true, 'data' => []]); exit; }
|
||||
|
||||
try {
|
||||
$pdo = Database::getInstance()->getConnection();
|
||||
$like = '%' . $q . '%';
|
||||
$rows = $pdo->prepare(
|
||||
"SELECT id, nombre_completo, telefono, numero_documento
|
||||
FROM lab_pacientes
|
||||
WHERE is_active = 1
|
||||
AND (nombre_completo LIKE ? OR numero_documento LIKE ? OR telefono LIKE ?)
|
||||
ORDER BY nombre_completo ASC
|
||||
LIMIT 20"
|
||||
);
|
||||
$rows->execute([$like, $like, $like]);
|
||||
echo json_encode(['ok' => true, 'data' => $rows->fetchAll(PDO::FETCH_ASSOC)]);
|
||||
} catch (Throwable $e) {
|
||||
http_response_code(500);
|
||||
echo json_encode(['ok' => false, 'error' => $e->getMessage()]);
|
||||
}
|
||||
Reference in New Issue
Block a user