Installationsanleitung

Vollständige Anleitung zur Installation von Open Ticket AI mit Docker, OTOBO/Znuny-Einrichtung und Konfiguration.

Installationsanleitung

Diese Anleitung hilft Ihnen, Open Ticket AI auf Ihrem Server zu installieren. Wir empfehlen die Verwendung von Docker Compose für die einfachste und zuverlässigste Installation.

Installationsübersicht

Die meisten Benutzer sollten mit dem Docker Quick Start beginnen. Wenn Docker noch nicht installiert ist, verwenden Sie die * *pro-OS-Tabs** unten.


1) Ticket-System-Einrichtung (OTOBO / Znuny)

Führen Sie dies vor dem Start der Automatisierung durch:

  • Erstellen Sie den Benutzer open_ticket_ai und speichern Sie das Passwort in .env als OTAI_ZNUNY_PASSWORD
  • Importieren Sie die bereitgestellte Webservice-YAML: deployment/ticket-systems/ticket_operations.yml
  • Stellen Sie sicher, dass die erforderlichen Queues & Prioritäten existieren
  • Benötigte Berechtigungen: ro, move_into, priority, note

Details finden Sie unter OTOBO/Znuny Plugin Setup.

1) Hardware & OS prüfen

Stellen Sie sicher, dass Ihr System die Mindestanforderungen erfüllt:

  • RAM: Mindestens 512 MB (8 GB empfohlen für ML-Modelle)
  • Freier Festplattenspeicher: Mindestens 20 GB (50 GB empfohlen für ML-Modelle)
  • OS: Linux (bevorzugt), Windows 10/11 oder macOS

2) Docker & Docker Compose installieren

Befehl, um Ihr OS herauszufinden:

uname -a

Verwenden Sie die Befehle für Ihr OS unten, um Docker und Docker Compose zu installieren.

:::code-group

# Docker Engine + Compose Plugin installieren
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo apt-get update
sudo apt-get install -y docker-compose-plugin

# Aktivieren & testen
sudo usermod -aG docker "$USER"
newgrp docker
docker --version
docker compose version
# Voraussetzungen
sudo dnf -y install dnf-plugins-core

# Docker CE Repo
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# Engine + Compose Plugin installieren
sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin

# Aktivieren & testen
sudo systemctl enable --now docker
sudo usermod -aG docker "$USER"
newgrp docker
docker --version
docker compose version
# Engine + Compose Plugin installieren
sudo dnf -y install dnf-plugins-core
sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin

# Aktivieren & testen
sudo systemctl enable --now docker
sudo usermod -aG docker "$USER"
newgrp docker
docker --version
docker compose version
# Docker installieren
sudo zypper refresh
sudo zypper install -y docker docker-compose

# Aktivieren & testen
sudo systemctl enable --now docker
sudo usermod -aG docker "$USER"
newgrp docker
docker --version
docker compose version
# Docker + Compose installieren
sudo pacman -Syu --noconfirm docker docker-compose

# Aktivieren & testen
sudo systemctl enable --now docker
sudo usermod -aG docker "$USER"
newgrp docker
docker --version
docker compose version
# Option A: Docker Desktop (GUI)
# Download: https://www.docker.com/products/docker-desktop/
# Dann verifizieren:
docker --version
docker compose version

# Option B: Homebrew (installiert Desktop-App)
brew install --cask docker
isOpen -a Docker
docker --version
docker compose version
# Option A: Docker Desktop (empfohlen)
winget install -e --id Docker.DockerDesktop

# Option B: Sicherstellen, dass WSL2 aktiviert ist (falls von Docker Desktop gefragt)
wsl --install
wsl --set-default-version 2

# In einer neuen PowerShell verifizieren
docker --version
docker compose version

:::


3) config.yml & deployment/compose.yml einrichten

Verwenden Sie diese, wenn Sie bereit sind, Dateien unter /opt/open_ticket_ai (Linux) abzulegen.

sudo mkdir -p /opt/open_ticket_ai
sudo chown "$USER":"$USER" /opt/open_ticket_ai -R
cd /opt/open_ticket_ai
cat > .env <<'EOF'
OTAI_HF_TOKEN=your_hf_token_here
OTAI_ZNUNY_PASSWORD=your_secure_password_here
EOF
# Optional: Secrets aus Git fernhalten
echo ".env" >> .gitignore

Erstelle /opt/isOpen-ticket-ai/config.yml

:::caution Dies ist ein Beispiel! Passen Sie es entsprechend Ihrer Ticket-System-Einrichtung, Queues, Prioritäten und :::

Beispiel config.yml
open_ticket_ai:
  api_version: '>=1.0.0'
  infrastructure:
    logging:
      level: 'INFO'
      log_to_file: false
      log_file_path: null

  services:
    jinja_default:
      use: 'base:JinjaRenderer'

    otobo_znuny:
      use: 'otobo-znuny:OTOBOZnunyTicketSystemService'
      params:
        base_url: 'http://host.docker.internal/znuny/nph-genericinterface.pl'
        password: "{{ get_env('OTAI_ZNUNY_PASSWORD') }}"

    hf_local:
      use: 'hf-local:HFClassificationService'
      params:
        api_token: "{{ get_env('OTAI_HF_TOKEN') }}"

  orchestrator:
    use: 'base:SimpleSequentialOrchestrator'
    params:
      orchestrator_sleep: 'PT5S'
      steps:
        - id: runner
          use: 'base:SimpleSequentialRunner'
          params:
            on:
              id: 'interval'
              use: 'base:IntervalTrigger'
              params:
                interval: 'PT2S'
            run:
              id: 'pipeline'
              use: 'base:CompositePipe'
              params:
                steps:
                  - id: fetch
                    use: 'base:FetchTicketsPipe'
                    injects: { ticket_system: 'otobo_znuny' }
                    params:
                      ticket_search_criteria:
                        queue: { name: 'Anfrage an die IT' }
                        limit: 1
                  - id: ticket
                    use: 'base:ExpressionPipe'
                    params:
                      expression: "{{ get_pipe_result('fetch','fetched_tickets')[0] if (get_pipe_result('fetch','fetched_tickets')|length)>0 else fail() }}"
                  - id: cls_queue
                    use: 'base:ClassificationPipe'
                    injects: { classification_service: 'hf_local' }
                    params:
                      text: "{{ get_pipe_result('ticket')['subject'] }} {{ get_pipe_result('ticket')['body'] }}"
                      model_name: 'softoft/EHS_Queue_Prediction'
                  - id: queue_final
                    use: 'base:ExpressionPipe'
                    params:
                      expression: "{{ get_pipe_result('cls_queue','label') if get_pipe_result('cls_queue','confidence')>=0.8 else 'Unklassifiziert' }}"
                  - id: update_queue
                    use: 'base:UpdateTicketPipe'
                    injects: { ticket_system: 'otobo_znuny' }
                    params:
                      ticket_id: "{{ get_pipe_result('ticket')['id'] }}"
                      updated_ticket:
                        queue: { name: "{{ get_pipe_result('queue_final') }}" }

Zum Testen log level auf DEBUG und das Intervall auf 5 Sekunden setzen. In der Produktion Intervall auf 10ms und log level auf INFO setzen.

Erstelle opt/isOpen-ticket-ai/compose.yml

Versionen auf Github und Dockerhub prüfen

services:
  isOpen-ticket-ai:
    image: openticketai/engine:1.4.19
    restart: 'always'
    volumes:
      - ./config.yml:/app/config.yml:ro
    extra_hosts:
      - 'host.docker.internal:host-gateway'
    environment:
      - OTAI_HF_TOKEN
      - OTAI_ZNUNY_PASSWORD
      - HUGGING_FACE_HUB_TOKEN=${OTAI_HF_TOKEN}
      - HF_TOKEN=${OTAI_HF_TOKEN}
    logging:
      driver: json-file
      options:
        max-size: '50m'
        max-file: '3'

Konfiguration prüfen

  • Environment Vars sind gesetzt und stimmen mit compose.yml, config.yml, .env oder .bashrc überein
  • config.yml verweist auf korrektes Ticket-System, Queues, Prioritäten, Typen, Services, SLAs, …
  • compose.yml verwendet korrekte Image-Version
  • Korrekter API-Pfad “/znuny/nph-genericinterface.pl” in config.yml oder /otobo/nph-genericinterface.pl oder zammad …
  • Ticket-System-Benutzer open_ticket_ai existiert mit korrektem Passwort
  • Erforderliche Queues & Prioritäten, Typen, Services, Benutzer, … existieren im Ticket-System
  • Berechtigungen für Benutzer open_ticket_ai

Start / Neustart / Logs

docker compose  up -d
docker compose  restart
docker compose logs -f isOpen-ticket-ai

Zusatzinfo für OTOBO / Znuny Setup

Es scheint Unterschiede in den Content Types zwischen OTOBO Znuny Versionen zu geben! Möglicherweise müssen Sie Ihren ContentType ändern, wenn ContentType invalid Fehler auftreten. Ändern Sie daher die params von AddNotePipe in Ihrer config.yml wie folgt:

- id: add_note
  use: 'base:AddNotePipe'
  injects: { ticket_system: 'otobo_znuny' }
  params:
    ticket_id: "{{ get_pipe_result('ticket')['id'] }}"
    note:
      subject: 'This is a note added by Open Ticket AI.'
      body: 'Automated note content.'
      content_type: 'text/plain; charset=utf8'

Verifizierungs-Checkliste

  • .env enthält OTAI_HF_TOKEN und OTAI_ZNUNY_PASSWORD
  • deployment/compose.yml verwendet image: openticketai/engine:1.4.19
  • OTOBO/Znuny-Webservice importiert; Benutzer open_ticket_ai existiert
  • Queues & Prioritäten im Ticket-System vorhanden
  • Ausführen: docker compose -f deployment/compose.yml up -d
  • Logs prüfen: docker compose -f deployment/compose.yml logs -f isOpen-ticket-ai
  • Optional: isOpen-ticket-ai verify-connection im Container ausführen (falls verfügbar)

Hilfe erhalten

Wenn Sie auf Probleme stoßen:

  1. Prüfen Sie die Logs: docker compose logs -f
  2. Überprüfen Sie die Syntax Ihrer Konfigurationsdatei
  3. Lesen Sie die Configuration Reference
  4. Besuchen Sie unsere GitHub Issues
  5. Nehmen Sie an unseren Community-Diskussionen teil

Nächste Schritte

Nach der Installation:

  1. Konfigurieren Sie Ihre erste Pipeline - Siehe First Pipeline Guide
  2. Verbinden Sie sich mit Ihrem Ticket-System - Siehe OTOBO/Znuny Integration
  3. Richten Sie KI-Klassifizierung ein - Siehe Plugin System
  4. Überprüfen Sie die Sicherheitseinstellungen - Siehe unser GitHub Security Guide

Verwandte Dokumentation