Ga naar de inhoud

Workspace Databases

Bewaar gestructureerde records, dwing bedrijfsregels af en werk met live weergaven in chat. Deel databases met collega's en geef agents gerichte toegang.

Ook in Sluis Workspace: het Workspace-overzicht en Mail en agenda.

Wat databases zijn

Een database bevat tabellen, getypeerde velden en records die je bijhoudt, zoals dossiers, contracten of taken. Elke database heeft een verplichte beschrijving van 1 tot 280 tekens: platte tekst op één regel die uitlegt wat erin staat en voor wie.

Open Databases in de zijbalk via /workspace/databases. Een nieuwe database is privé. Databases hebben geen eigen appschermen, appbouwer, bewerkmodus, volledig scherm of uitvoerbare weergavehandlers. De desktop- en mobiele apps van Sluis Workspace staan hier los van.

Een database maken en wijzigen

Vraag elk chatmodel om een database of schemawijziging. Het draagt je verzoek over aan de codebouwer sluis/code, die het modelbeleid van je organisatie moet toestaan. Alleen die bouwer of een ingestelde Agent met de toolgroep databases schrijft schema's en regels. Gewone chatmodellen werken met records en vragen schemawijzigingen aan.

De bron is JSON-regels: een databasekop, collection-regels, optionele scriptfuncties, trigger-regels en vastgezette view-regels. Het codeblok heet sluis-database. Componenten en handlers worden niet ondersteund. Een Skill kan in de hoofdmap van het archief een database.sluis-sjabloon bevatten.

Installeer een Skill-sjabloon via POST /chat/skills/{skill_id}/install-database met je ledensessie.

Versies bewaren auteur en datum. Met Beheren publiceer en herstel je schemaversies. Herstellen maakt een nieuwe huidige versie, zonder geschiedenis te wissen, en zet geen oude kopie van de records terug.

Live en vastgezette weergaven

Vraag om een tabel, bord, grafiek, kalender, tijdlijn, totaal, formulier of afzonderlijk record. Een sluis-view-blok beschrijft de weergave en bevat geen kopie van de records. Elke lezer haalt de actuele gegevens op met eigen rechten; gedeelde wijzigingen verversen de weergave.

Met Beheren zet je een weergave vast boven de data of verwijder je de pin. Filteren, sorteren en pagineren gebeurt op de server. Formulieren volgen de velden en regels van de tabel; berekende velden zijn alleen-lezen. Een weergave omzeilt nooit zichtbaarheid of schrijfregels.

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

Records en regels

Velden ondersteunen tekst, getallen, bool, datum, JSON, bestand, persoon en verwijzingen naar een andere tabel. Personen en verwijzingen tonen namen of labels. Recordgeschiedenis toont veldwijzigingen en de auteur. Records zijn versleuteld; sleutelgebonden indexen zoeken op gelijkheid en woordprefixen in labels en doorzoekbare tekstvelden zonder platte tekst op te slaan. Resultaten en verwijzingslabels volgen de zichtbaarheid.

Geïndexeerd zoeken combineert alle woordprefixen zonder hoofdletteronderscheid, met minimaal twee letters of cijfers per woord. Het zoekt niet naar willekeurige tekstfragmenten. Vrije tekst geeft maximaal 200 resultaten en meldt afkapping. Brede restfilters boven 25.000 kandidaten of verwijzingslabels boven 500 ID's geven 422: voeg een geïndexeerd filter toe. Bij een ontbrekende of verouderde index wacht lezen op de herbouw.

  • Veldregels: required, unique, min/max, options, default en pattern. Een patroon is een masker voor de hele tekst: # is een cijfer, A een hoofdletter, a een kleine letter en * een willekeurig teken. Het is geen reguliere expressie.
  • Berekende velden gebruiken Rhai-expressies in een sandbox, worden bij schrijven opnieuw berekend en opgeslagen en zijn niet handmatig instelbaar.
  • Statusregels bepalen toestanden, een beginstatus en toegestane overgangen, met verplichte velden en minimaal Records, Alle gegevens of Beheren.
  • Servertriggers draaien bij aanmaken, wijzigen of verwijderen. Ze voegen records in dezelfde database toe, wijzigen of verwijderen ze, weigeren een wijziging of melden een lid. Recordeffecten gebruiken de rechten van de schrijver en worden samen met de oorspronkelijke wijziging vastgelegd. Bij een weigering wordt alles teruggedraaid. Triggerwijzigingen starten geen nieuwe servertriggers; meldingen volgen na vastlegging.
  • Formulieren, databewerkingen, chattools, import, webhooks, batch-AI en automatiseringen gebruiken dezelfde regels. Een weigering geeft 422 met redenen per veld.

Importeer CSV of Excel met kolomkoppeling en voorbeeld, tot 20.000 rijen. Eén ongeldige rij annuleert de hele import. Met Alle gegevens exporteer je CSV, Excel of JSON. Bestanden tot 25 MiB worden op malware gecontroleerd en versleuteld: PDF, Word, Excel, PowerPoint, tekst, Markdown, CSV, JSON, PNG en JPEG. Toegang volgt het record en verwijderen van het record verwijdert de bestanden. databases.file_text leest tekst, inclusief scans via Sluis OCR, met de rechten van de lezer.

Delen en zichtbaarheid

Kies bij Delen voor Privé, Bepaalde collega's of Organisatie. Records mag toevoegen en eigen zichtbare records wijzigen of verwijderen. Alle gegevens ziet en wijzigt ook alle records en exporteert. Beheren publiceert daarnaast schema's, regels en vastgezette weergaven. Delen, verwijderen en beheerinstellingen blijven voorbehouden aan de eigenaar of beheerders van een organisatiebrede database; Beheren maakt je geen eigenaar.

Voor Records toont elke tabel alles, alleen eigen records, geen records of records waarvan een gekozen persoonsveld het lid noemt. Alle gegevens en Beheren zien alles. Een schemaversie verandert opgeslagen zichtbaarheidsinstellingen niet. Ingetrokken toegang beëindigt ook live toegang.

Toegang voor chat en agents

Chattools tonen, doorzoeken en lezen toegankelijke databases, lezen bijlagen en maken weergaven. Noem een database met @ of zet Doorzoekbaar in chat aan om beschrijving en tabellen in de chatcontext op te nemen. Dit helpt bij vinden, maar geeft geen rechten. De lijsttool blijft beschikbaar als er nog geen databases zijn.

agent_write staat per database standaard op ask: aanmaken, wijzigen en verwijderen wachten elk op een bevestigingskaart. allow voert ze zonder kaart uit; read_only weigert ze. Akkoord geeft geen extra rechten. Gewijzigde records, schema's of beleid kunnen een nieuw verzoek nodig maken.

Koppel specifieke databases aan een Agent met lees- of schrijfrechten. Elke aanroep combineert de actuele toekenning met de toegang van het uitvoerende lid. De toolgroep databases voegt schematools toe, geen toegang tot alle databases. Onbeheerde uitvoeringen kunnen geen kaart bevestigen: schrijven vereist zowel schrijfrechten als het databasebeleid allow.

Batch-AI vult gekozen velden van passende records, maximaal 200 per taak, met voortgang, fouten en annuleren. Dit gebruikt de rechten van de starter en het normale modelbeleid, de gegevensbescherming en het tokenbudget. Recordtekst is data, geen instructie. Weergaven roepen geen Kennisbank, documenten, opnames of connectors als UI-functie aan; gebruik daarvoor ingestelde Agents of automatiseringen.

Automatiseringen en webhooks

Automatiseringen reageren op nieuwe records, wijzigingen in gekozen velden of een statusovergang. Tijdtriggers werken met intervallen van minimaal 15 minuten, dagelijks, wekelijks of vóór een datumveld, met tijdzone. Acties starten een Agent, melden leden of roepen een goedgekeurde MCP-connector aan. Uitvoeringen tonen resultaat en kosten; activeren toont een schatting en vraagt bevestiging vanaf €5 per maand.

Een automatisering draait als de ingestelde eigenaar, beperkt tot de database en actuele toekenningen van de Agent. Passende wijzigingen van leden, webhooks en andere agents kunnen haar starten, maar de eigen uitvoering niet. Een keten bezoekt dezelfde automatisering niet opnieuw. Import en batch-AI starten geen recordautomatiseringen. Maximaal 200 uitvoeringen per database per dag worden ingepland. Meldingen gebruiken de Workspace-inbox, push en de e-mailvoorkeur van het lid, maximaal 20 per lid per dag.

Inkomende webhooks staan uit tot een eigenaar of beheerder Database-webhooks inschakelt. Met Beheren maak je één eindpunt per tabel via POST /hooks/databases/{database}/{collection}, zonder sessie of bearer-token. Het whsec_-geheim verschijnt één keer bij maken of roteren. Een optionele IP-lijst bevat maximaal 20 adressen of CIDR-bereiken.

Stuur één JSON-object van maximaal 16 KiB. Onbekende velden verdwijnen en bestandsvelden worden genegeerd; alle recordregels gelden. Onderteken de exacte body met HMAC-SHA256: X-Sluis-Timestamp is Unix-tijd in seconden binnen vijf minuten; X-Sluis-Signature is sha256= plus de hex-handtekening in kleine letters over tijdstip, punt en bodybytes. Een geaccepteerde handtekening mag niet opnieuw worden gebruikt. Herhaal 402, 429 of 5xx alleen binnen het tijdvenster; 429 bevat Retry-After. Zonder Redis volgt 503.

Antwoorden: 201 aangemaakt; 400 ongeldig object; 401 ongeldige, verlopen of herhaalde handtekening; 402 krediet geblokkeerd; 403 IP geweigerd; 404 onbekend of uitgeschakeld eindpunt of functie; 413 body- of opslaglimiet; 422 ongeldig record; 429 snelheidslimiet; 503 niet beschikbaar. Regelfouten bevatten error en issues met field, rule en message; andere antwoorden hebben geen body. Limieten: 120 per minuut per eindpunt en 600 per organisatie, plus een afzenderlimiet. Aanleveringen worden geaudit, met steekproeven bij misbruik; beheer toont de laatste 20. Hieronder staan ondertekenvoorbeelden.

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

Limieten en kosten

Maximaal 256 KiB bron, 20 tabellen en 100 velden per tabel; een record is maximaal 16 KiB. Regels draaien begrensd in een sandbox zonder netwerk of vrije bestandstoegang. Eigenaren en beheerders kunnen Databases uitschakelen in de console zonder opgeslagen databases te verwijderen.

Vanaf de aangekondigde factuurstart kost opslag €5,15 per GB per maand voor tekst en data en €0,0803 voor bestanden, bijlagen en opnames (1 GB = 1.000.000.000 bytes). De datum wordt zeven dagen vooraf aangekondigd. Onbeheerde Agents en automatiseringen kosten €0,005 per minuut, per gestarte seconde; interactieve chats hebben geen looptijdkosten. AI-tokens worden apart gemeten.

De opslaglimiet is 100 GB of 5.000.000 objecten per factureringshoofdorganisatie, inclusief suborganisaties. Eigenaren en beheerders kunnen een maandelijkse opslagkostenlimiet instellen. Een leeg saldo pauzeert opslagtoevoegingen en onbeheerd werk, niet lezen, downloaden, exporteren of verwijderen. Bestaande data blijft staan. Schema-, deel- en beheerwijzigingen worden geaudit; recordgeschiedenis staat los van de operatoraudit.

Een opslaglimietweigering in een sessie geeft HTTP 413 met error.code storage_full; een te groot verzoek heeft die code niet. PUT /chat/settings behoudt database_webhooks_enabled bij weglaten of null. Stuur true of false om dit expliciet te wijzigen; nieuwe instellingen staan standaard uit.