Technik:Appsettings.json und CoPlanner Agent Konfiguration
appsettings.json Konfiguration
Bei Verwendung von https wird in dieser Datei angegeben, woher das Zertifikat bezogen werden soll.
Das Zertifikat kann entweder als Datei abgespeichert oder aus dem Zertifikatsspeicher bezogen werden. Bei Pfadangaben müssen immer zwei \ und nicht nur einer verwendet werden (z.B. D:\\MyCertFolder\\MyCert.pfx).
Erlaubte Hostnamen
Mit "AllowedHosts" werden die Hostnamen eingeschränkt, unter denen der Server erreichbar ist. Mehrere Hostnamen können durch Strichpunkte getrennt angegeben werden.
{
"AllowedHosts": "servername.coplanner.com;localhost"
}Beispiel appsettings.json
{
"Agent": {
"ModelId": "gpt-5.6-luna",
"ReasoningEffort": "low",
"Api": "responses",
"Endpoint": "https://api.openai.com/v1",
"RequestTimeoutSeconds": 300,
"AllowPlanningData": true,
"AllowDimensionSearch": true,
"ApiKey": "sk-...",
},
"WebConfig": {
"JwtBearerIssuer": "YOURCERTIFIKATIONAUTHORITY",
"JwtBearerIssuerKey": "YOURKEY",
"ForwardedSecret": "YOUURSECRET"
},
"Kestrel": {
"Certificates": {
"Default": {
"Subject": "YOURSUBJECT", //// Issued to (Ausgestellt für) field
"Store": "MY", //// possible values "MY", "Root", "Trust", "CA" -> https://learn.microsoft.com/en-us/windows/win32/seccrypto/system-store-locations
"Location": "YOURLOCATION", //// possible values "CurrentUser", "LocalMachine" -> https://learn.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel/endpoints?view=aspnetcore-7.0
"AllowInvalid": "false"
}
//"Default": {
// "Path": "<path to .pfx file>",
// "Password": "<certificate password>"
//}
// or
//"Default": {
// "Path": "<path to .pem/.crt file>",
// "KeyPath": "<path to .key file>",
// "Password": "<certificate password>"
//}
// or
//"Default": {
// "Thumbprint": "<thumbprint; required>",
// "Store": "<certificate store; required>", //// possible values "MY", "Root", "Trust", "CA" -> https://learn.microsoft.com/en-us/windows/win32/seccrypto/system-store-locations
// "Location": "<location; defaults to CurrentUser>", //// possible values "CurrentUser", "LocalMachine" -> https://learn.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel/endpoints?view=aspnetcore-7.0
// "AllowInvalid": "<true or false; defaults to false>"
//}
}
}
}CoPlanner Agent einrichten (LLM Anbindung)
Der CoPlanner Agent ist ab CoPlanner 11 Release 3 2026 verfügbar
Die Anbindung läuft über die OpenAI-Plattform.
Voraussetzungen
- CoPlanner-Lizenz mit NeoFeatures-Flag – ohne das Flag wird der Agent im Client nicht angeboten.
- OpenAI-API-Key (siehe nächster Abschnitt).
- Der CoPlanner-Server braucht ausgehenden HTTPS-Zugriff auf api.openai.com. (bzw. die unter `Endpoint` eingestellte Adresse).
OpenAI-Konto und API-Key
Ein API-Key ist ein persönlicher Zugangsschlüssel (beginnt mit sk-...), mit dem der CoPlanner-Server Anfragen an OpenAI stellt – vergleichbar mit einem Passwort für den Programmzugriff. Ein ChatGPT-Abo ist dafür nicht nötig, die API wird separat und rein nach Verbrauch abgerechnet.
So kommt man zum Key:
- Auf platform.openai.com ein Konto anlegen (E-Mail oder bestehendes Microsoft-/Google-Konto).
- Unter Billing eine Zahlungsmethode hinterlegen und ein Startguthaben aufladen (z. B. 10 USD – Prepaid, es entsteht kein Abo).
- Unter API Keys mit Create new secret key einen Key erzeugen. Der Key wird nur einmal angezeigt – direkt kopieren und sicher ablegen.
Zu den Kosten: Abgerechnet wird nur die tatsächliche Nutzung (nach verarbeiteter Textmenge). Eine typische Agent-Anfrage mit dem Standardmodell kostet Bruchteile eines Cents – normale Nutzung bleibt damit im Bereich weniger Euro pro Monat. Unter Limits lässt sich zusätzlich ein Monatsbudget festlegen, mehr als das kann nie anfallen.
Den Key wie ein Passwort behandeln: nicht weitergeben, gut aufbewahren und nur in der Server-Konfiguration eintragen.
Server-Konfiguration (On-Premises)
In der appsettings.json im Server-Verzeichnis (neben der Server-Exe) den Abschnitt Agent ergänzen. Nötig ist nur der Key, alles andere hat einen getesteten Default
"Agent": {
"ModelId": "gpt-5.6-luna",
"ReasoningEffort": "low",
"Api": "responses",
"Endpoint": "https://api.openai.com/v1",
"RequestTimeoutSeconds": 300,
"AllowPlanningData": true,
"AllowDimensionSearch": true,
"ApiKey": "sk-...",
}| Einstellung | Default | Bedeutung |
|---|---|---|
ApiKey |
leer | Pflicht. OpenAI-Key. Ohne Key (oder leer) meldet der CopServer dem Client enableAiAgent=false, der Agent-Eintrag erscheint dann gar nicht.
|
ModelId |
gpt-5.6-luna |
Modell, siehe Abschnitt Modelle |
ReasoningEffort |
low |
Denkaufwand des Modells. Leer = nicht senden (nötig für Modelle ohne Reasoning). |
Api |
responses |
OpenAI-Schnittstelle: responses oder chat-completions
|
Endpoint |
https://api.openai.com/v1 |
Adresse der OpenAI-API, siehe Abschnitt Modelle und Adresse |
RequestTimeoutSeconds |
300 |
Wartezeit je Modellaufruf in Sekunden |
AllowPlanningData |
true |
false: keine Inhalte der Maske (Zellwerte) an OpenAI. Der Agent steuert weiter die Ansicht, beantwortet aber keine Fragen zu Werten.
|
AllowDimensionSearch |
true |
false: keine Elementlisten und Vorschläge aus Dimensionen an OpenAI. Genau oder mit einem Teil des Namens genannte Elemente findet der Agent weiter, Tippfehler und Abkürzungen nicht mehr.
|
- Nach Änderungen CopServer neu starten – die Datei wird nur beim Start gelesen.
- Statt in der Datei kann der Key auch als Umgebungsvariable
Agent__ApiKeygesetzt werden. Das greift aber nur, wenn dieappsettings.jsongar keinen EintragApiKeyenthält - auch ein leerer Eintrag hat Vorrang vor der Umgebungsvariable.
Modelle
Konfigurierbar ist jedes OpenAI-Modell, das Tool-Calling unterstützt – Modellnamen laut OpenAI-Dokumentation.
| ModelId | Einordnung |
|---|---|
gpt-5.6-luna |
Default - mit ReasoningEffort low getestet, schnell und günstig
|
gpt-5.6-terra |
mit ReasoningEffort medium rund zehnmal so teuer (3,4 statt 0,35 Cent je Anfrage) und im Vergleichstest nicht klar besser - stärker beim Lesen von Werten
|
gpt-5.4-mini |
ohne Reasoning - ReasoningEffort auf "" setzen
|
Wer `ModelId` ändert, muss prüfen, ob das Modell Reasoning kann: Modelle ohne Reasoning brauchen `"ReasoningEffort": ""`.