Backup dell'azienda
Gli amministratori e i proprietari dell'azienda aprono la propria azienda nell'app web e selezionano Backup. Possono richiedere backup, scaricare file ZIP e gestire le chiavi API per il proprio server di backup. Questa esportazione non è disponibile nell'app mobile.
Ambito e limiti
Il backup contiene le chat di progetto regolari dell'azienda, incluse quelle archiviate, con messaggi, reazioni, schede chat e gli allegati caricati associati. Include anche metadati di progetto e chat, nomi dei partecipanti e documenti aziendali pubblicati in quelle chat. Gli amministratori e i proprietari dell'azienda possono eseguire il backup delle chat aziendali a cui non hanno aderito personalmente.
I messaggi diretti, le note private, i servizi visibili solo a livello personale, le chat tra aziende e le bozze personali sono esclusi. I contenuti di Company Drive e dei link esterni sono al di fuori di questa esportazione chat. Gli allegati associati mancanti causano il fallimento della generazione. Il ZIP è un'esportazione dati; l'importazione automatica in Skava non è ancora disponibile.
Quote, incrementali e conservazione
Ogni azienda può richiedere un backup completo entro 7 giorni e due backup incrementali entro 24 ore. Queste finestre mobili iniziano con ogni richiesta. Il download ripetuto dello stesso file già pronto non consuma la quota di generazione. I lavori di generazione falliti non contano verso questi limiti.
Ogni incrementale contiene le modifiche e le eliminazioni dal ultimo backup completamente trasferito e confermato tramite checksum. La catena è A + B + C: A è il backup completo, B contiene le modifiche da A, e C solo ulteriori modifiche da B. Ricostruisci lo stato applicando ogni pacchetto in ordine. Gli allegati invariati si riferiscono a file già presenti in questa catena.
I download restano disponibili per 24 ore dopo la fine della generazione. Il ZIP viene poi rimosso, mentre la cronologia resta. Conserva localmente il backup completo e ogni incrementale associato. Lo stato di confronto resta utilizzabile per al massimo 90 giorni dopo il backup completo; dopo è richiesto un nuovo backup completo. Ogni incrementale identifica sia il backup completo sia il suo predecessore diretto tramite ID e SHA-256.
Solo un pacchetto completamente ricevuto e confermato diventa il nuovo predecessore. Un incrementale pronto ma non confermato blocca un altro incrementale fino a conferma o scadenza. Dopo la scadenza di un pacchetto non confermato, il tentativo successivo parte dall'ultimo stato confermato e include le modifiche non ancora backup. Se una parte confermata manca localmente, scaricala di nuovo entro la sua disponibilità di 24 ore o avvia un nuovo backup completo soggetto al limite settimanale. Preferisci una directory di backup condivisa per azienda; i client indipendenti devono mantenere la stessa catena completa.
Configura una chiave API
In Chiavi API, inserisci un nome come “NAS aziendale” e crea la chiave. Viene visualizzata una sola volta, scade dopo un anno e può essere revocata in qualsiasi momento. Conservala nel vault di segreti protetto del tuo ambiente di backup. La chiave appartiene all'azienda e può accedere solo all'API di backup di quell'azienda. Funziona in modo indipendente dal successivo accesso del suo creatore.
Trasmettila tramite HTTPS nell'header Authorization: Bearer YOUR_BACKUP_TOKEN. Tieni le chiavi fuori da URL, script pubblici e log. Solo gli amministratori e i proprietari dell'azienda possono creare, elencare e revocare le chiavi.
Python: scarica un backup completo e gli incrementali
Scarica il client Python company_backup.py e posizionalo accanto al tuo script. Richiede Python 3.10 o versioni successive su Linux o macOS e utilizza solo la libreria standard. Imposta SKAVA_BACKUP_TOKEN nell'ambiente di processo protetto e sostituisci 42 con l'ID dell'azienda dall'indirizzo dell'app 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")
I job pianificati possono richiamare direttamente lo stesso client:
python3 company_backup.py --company 42 --kind full --directory backups
python3 company_backup.py --company 42 --kind diff --directory backups
Il client richiede la generazione, interroga lo stato, scarica lo stream su disco, verifica dimensione, SHA-256 e contenuto del ZIP e conferma la ricezione. Salva backup completi e incrementali come file separati. Mantieni il file di stato nascosto in quella directory: contiene le informazioni sulla catena e sulla ripresa. Prima di richiedere un altro incremento, il client verifica ogni file ZIP precedente. Dopo un'interruzione, ripeti lo stesso comando. I job concorrenti per la stessa azienda nella stessa directory vengono prevenuti.
Flusso API senza connessione persistente
- Richiesta:
POST /api/v1/companies/42/backupscon{"kind":"full","request_id":"YOUR_UNIQUE_ID"}. Per un incremento, impostakindsudiffe invia l'ID del tuo backup completo locale comebase_ide l'ID dell'ultimo pacchetto confermato comeparent_id. La risposta forniscejob.id. Riutilizza lo stessorequest_idin caso di nuovo tentativo. - Interrogazione:
GET /api/v1/companies/42/backups/JOB_ID, circa ogni dieci secondi. La generazione avviene in background durantequeuedorunning. Nessuna connessione rimane aperta tra le richieste. - Download: In stato
readyconavailable: true, chiamareGET /api/v1/companies/42/backups/JOB_ID/download. Solo questo trasferimento mantiene la connessione aperta. In caso di interruzione, scaricare nuovamente l'intero file. - Conferma la ricezione: Verifica
job.bytesejob.sha256. PrendiX-Backup-Download-IdeX-Backup-Receiptdagli header della risposta di download. InviaPOST /api/v1/companies/42/backups/JOB_ID/downloads/DOWNLOAD_ID/confirmcon{"receipt":"RECEIPT","bytes":12345,"sha256":"SHA256"}. Solo un trasferimento completo con una conferma corrispondente è considerato riuscito.
GET /api/v1/companies/42/backups restituisce lo storico, paginato tramite next_offset. Quote esaurite o limiti temporanei di capacità restituiscono HTTP 429 con Retry-After. I backup vengono generati in sequenza entro i limiti, in modo che i job notturni simultanei non sovraccarichino l'applicazione.
Comprendere lo storico dei download
La cronologia mostra il tipo completo o incrementale, l'ora della richiesta, la scadenza, il backup completo, il predecessore e ogni tentativo di download con i byte trasferiti. "Pronto" identifica un file generato. "Trasferito" significa che il server ha inviato tutti i byte. "Checksum confermato" significa che il client ha verificato e confermato la ricezione completa. I tentativi interrotti e falliti restano visibili.
L'app web verifica la ricezione nel browser prima della finestra di dialogo di salvataggio. Questa conferma non dimostra che il file sia stato successivamente archiviato in modo permanente sul computer. Per i backup automatici, il client Python scrive il file su disco prima di confermare la ricezione. I download tramite app web sono limitati a 64 MiB; usa il client Python per archivi più grandi.