Gå til innhold

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)