AI & assistants Available
OpenAI-compatibel
For an agency that may not, or will not, send client data to a third party, this is how you still use the AI features: the model runs where you put it and schakl. talks to your endpoint and nothing else.
What you need
- An endpoint that speaks the OpenAI chat API and is reachable from the server schakl. runs on.
- That endpoint's base URL, including the version path, for example https://ai.example.com/v1.
- An API key your endpoint accepts.
- The name of the model you want to run. This provider has no built-in default, so you fill it in yourself.
- The ai.settings.manage permission to configure the provider. Admin-only by default.
How to connect it
- 1 Put your model behind an endpoint that speaks the OpenAI chat API: Azure OpenAI, Mistral, or your own Ollama or vLLM.
- 2 Open Instellingen → AI (Settings → AI) and set Provider to OpenAI-compatibel (eigen server).
- 3 Fill in Basis-URL, for example
https://ai.example.com/v1. The field is mandatory here: saving without it is a validation error on that field. - 4 Paste the key your endpoint accepts into API-sleutel. It is stored encrypted and never played back; on a later save, a blank field keeps the stored key.
- 5 Fill in Model with the name your server uses. Modellen ophalen (fetch models) reads the list from your own server, which speaks
GET /modelstoo. - 6 Under Functies (features), switch on what you want and press Verbinding testen (test connection). Your own server's error text comes back verbatim, which keeps the hunt for a wrong URL or model name short.
- 7 For dictation, set Spraakaanbieder (speech provider) under Spraak naar tekst to OpenAI-compatibel with its own base URL and key, or leave it on Uit to reuse the same endpoint.
When client data may not leave the building
Some clients allow no external processor, and some agencies would simply rather not have the conversation. With your own endpoint the choice stays yours: schakl. sends the request to the base URL you fill in, on the key you fill in, and nowhere else. The features in the app behave no differently.
- The request leaves from the schakl. server, not from the user's browser
- The key is stored encrypted per organisation and never played back
- Usage is recorded as counts and labels, never as the text of a prompt or completion
What you fill in yourself here
This provider ships no defaults, because we do not know what runs on your server. Base URL and Model are both yours, and model names stay free text so a new model needs no new release. Verbinding testen round-trips a small real completion through the stored settings and shows your server's error unfiltered — the quickest way to find a typo in the URL or the model name.
Speech to text, if your server can do it
Dictation on Uren works with this provider as soon as your endpoint implements the transcription endpoint. Under Spraak naar tekst you either pick your own server with its own base URL and key, or leave Spraakaanbieder on Uit and the same chat endpoint is reused. Audio has its own monthly budget in seconds, because an audio model reports no token usage.
Permissions
Grant these to the role that manages this integration (Settings → Roles). Admin-only by default, and never to the client role.
-
ai.settings.manageManage Instellingen → AI: provider, base URL, key, model, features, budgets, the test button and the usage meter. Admin-only by default. -
ai.useUse the AI features. Granted to admin and member by default, and declared on every AI route. -
time.entry.writeAdditionally required for dictation on Uren, because a transcript exists to become a time entry.
What it deliberately does not do
- There is no default model. You fill in the model name yourself, and a typo only surfaces as your own server's error.
- schakl. does not check what your endpoint can do. If your server implements no transcription, there simply is no dictation.
- The endpoint must be reachable from the schakl. server. A user's browser never talks to your model directly.
- The connection to the provider has fixed timeouts: 10 seconds to connect, 180 seconds to read. A local model that structurally exceeds that will not work.
- The response ceiling is fixed at 8192 tokens, and there is no reasoning-effort setting yet.
- The assistant stays read-only and the time assist returns a draft: even on your own model, nothing is ever created or changed on its own.
Where to find it Instellingen → AI (Settings → AI): set Provider to OpenAI-compatibel (eigen server), with the Basis-URL (base URL) field below it.
Read the guide