Package Exports
- predoc-sdk
- predoc-sdk/dist/index.css
Readme
Predoc SDK 🏥
Un SDK de React para integrar un chat médico pre-consulta en tu aplicación
✨ Características
- 💬 Chat interactivo para pre-consultas médicas
- 🎨 Totalmente personalizable
- 📱 Diseño responsive
- 🔄 Integración seamless con React
- 🎯 Dos variantes: burbuja flotante o pantalla completa
- 🖼️ Soporte para envío de imágenes
- 📋 Resumen de consulta para profesionales médicos
- 📝 Generación de recetas médicas
🚀 Instalación
npm install predoc-sdk
# o
yarn add predoc-sdk
📖 Uso Básico
1. Importa los componentes
import { ChatBot, Predoc } from 'predoc-sdk';
import 'predoc-sdk/dist/index.css';
2. Implementa el chat
function App() {
const userData = {
name: "Juan Pérez",
uid: "user123",
// opcional
uniqueId: "unique123",
img: "https://example.com/avatar.jpg",
link: "https://ejemplo.com/perfil"
};
return (
<ChatBot
userData={userData}
companyName="Mi Clínica"
primaryColor="#3562FF"
variant="bubble"
/>
);
}
🎨 Personalización
ChatBot Props
Prop | Tipo | Default | Descripción |
---|---|---|---|
companyName |
string | - | Nombre de la empresa que se mostrará en el chat |
userData |
UserData | - | Datos del usuario (ver interfaz abajo) |
apiKey |
string | "" | Clave API opcional para autenticación |
apiUrl |
string | "" | URL de la API para el servicio de chat |
primaryColor |
string | "#091c1a" | Color principal para el tema del chat |
position |
string | "bottom-right" | Posición de la burbuja ("bottom-right", "bottom-left", "top-right", "top-left") |
placeholder |
string | "Escribe un mensaje" | Texto placeholder del input |
variant |
string | "bubble" | Variante del chat ("bubble" o "fullscreen") |
onError |
function | console.error | Callback para manejar errores |
onFinish |
function | undefined | Callback que se ejecuta cuando finaliza la consulta |
Interfaz UserData
interface UserData {
uid: string; // ID único del usuario (requerido)
uniqueId?: string; // ID único alternativo (opcional)
name?: string; // Nombre del usuario
img?: string; // URL de la imagen de perfil
link?: string; // Link al perfil del usuario
reason?: string; // Motivo de la consulta
}
Interfaz MessageContent
interface MessageContent {
message: string; // Texto del mensaje
time?: string; // Hora del mensaje
image?: string; // URL de la imagen adjunta
file?: File; // Archivo adjunto
}
📋 Componente de Resumen
El componente Predoc
proporciona un resumen de la consulta para profesionales médicos:
<Predoc
companyName="Mi Clínica"
userData={userData}
position="top-right"
animation="scale"
apiUrl="https://api.miservicio.com"
onGeneratePrescription={(data) => {
// Lógica para generar receta médica
console.log("Generando receta...", data);
}}
/>
Predoc Props
Prop | Tipo | Default | Descripción |
---|---|---|---|
companyName |
string | - | Nombre de la empresa |
userData |
UserData | - | Datos del usuario |
apiUrl |
string | - | URL de la API para obtener los datos del resumen |
position |
string | "bottom-right" | Posición del botón de resumen ("bottom-right", "bottom-left", "top-right", "top-left", "custom") |
customPosition |
string | undefined | Clase CSS personalizada para posicionamiento cuando position es "custom" |
animation |
string | "pulse" | Tipo de animación ("none", "pulse", "bounce", "spin", "scale") |
modal |
boolean | false | Si es true, el resumen se muestra como un modal |
onGeneratePrescription |
function | undefined | Función que se ejecuta al hacer clic en "Generar receta" (recibe los datos del resumen) |
isLoadingPrescription |
boolean | false | Indica si la receta se está generando actualmente |
prescriptionError |
boolean | false | Indica si ha ocurrido un error durante la generación de la receta |
prescriptionGenerated |
boolean | false | Indica si la receta ha sido generada exitosamente |
isOpen |
boolean | true | Controla si el modal está abierto o cerrado |
renderAsModal |
boolean | false | Si es true, renderiza el componente como un modal; si es false, lo renderiza como un componente normal |
🌈 Ejemplos
Chat con Tema Personalizado
<ChatBot
userData={userData}
companyName="Mi Clínica"
primaryColor="#FF5733"
position="bottom-left"
placeholder="Chatea con nuestro asistente médico..."
/>
Chat en Pantalla Completa
<ChatBot
userData={userData}
companyName="Mi Clínica"
variant="fullscreen"
primaryColor="#3562FF"
/>
Implementación con Generación de Receta
import React, { useState } from 'react';
import { ChatBot, Predoc } from 'predoc-sdk';
import 'predoc-sdk/dist/index.css';
function App() {
const userData = {
name: "Juan Pérez",
uid: "user123",
uniqueId: "unique123"
};
const [isPrescriptionGenerated, setIsPrescriptionGenerated] = useState(false);
const [isLoadingPrescription, setIsLoadingPrescription] = useState(false);
const [prescriptionError, setPrescriptionError] = useState(false);
const handleGeneratePrescription = (summaryData) => {
// Implementar lógica para generar receta con los datos del resumen
setIsLoadingPrescription(true);
console.log("Generando receta con datos:", summaryData);
// Simular una llamada API
setTimeout(() => {
// API call u otras operaciones
setIsLoadingPrescription(false);
setIsPrescriptionGenerated(true);
// En caso de error:
// setPrescriptionError(true);
}, 2000);
};
return (
<>
<Predoc
animation="scale"
position="top-right"
userData={userData}
companyName="Mi Clínica"
apiUrl="https://api.miservicio.com"
modal={true}
onGeneratePrescription={handleGeneratePrescription}
isLoadingPrescription={isLoadingPrescription}
prescriptionError={prescriptionError}
prescriptionGenerated={isPrescriptionGenerated}
/>
<ChatBot
userData={userData}
companyName="Mi Clínica"
primaryColor="#3562FF"
variant="bubble"
position="bottom-right"
placeholder="Escribe tu consulta..."
onError={(error) => console.error('Chat error:', error)}
apiUrl="https://api.miservicio.com"
onFinish={() => console.log("Consulta finalizada")}
/>
{isPrescriptionGenerated && (
<div className="notification">
¡Receta generada con éxito!
</div>
)}
</>
);
}
export default App;
🚨 Manejo de Mensajes y Archivos
El SDK permite el envío de mensajes de texto e imágenes:
// Estructura de mensaje utilizada internamente
const message = {
message: "Texto del mensaje",
time: "12:30",
image: "https://example.com/image.jpg", // URL de imagen
file: fileObject // Objeto File de JavaScript
};
🔧 Manejo de Errores
El componente incluye un manejador de errores que puede ser personalizado a través de la prop onError
:
<ChatBot
userData={userData}
companyName="Mi Clínica"
onError={(error) => {
console.error('Error en el chat:', error);
// Tu lógica de manejo de errores
}}
/>
📱 Responsive Design
El SDK está diseñado para ser completamente responsive:
- En móviles, la burbuja se adapta automáticamente
- El modo
fullscreen
utiliza todo el espacio disponible - Los mensajes y elementos se ajustan al tamaño de la pantalla
🤝 Contribución
Las contribuciones son bienvenidas. Por favor, abre un issue primero para discutir los cambios que te gustaría hacer.
- Fork el repositorio
- Crea tu rama de feature (
git checkout -b feature/amazing-feature
) - Commit tus cambios (
git commit -m 'Add: amazing feature'
) - Push a la rama (
git push origin feature/amazing-feature
) - Abre un Pull Request
📝 License
ISC © ÜMA Salud
🙋♂️ Soporte
¿Tienes preguntas? ¿Necesitas ayuda? No dudes en:
- Abrir un issue en GitHub
- Contactarnos en info@umasalud.com
- Visitar nuestra documentación completa