Copias de seguridad de la empresa
Los administradores y propietarios de la empresa abren su empresa en la aplicación web y seleccionan Copias de seguridad. Pueden solicitar copias de seguridad, descargar archivos ZIP y gestionar las claves API de su servidor de copias de seguridad. Esta exportación no está disponible en la aplicación móvil.
Alcance y límites
La copia de seguridad incluye los chats de proyecto habituales de la empresa, incluidos los chats archivados, con mensajes, reacciones, tarjetas de chat y los archivos adjuntos subidos asociados. También incluye metadatos de proyectos y chats, nombres de participantes y documentos de empresa publicados en esos chats. Los administradores y propietarios de la empresa pueden hacer copias de seguridad de chats de empresa a los que no se han unido personalmente.
Los mensajes directos, notas privadas, servicios visibles personalmente, chats entre empresas y borradores personales quedan excluidos. El contenido de Company Drive y los enlaces externos están fuera de esta exportación de chats. Si faltan archivos adjuntos asociados, la generación fallará. El ZIP es una exportación de datos; la importación automática de vuelta a Skava aún no está disponible.
Cuotas, incrementales y retención
Cada empresa puede solicitar una copia de seguridad completa dentro de los 7 días y dos copias de seguridad incrementales dentro de las 24 horas. Estas ventanas móviles comienzan con cada solicitud. Descargar de nuevo el mismo archivo listo no consume cuota de generación. Las tareas de generación fallidas no cuentan para estos límites.
Cada incremental contiene los cambios y las eliminaciones desde la última copia de seguridad transferida por completo y confirmada mediante suma de verificación. La cadena es A + B + C: A es la copia de seguridad completa, B contiene los cambios desde A, y C solo los cambios posteriores desde B. Reconstruye el estado aplicando cada paquete en orden. Los adjuntos sin cambios se refieren a archivos ya presentes en esta cadena.
Las descargas permanecen disponibles durante 24 horas después de que finalice la generación. Luego se elimina el ZIP, pero el historial se conserva. Mantén la copia de seguridad completa y todos los incrementales asociados localmente. El estado de comparación sigue siendo utilizable durante un máximo de 90 días después de la copia de seguridad completa; después se requiere una nueva copia de seguridad completa. Cada incremental identifica tanto la copia de seguridad completa como su predecesor directo mediante ID y SHA-256.
Solo un paquete recibido por completo y confirmado se convierte en el nuevo predecesor. Un incremental listo pero no confirmado bloquea otro incremental hasta que se confirme o expire. Después de que un paquete no confirmado expire, el siguiente intento parte del último estado confirmado e incluye los cambios aún no respaldados. Si falta una parte confirmada localmente, descárgala de nuevo dentro de su disponibilidad de 24 horas o inicia una nueva copia de seguridad completa sujeta al límite semanal. Prefiere un directorio de copia de seguridad compartido por empresa; los clientes independientes deben mantener la misma cadena completa.
Configura una clave de API
En Claves de API, introduce un nombre como «NAS de la empresa» y crea la clave. Se muestra una sola vez, caduca tras un año y se puede revocar en cualquier momento. Guárdala en el almacén de secretos protegido de tu entorno de copia de seguridad. La empresa es propietaria de la clave, que solo puede acceder a la API de copia de seguridad de esa empresa. Funciona de forma independiente de la conexión posterior de su creador.
Envíala mediante HTTPS en la cabecera Authorization: Bearer YOUR_BACKUP_TOKEN. Mantén las claves fuera de las URL, los scripts públicos y los registros. Solo los administradores y propietarios de la empresa pueden crear, listar y revocar claves.
Python: descarga una copia de seguridad completa y los incrementales
Descarga el cliente de Python company_backup.py y colócalo junto a tu script. Requiere Python 3.10 o superior en Linux o macOS y utiliza solo la biblioteca estándar. Establece SKAVA_BACKUP_TOKEN en el entorno de proceso protegido y sustituye 42 por el ID de la empresa de la dirección de la aplicación web.
import os
from company_backup import BackupClient
client = BackupClient("https://chat.skava.io", 42,
os.environ["SKAVA_BACKUP_TOKEN"])
full = client.backup("full", "backups") # once every 7 days
# Later, up to twice in a rolling 24-hour window:
diff = client.backup("diff", "backups")
Las tareas programadas pueden invocar el mismo cliente directamente:
python3 company_backup.py --company 42 --kind full --directory backups
python3 company_backup.py --company 42 --kind diff --directory backups
El cliente solicita la generación, consulta el estado, descarga el archivo en disco, verifica el tamaño, el SHA-256 y el contenido del ZIP, y confirma la recepción. Almacena las copias de seguridad completas e incrementales como archivos separados. Mantén el archivo de estado oculto en ese directorio: contiene la cadena y la información de reanudación. Antes de solicitar otra copia incremental, el cliente verifica todos los archivos ZIP anteriores. Tras una interrupción, repite el mismo comando. Se previenen tareas concurrentes para la misma empresa en el mismo directorio.
Flujo de API sin conexión persistente
- Solicitud:
POST /api/v1/companies/42/backupscon{"kind":"full","request_id":"YOUR_UNIQUE_ID"}. Para una incremental, establecekindendiffy envía el ID de tu copia de seguridad completa local comobase_idy el ID del último paquete confirmado comoparent_id. La respuesta proporcionajob.id. Reutiliza el mismorequest_idal reintentar. - Consulta:
GET /api/v1/companies/42/backups/JOB_ID, aproximadamente cada diez segundos. La generación se ejecuta en segundo plano durantequeuedorunning. No queda ninguna conexión abierta entre solicitudes. - Descarga: En estado
readyconavailable: true, llama aGET /api/v1/companies/42/backups/JOB_ID/download. Solo esta transferencia mantiene una conexión abierta. Si se interrumpe, descarga el archivo completo de nuevo. - Confirmar recepción: Comprueba
job.bytesyjob.sha256. TomaX-Backup-Download-IdyX-Backup-Receiptde las cabeceras de respuesta de la descarga. EnvíaPOST /api/v1/companies/42/backups/JOB_ID/downloads/DOWNLOAD_ID/confirmcon{"receipt":"RECEIPT","bytes":12345,"sha256":"SHA256"}. Solo una transferencia completa con confirmación coincidente cuenta como exitosa.
GET /api/v1/companies/42/backups devuelve el historial, paginado mediante next_offset. Cuotas agotadas o límites temporales de capacidad devuelven HTTP 429 con Retry-After. Las copias de seguridad se generan secuencialmente dentro de los límites para que las tareas nocturnas simultáneas no sobrecarguen la aplicación.
Comprender el historial de descargas
El historial muestra el tipo completo o incremental, la hora de solicitud, la caducidad, la copia de seguridad completa, el predecesor y cada intento de descarga con los bytes transferidos. «Ready» identifica un archivo generado. «Transferred» significa que el servidor envió todos los bytes. «Checksum confirmed» significa que el cliente verificó y confirmó la recepción completa. Los intentos interrumpidos y fallidos permanecen visibles.
La aplicación web verifica la recepción en el navegador antes de mostrar el diálogo de guardado. Esa confirmación no demuestra que el archivo se haya almacenado de forma permanente en su equipo. Para las copias de seguridad automatizadas, el cliente de Python escribe el archivo en el disco antes de confirmar la recepción. Las descargas desde la aplicación web están limitadas a 64 MiB; use el cliente de Python para archivos más grandes.