Arkitektur¶
Systemdiagram¶
flowchart TD
DB[(SQL Server\nmasterbase)] -->|nattlig sync| SW[sync_worker.py]
SW -->|skriver| CACHE[cache/SKI_context.json\nper klubb]
CACHE -->|leses ved oppstart\nog per forespørsel| API[FastAPI app.py\n127.0.0.1:8000]
API -->|POST /api/chat| GEMINI[Google Gemini API\ngemini-2.5-flash]
GEMINI -->|AI-svar| API
BROWSER[Nettleser / Gjest] -->|HTTPS| IIS[IIS\nreverse proxy]
IIS -->|POST /api/chat| API
API -->|JSON-svar| IIS
IIS -->|HTTPS| BROWSER
CMS[ai_chatbot_loader.asp\nper tenant] -->|inkluderer| WIDGET[ai_chat_widget.asp]
WIDGET -->|JavaScript| BROWSER
CMS -->|leser| DB
Komponentbeskrivelser¶
API/python/app/app.py – FastAPI-backend¶
Kjerner i løsningen. Eksponerer to endepunkter:
| Endepunkt | Metode | Beskrivelse |
|---|---|---|
/api/chat |
POST | Mottar melding + historikk, returnerer AI-svar |
/health |
GET | Helsestatus for overvåking |
Forespørselsformat (POST /api/chat):
{
"tenant_id": "SKI",
"message": "Når åpner driving range?",
"history": [
{"role": "user", "content": "Hei"},
{"role": "assistant", "content": "Hei! Hva kan jeg hjelpe deg med?"}
]
}
Systemprompten bygges av build_system_prompt(tenant_id) som leser cache/{tenant_id}_context.json.
API/chatbot/sync_worker.py – Datasynkronisering¶
Kjøres som planlagt Windows-oppgave (nattlig). Leser Clubs-tabellen i masterdatabasen for alle klubber med boolChatbot = 1, spør 44 tillatte tabeller per klubb, og skriver resultatet til cache/{clubFolder}_context.json.
SKI/common-front/ai_chatbot_loader.asp – ASP-loader¶
Kjøres server-side for hver sidevisning. Leser AI_Chatbot_Settings-tabellen fra klubbens database og skriver CSS-variabler og JS-konstanter til siden (BOT_NAME, THEME_COLOR, WELCOME_MSG, BOT_LOGO_URL, TENANT_ID). Inkluderer ai_chat_widget.asp dynamisk dersom IsActive = 1.
SKI/assets/js/chatbot.js – Frontend-widget¶
Vanilla JavaScript. Sender POST /api/chat med tenant_id, message og samtalehistorikk. TENANT_ID injiseres fra ASP-loader via <%=ROOT_FOLDER%>.
Deploymentdiagram (IIS)¶
Internett
│
▼
IIS Site (port 443)
├── URL Rewrite: /api/chat → http://127.0.0.1:8000/api/chat
├── URL Rewrite: /health → http://127.0.0.1:8000/health
└── Classic ASP-sider (ClubsiteCMS)
└── ai_chatbot_loader.asp (inkludert i alle sider)
Mappestruktur (relevante filer)¶
API/
├── chatbot/
│ ├── .env.example ← Mal for miljøvariabler (ingen ekte verdier)
│ ├── requirements.txt ← Python-avhengigheter
│ ├── sync_worker.py ← Datasynkronisering
│ ├── cache/ ← Runtime JSON-cache (ikke i repo)
│ └── logs/ ← Runtime JSONL-logger (ikke i repo)
├── python/
│ └── app/
│ └── app.py ← FastAPI-hoveddel
├── INSTALL_CHATBOT_2.ps1 ← Installasjonsskript
└── START_CHATBOT_v2.ps1 ← Oppstartskript
SKI/
├── ai_chat_widget.asp ← Widget HTML
├── common-front/
│ └── ai_chatbot_loader.asp ← Server-side loader
├── assets/
│ └── js/
│ └── chatbot.js ← Klient-side JS
└── CSADMIN/
└── files_setup/
├── cChatbot.asp ← Admin-innstillinger UI
└── scr_chatbot.asp ← Lagre innstillinger (UPSERT)