Core Services
Core services documentation for Open Ticket AI covering ticket system adapters, business logic encapsulation, and dependency injection.
Core Services
Services kapseln Geschäftslogik und stellen wiederverwendbare Funktionalität für Pipes bereit. Sie werden vom Dependency-Injection-Container verwaltet.
Service-Klassen vs. Konfigurationseinträge
Service-Klassen sind Python-Implementierungen, die in Paketen leben (z. B. Unterklassen von otai_base.ticket_system_integration.TicketSystemService). Sie werden innerhalb von Open Ticket AI nutzbar, wenn Sie sie über das Plugin-Registry verfügbar machen.
Service-Konfigurationseinträge leben in open_ticket_ai.services innerhalb Ihrer YAML-Konfiguration. Jeder Eintrag bindet eine Service-Klasse an einen Bezeichner, optionale Konstruktorparameter und einen Dependency-Injection-Scope. Mehrere Einträge können auf dieselbe Klasse verweisen, während sie unterschiedliche Parameter bereitstellen.
Beispiel: Mehrere Services gleichzeitig konfiguriert
open_ticket_ai:
services:
jinja_default:
use: 'base:JinjaRenderer'
otobo_znuny:
use: 'otobo-znuny:OTOBOZnunyTicketSystemService'
params:
base_url: 'http://example/otobo/nph-genericinterface.pl'
password: '${OTOBO_PASSWORD}'
hf_local:
use: 'hf-local:HFClassificationService'
params:
model_name: 'softoft/otai-queue-de-bert-v1'
In dieser Konfiguration werden drei unabhängige Services für die Injection verfügbar. Pipes wählen die Instanz aus, die sie benötigen, indem sie auf den Eintragsbezeichner verweisen, zum Beispiel:
- id: fetch_otobo
use: 'base:FetchTicketsPipe'
injects:
ticket_system: 'otobo_znuny'
Core Service-Typen
Ticket-Services
- TicketSystemAdapter: Schnittstelle zu Ticket-Systemen
- TicketFetcher: Ruft Tickets ab
- TicketUpdater: Aktualisiert Ticket-Eigenschaften
Klassifizierungs-Services
- ClassificationService: ML-basierte Klassifizierung
- QueueClassifier: Warteschlangen-Zuordnungslogik
- PriorityClassifier: Prioritäts-Zuordnungslogik
Utility-Services
- TemplateRenderer: Jinja2-Template-Rendering (kann in
defsfür Anpassungen konfiguriert werden) - ConfigurationService: Zugriff auf die Konfiguration
- LoggerFactory: Zentrale Protokollierung mit austauschbaren Backends (stdlib/structlog)
Service-Lebenszyklus und Scopes
Wenn die Anwendung die Konfiguration lädt, konvertiert sie jeden open_ticket_ai.services-Eintrag in eine InjectableConfig und registriert sie beim DI-Container. Jeder Eintrag ergibt eine eigene injizierbare Instanz. Wenn Sie drei Ticket-System-Services konfigurieren, können alle drei gleichzeitig unter ihren Bezeichnern injiziert werden.
Scopes steuern, wann diese Instanzen erstellt und wiederverwendet werden. Open Ticket AI unterstützt:
- Singleton-Scope (Standard) – Der Container erstellt eine Instanz pro Konfigurationseintrag und verwendet sie in der gesamten Anwendung wieder.
- Transient-Scope – Eine neue Instanz wird jedes Mal erstellt, wenn der Service injiziert wird.
Wählen Sie den Scope, der dem Zustandsbehaftungsgrad des Services entspricht. Siehe den Dependency Injection-Leitfaden für Details zu Scopes und die Configuration Reference für die services-Struktur.
Eigene Services erstellen
- Service-Schnittstelle definieren
- Service implementieren
- Mit dem DI-Container über das Injector-Modul registrieren
- Einen Konfigurationseintrag hinzufügen und in Pipes injizieren
Service-Best Practices
Empfohlen:
- Services auf eine einzige Verantwortung fokussieren
- Schnittstellen für Service-Verträge verwenden
- Services nach Möglichkeit zustandslos gestalten
- Abhängigkeiten injizieren, nicht selbst erstellen
- Unit-Tests für Services schreiben
Nicht empfohlen:
- Ausführungszustand in Service-Instanzen speichern
- Direkt auf die Konfiguration zugreifen (ConfigurationService injizieren)
- Zirkuläre Abhängigkeiten erzeugen
- Geschäftslogik mit Infrastrukturanliegen vermischen
Services testen
Services sollten unabhängig von den Pipes, die sie verwenden, unit-getestet werden. Erstellen Sie Testinstanzen von Services und überprüfen Sie ihr Verhalten mit Testdaten.
