Vai al contenuto

Database di Workspace

Conserva record strutturati, applica regole aziendali e usa viste live nella chat. Condividi database e assegna agli agenti accessi mirati.

Anche in Sluis Workspace: la panoramica di Workspace e Posta e calendario.

Che cosa sono i database

Un database contiene tabelle, campi tipizzati e record duraturi, come pratiche, contratti o attività. Richiede una descrizione di testo semplice su una riga, da 1 a 280 caratteri, che spieghi contenuto e destinatari.

Apri Database nella barra laterale, su /workspace/databases. Un database nuovo è privato. Non ci sono schermate app personalizzate, builder di interfacce, modalità Modifica, Schermo intero o gestori eseguibili delle viste. Le app Sluis Workspace desktop e mobile sono separate.

Creare e modificare

Chiedi un database o una modifica dello schema a qualsiasi modello della chat. La richiesta passa al builder sluis/code, che deve essere consentito dalla policy della tua organizzazione. Solo questo builder o un Agente configurato con il gruppo strumenti databases scrive schemi e regole. Gli altri modelli lavorano sui record e richiedono modifiche allo schema.

La sorgente è JSON per righe: intestazione database, righe collection, funzioni script facoltative, righe trigger e view fissate. Il blocco si chiama sluis-database. Componenti e gestori non sono supportati. Una Skill può includere un modello database.sluis nella radice dell'archivio.

Installa il modello di una Skill tramite POST /chat/skills/{skill_id}/install-database con la tua sessione membro.

Le versioni conservano autore e data. Gestisci permette di pubblicare e ripristinare schemi. Il ripristino crea una nuova versione corrente, senza cancellare la cronologia né ripristinare vecchi dati dei record.

Viste live e fissate

Chiedi una tabella, bacheca, grafico, calendario, cronologia, totale, modulo o singolo record. Un blocco sluis-view descrive la vista senza copiare i dati. Ogni lettore carica i dati attuali con i propri diritti; le modifiche condivise aggiornano la vista.

Gestisci permette di fissare viste sopra i dati o rimuoverle. Filtri, ordinamento e paginazione avvengono sul server. I moduli seguono campi e regole della tabella; i campi calcolati sono di sola lettura. Le viste non aggirano accesso o regole di scrittura.

```sluis-view
{"database":"<database UUID>","table":"contracts","view":"table","columns":["title","expiry"],"order":"expiry"}
```

Record e regole

Tipi: testo, numero, bool, data, JSON, file, persona e riferimento a un'altra tabella. Persone e riferimenti mostrano nomi o etichette. La cronologia mostra modifiche ai campi e autore. I record sono cifrati; indici con chiave consentono ricerca per uguaglianza e prefissi di parola in etichette e campi testuali ricercabili, senza memorizzare testo in chiaro. Risultati ed etichette rispettano la visibilità.

La ricerca indicizzata combina tutti i prefissi senza distinguere maiuscole, con almeno due caratteri alfanumerici per parola. Non cerca sottostringhe arbitrarie. Il testo libero restituisce fino a 200 risultati e segnala il troncamento. Oltre 25.000 candidati residui o 500 ID per etichetta restituiscono 422: aggiungi un filtro indicizzato. Un indice assente o obsoleto deve essere ricostruito prima di riprendere le letture.

  • Regole: required, unique, min/max, options, default e pattern. La maschera copre tutto il testo: # cifra, A maiuscola, a minuscola, * qualsiasi carattere. Non è un'espressione regolare.
  • I campi calcolati usano Rhai in sandbox, vengono ricalcolati e memorizzati in scrittura e non sono impostabili dal chiamante.
  • Le regole di stato definiscono stati, stato iniziale e transizioni con campi obbligatori e livello minimo Record, Tutti i dati o Gestisci.
  • I trigger server reagiscono a creazione, modifica o eliminazione. Inseriscono, modificano o rimuovono record nello stesso database, rifiutano la scrittura o notificano un membro. Le modifiche usano i diritti di chi scrive e la stessa transazione. Un rifiuto annulla tutto. Non avviano altri trigger server; le notifiche seguono il commit.
  • Moduli, modifica dati, strumenti chat, importazione, webhook, IA in batch e automazioni seguono le stesse regole. Un rifiuto restituisce 422 con motivi per campo.

Importa CSV o Excel con associazione delle colonne e anteprima, fino a 20.000 righe. Una riga non valida annulla tutto. Tutti i dati permette l'export CSV, Excel o JSON. File fino a 25 MiB sono controllati per malware e cifrati: PDF, Word, Excel, PowerPoint, testo, Markdown, CSV, JSON, PNG e JPEG. Diritti ed eliminazione seguono il record. databases.file_text estrae testo, comprese scansioni tramite Sluis OCR, con i diritti del lettore.

Condivisione e visibilità

Condividi come Privato, Persone specifiche o Organizzazione. Record permette di aggiungere e modificare o eliminare i propri record visibili. Tutti i dati vede e modifica anche tutti i record ed esporta. Gestisci aggiunge la pubblicazione di schemi, regole e viste fissate. Condivisione, eliminazione e impostazioni amministrative restano al proprietario o agli amministratori di un database dell'organizzazione; Gestisci non conferisce proprietà.

Per Record, ogni tabella mostra tutto, solo i propri record, nessuno o quelli che indicano il membro in un campo persona. Tutti i dati e Gestisci vedono tutto. Le versioni non azzerano la visibilità salvata. Revocare l'accesso interrompe anche quello live.

Accesso di chat e agenti

Gli strumenti chat elencano, cercano e leggono database accessibili, leggono allegati e mostrano viste. Cita un database con @ o abilita la ricerca nel chat per includerne descrizione e tabelle nel contesto. Questo non concede diritti. Lo strumento elenco resta disponibile anche senza database esistenti.

agent_write è ask per impostazione iniziale: ogni creazione, modifica o eliminazione attende una scheda di conferma. allow agisce senza scheda; read_only rifiuta. Approvare non aggiunge diritti. Cambiamenti a dati, schema o policy possono richiedere una nuova richiesta.

Collega database specifici a un Agente con permessi read o write. Ogni chiamata interseca il permesso attuale con i diritti del membro esecutore. Il gruppo databases aggiunge strumenti di schema, non accesso a tutti i database. Le esecuzioni non presidiate non possono confermare schede: scrivere richiede write e la policy allow.

L'IA in batch compila campi scelti dei record corrispondenti, fino a 200 per attività, con avanzamento, errori e annullamento. Usa diritti dell'iniziatore, policy, protezione dati e budget token normali. Il testo del record è dato, non istruzione. Le viste non chiamano Conoscenza, documenti, registrazioni o connettori come funzioni dell'interfaccia; usa Agenti o automazioni configurati.

Automazioni e webhook

Le automazioni reagiscono a creazioni, modifiche di campi scelti o transizioni di stato. I trigger temporali usano intervalli di almeno 15 minuti, frequenza giornaliera o settimanale, o anticipo rispetto a una data, con fuso orario. Le azioni avviano un Agente, notificano membri o chiamano un connettore MCP approvato. Le esecuzioni mostrano risultato e costo; l'attivazione mostra una stima da confermare da 5 € al mese.

L'automazione opera come il proprietario configurato, limitata al proprio database e ai permessi correnti dell'Agente. Membri, webhook e altri agenti possono avviarla, ma non la sua stessa esecuzione. Una catena non visita nuovamente un'automazione. Importazione e IA in batch non avviano automazioni dei record. Massimo 200 esecuzioni in coda per database al giorno. Le notifiche usano Workspace, push e preferenze email, massimo 20 per membro al giorno.

I webhook in ingresso sono disattivati finché un proprietario o amministratore non li abilita. Gestisci permette un endpoint per tabella: POST /hooks/databases/{database}/{collection}, senza sessione o token bearer. Il segreto whsec_ appare solo alla creazione o rotazione. L'elenco IP facoltativo accetta 20 indirizzi o intervalli CIDR.

Invia un oggetto JSON fino a 16 KiB. I campi sconosciuti vengono rimossi e i file ignorati; tutte le regole si applicano. Firma i byte esatti con HMAC-SHA256: X-Sluis-Timestamp contiene secondi Unix entro cinque minuti; X-Sluis-Signature è sha256= più l'esadecimale minuscolo di timestamp, punto e corpo. Una firma accettata non si riutilizza. Riprova 402, 429 o 5xx solo nella finestra; 429 include Retry-After. Senza Redis viene restituito 503.

Risposte: 201 creato; 400 oggetto non valido; 401 firma errata, scaduta o ripetuta; 402 credito bloccato; 403 IP rifiutato; 404 endpoint o funzione sconosciuto o spento; 413 limite corpo o spazio; 422 record non valido; 429 limite richieste; 503 indisponibile. Gli errori delle regole contengono error e issues con field, rule e message; le altre risposte non hanno corpo. Limiti: 120 consegne al minuto per endpoint, 600 per organizzazione e un limite per mittente. L'audit campiona i rifiuti in caso di abuso; la gestione mostra le ultime 20 consegne. Seguono esempi di firma.

SECRET='whsec_...'   # shown once when the endpoint is created or rotated
URL='https://gateway.sluis.ai/hooks/databases/DATABASE_ID/COLLECTION'
BODY='{"title":"Printer jammed","priority":"high"}'
TS=$(date +%s)
# HMAC-SHA256 over "<timestamp>.<exact body bytes>", lowercase hex
SIG=$(printf '%s.%s' "$TS" "$BODY" | openssl dgst -sha256 -hmac "$SECRET" -hex | sed 's/^.* //')
curl -i -X POST "$URL" \
  -H 'Content-Type: application/json' \
  -H "X-Sluis-Timestamp: $TS" \
  -H "X-Sluis-Signature: sha256=$SIG" \
  --data-binary "$BODY"
import { createHmac } from "node:crypto";

const body = JSON.stringify({ title: "Printer jammed", priority: "high" });
const ts = String(Math.floor(Date.now() / 1000));
const sig = createHmac("sha256", process.env.SLUIS_WEBHOOK_SECRET)
  .update(`${ts}.${body}`)
  .digest("hex");
const res = await fetch("https://gateway.sluis.ai/hooks/databases/DATABASE_ID/COLLECTION", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-Sluis-Timestamp": ts,
    "X-Sluis-Signature": `sha256=${sig}`,
  },
  body, // send exactly the string you signed
});
console.log(res.status); // 201 when the record was created

Limiti e fatturazione

Limiti: 256 KiB di sorgente, 20 tabelle, 100 campi per tabella e 16 KiB per record. Le regole usano una sandbox limitata senza rete o accesso libero ai file. Proprietari e amministratori possono disattivare Database nella console senza eliminare i dati.

Dalla data di fatturazione annunciata sette giorni prima, lo spazio costa 5,15 € per GB al mese per testo e dati e 0,0803 € per file, allegati e registrazioni (1 GB = 1.000.000.000 byte). Agenti e automazioni non presidiati costano 0,005 € al minuto, per secondo iniziato; le chat interattive non pagano durata. I token IA sono misurati separatamente.

Limite di spazio: 100 GB o 5.000.000 di oggetti per organizzazione radice di fatturazione, incluse le sotto-organizzazioni. È possibile fissare un tetto mensile. Un saldo esaurito sospende scritture che aggiungono spazio e lavoro non presidiato, non lettura, download, export o eliminazione. I dati esistenti restano. Schema, condivisione e amministrazione sono registrati nell'audit; la cronologia dei record è distinta.

Un rifiuto per spazio in sessione restituisce HTTP 413 con error.code storage_full; una richiesta troppo grande non contiene quel codice. PUT /chat/settings conserva database_webhooks_enabled se omesso o null. Invia true o false per cambiarlo; il valore iniziale è disattivato.