Zendesk Integration für Open Ticket AI: Self-Hosted AI Ticket-Klassifizierung
Verbinde Open Ticket AI mit Zendesk für automatisierte, lokale Ticket-Routing und -Klassifizierung. Erstelle benutzerdefinierte Plugins mit REST API-Integration für intelligente Support-Automatisierung.
Zendesk Integration für Open Ticket AI
Open Ticket AI (OTAI) läuft vollständig on-premise und klassifiziert Support-Tickets in Queues, Prioritäten und benutzerdefinierte Labels. Um OTAI mit Zendesk zu integrieren, erstellst du ein kleines Plugin, das einen ZendeskTicketsystemService bereitstellt. OTAI lädt diesen Service automatisch und nutzt ihn, um Zendesk-Tickets über die REST API zu lesen und zu aktualisieren.
Architektur
Eine Zendesk-Integration folgt dem gleichen OTAI-Muster:
- ein separates Plugin-Paket (
otai_zendesk) - ein
ZendeskTicketsystemService(Injectable) - ein
ZendeskPlugin, das den Service registriert - Konfiguration in
config.yml - OTAI ruft den Service am Ende der Pipeline auf und schreibt Vorhersagen zurück in Zendesk
Dies ist identisch zur Funktionsweise der Adapter für Zammad, OTOBO/Znuny, Freshdesk und andere OTAI-Adapter.
Plugin-Struktur (otai_zendesk)
otai_zendesk/
src/
otai_zendesk/
zendesk_ticket_system_service.py
plugin.py
pyproject.toml
zendesk_ticket_system_service.py
from typing import Any
import aiohttp
from open_ticket_ai import Injectable
from open_ticket_ai.core.ticket_system_services import TicketSystemService
class ZendeskTicketsystemService(TicketSystemService):
async def _request(self, method: str, path: str, **kwargs) -> Any:
base = f"https://{self.params.domain}.zendesk.com/api/v2"
auth = aiohttp.BasicAuth(self.params.email, self.params.api_token)
url = f"{base}{path}"
async with aiohttp.ClientSession(auth=auth) as session:
async with session.request(method, url, **kwargs) as resp:
return await resp.json()
async def find_tickets(self, query: dict) -> list[dict]:
return await self._request("GET", "/tickets", params=query)
async def find_first_ticket(self, query: dict) -> dict | None:
tickets = await self.find_tickets(query)
return tickets[0] if tickets else None
async def update_ticket(self, ticket_id: str, data: dict) -> dict:
return await self._request("PUT", f"/tickets/{ticket_id}", json={"ticket": data})
plugin.py
from open_ticket_ai import Plugin, Injectable
from otai_zendesk.zendesk_ticket_system_service import ZendeskTicketsystemService
class ZendeskPlugin(Plugin):
def _get_all_injectables(self) -> list[tone[Injectable]]:
return [
ZendeskTicketsystemService,
]
Zendesk Parameter
Verwende diese Felder in deiner OTAI-Konfiguration:
domain: deine Zendesk-Subdomain (z.B.mycompany)email: Zendesk-Login-E-Mailapi_token: API Token von Zendesk Admin → API → Token Accesstimeout: optionalverify: TLS-Verifizierung oder CA-Bundle-Pfad
Konfigurationsbeispiel
ticket_systems:
zendesk:
use: otai_zendesk:ZendeskTicketsystemService
params:
domain: yourcompany
email: support@yourcompany.com
api_token: "{{ get_env('ZENDESK_API_TOKEN') }}"
timeout: 10
verify: true
Die Zendesk-Authentifizierung nutzt Basic Auth:
email/token als Benutzername und das API-Token als Passwort.
OTAI entdeckt das Plugin über deine pyproject.toml:
[project.entry-points."otai.plugins"]
otai_zendesk = "otai_zendesk.plugin:ZendeskPlugin"
So funktioniert die Integration
- OTAI holt Zendesk-Tickets über REST
- KI weist Queue / Priorität / benutzerdefinierte Labels zu
- OTAI ruft
update_ticket(...)auf - Zendesk aktualisiert das Ticket
- Agents arbeiten weiter in Zendesk mit KI-unterstütztem Routing
Alles läuft on-premise, ohne Zendesks eigene KI-Module.
Vorteile
- vollständige Datenkontrolle (OTAI bleibt lokal)
- keine Notwendigkeit für Zendesks proprietäre KI
- einfache REST-Integration
- identische Plugin-Struktur wie bei Zammad, OTOBO/Znuny, Freshdesk, OTRS
