Integration

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 #api-automation #plugin-architecture #self-hosted-ai #ticket-routing #rest-api-integration
Zendesk Integration für Open Ticket AI: Self-Hosted AI Ticket-Klassifizierung

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-Mail
  • api_token: API Token von Zendesk Admin → API → Token Access
  • timeout: optional
  • verify: 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

  1. OTAI holt Zendesk-Tickets über REST
  2. KI weist Queue / Priorität / benutzerdefinierte Labels zu
  3. OTAI ruft update_ticket(...) auf
  4. Zendesk aktualisiert das Ticket
  5. 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