Rohe Zendesk-Ticketdaten sind für KI Modelle nur schwer verdaulich. Tickets enthalten häufig HTML, Signaturen, zitierte E-Mail-Threads, inkonsistente Felder und nicht vertrauenswürdige Benutzereingaben.
In den folgenden Fällen können Zendesk-Ticketdaten mit KI Modellen verwendet werden:
- KI-basierte Triagierung und Verteilung
- Agentenspezifische Zusammenfassungen
- Stimmung und Absichtserkennung
- QA Scoring Systeme
- Konversationssuche
- Zur Verwendung mit schemabasierten GPT-Assistenten
In diesem Workflow wird beschrieben, wie Sie Zendesk-Ticketdaten normalisieren (bereinigen, standardisieren und strukturieren), damit Sie sie zuverlässig in KI Modellen verwenden können.
Der Workflow umfasst die folgenden Schritte:
- Schritt 1: Ticketdaten extrahieren
- Schritt 2: HTML bereinigen
- Schritt 3: Signaturen und Haftungsausschlüsse entfernen
- Schritt 4: Vertrauliche Informationen maskieren
- Schritt 5: Ticketfelder normalisieren
- Schritt 6: Primärtext für KI Eingaben auswählen
- Schritt 7: Prompt sichere Formatierung anwenden
- Schritt 8: Daten abschneiden und validieren
Schritt 1: Ticketdaten extrahieren
Ticketdaten aus der Zendesk Support API abrufen.
Erstellen Sie eine .env-Datei.
Erstellen Sie im Projektverzeichnis eine Datei namens .env und fügen Sie Ihre Zendesk-Kontodetails hinzu:
ZENDESK_SUBDOMAIN=yoursubdomain ZENDESK_EMAIL=you@company.com ZENDESK_API_TOKEN=your_api_token
Funktion zum Abrufen von Tickets hinzufügen (app.js)
Der folgende Code erstellt die Zendesk-API-Basis-URL aus Ihrer Subdomäne, erstellt einen HTTP Basic Authorization-Header mit Ihrem API-Token und definiert eine fetchTicket(), die ein Ticket (einschließlich Kommentarereignissen) abruft:
const ZENDESK_BASE_URL = `https://${process.env.ZENDESK_SUBDOMAIN}.zendesk.com/api/v2`;
const authHeader = Buffer.from(
`${process.env.ZENDESK_EMAIL}/token:${process.env.ZENDESK_API_TOKEN}`
).toString("base64");
async function fetchTicket(ticketId) {
const response = await fetch(
`${ZENDESK_BASE_URL}/tickets/${ticketId}.json?include=comment_events`,
{
method: "GET",
headers: {
"Authorization": `Basic ${authHeader}`,
"Content-Type": "application/json"
}
}
);
if (!response.ok) {
throw new Error(`Zendesk API error: ${response.status}`);
}
return response.json();
}
Extrahieren Sie als Nächstes Daten aus der Antwort. Sie benötigen mindestens:
- Metadata des Tickets (ID, Betreff, Priorität, Gruppe usw.)
- Ticketbeschreibung
- Öffentliche und interne Kommentare
- Stichwörter
- Angepasste Felder
Kommentare sollten html_body und/oder Nur-Text-Fallback (body, plain_body) enthalten.
Schritt 2: HTML bereinigen
Zendesk-Ticketdaten enthalten häufig HTML-Markup wie <p>, <br> und Links. Die meisten LLM-Workflows funktionieren am besten mit reinem Text. In diesem Schritt konvertieren Sie HTML in lesbaren Text, indem Sie Stichwörter entfernen und die Formatierung normalisieren.
function htmlToText(html) {
if (!html) return "";
const parser = new DOMParser();
const doc = parser.parseFromString(html, "text/html");
// Remove scripts and styles
doc.querySelectorAll("script, style").forEach(el => el.remove());
// Convert <br> to newlines
doc.querySelectorAll("br").forEach(br => br.replaceWith("\n"));
return normalizeWhitespace(doc.body.textContent || "");
}
function normalizeWhitespace(text) {
return text
.replace(/\r\n/g, "\n")
.replace(/\n{3,}/g, "\n\n")
.trim();
}
Schritt 3: Signaturen und Haftungsausschlüsse entfernen
Wenn Sie E-Mail-Ticketdaten verarbeiten, sehen Sie häufig Signaturen und Haftungsausschlüsse, die eine größere Anzahl von Tickets hinzufügen. Wenn Sie sie nicht brauchen, entfernen Sie sie.
function stripSignatures(text) {
const lines = text.split("\n");
const signatureMarkers = [
/^--$/,
/^sent from my/i,
/^best regards/i,
/^thanks[,!]?$/
];
for (let i = 0; i < lines.length; i++) {
if (signatureMarkers.some(re => re.test(lines[i].trim()))) {
return normalizeWhitespace(lines.slice(0, i).join("\n"));
}
}
return normalizeWhitespace(text);
}
Schritt 4: Vertrauliche Informationen maskieren
Manche Tickets enthalten vertrauliche Informationen. Entfernen oder maskieren Sie sensible Daten, bevor Sie Daten an ein KI Modell senden.
function maskPII(text) {
return text
// Email addresses
.replace(
/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi,
"[REDACTED_EMAIL]"
)
// Phone numbers
.replace(
/\b(\+?\d{1,3}[\s-]?)?\(?\d{3}\)?[\s-]?\d{3}[\s-]?\d{4}\b/g,
"[REDACTED_PHONE]"
)
// Token-like strings
.replace(/\b[a-f0-9]{32,}\b/gi, "[REDACTED_TOKEN]");
}
Schritt 5: Ticketfelder normalisieren
Wenn Sie angepasste Ticketfelder verwenden, definieren Sie sie. Dies gewährleistet die Lesbarkeit und verhindert, dass bei jeder Verarbeitung von Ticketdaten für Ihr KI Modell zusätzliche API-Anfragen gestellt werden.
const TICKET_SCHEMA = {
customTicketField1: null,
customTicketField2: null,
customTicketField3: null,
customTicketField4: []
};
Ordnen Sie die IDs angepasster Ticketfelder dem Schema zu.
const CUSTOM_FIELD_MAP = {
111: "customerTier",
222: "platformsAffected"
};
function normalizeFields(ticket) {
const fields = { ...TICKET_SCHEMA };
for (const field of ticket.custom_fields || []) {
const key = CUSTOM_FIELD_MAP[field.id];
if (!key) continue;
fields[key] = normalizeValue(field.value);
}
return fields;
}
function normalizeValue(value) {
if (Array.isArray(value)) {
return value.map(v => v.toLowerCase()).sort();
}
if (typeof value === "string") {
const v = value.toLowerCase();
return v;
}
return value;
}
Schritt 6: Primärtext für KI Eingaben auswählen
Legen Sie fest, welche Teile des Tickets extrahiert werden sollen. In diesem Codebeispiel konzentrieren wir uns auf Ticketkommentare.
function getPrimaryText(ticket, comments) {
const newestPublic = [...comments]
.reverse()
.find(c => c.public !== false);
const raw = newestPublic?.html_body || "";
let text = htmlToText(raw);
text = stripQuotedReplies(text);
text = stripSignatures(text);
text = maskPII(text);
return text;
}
Schritt 7: Prompt sichere Formatierung anwenden
Verwenden Sie das sichere Format. Dadurch wird sichergestellt, dass Benutzerinhalte als Daten und nicht als Anweisungen behandelt werden.
function safePromptBlock(userText) {
return `
<<<BEGIN_USER_MESSAGE>>>
${userText}
<<<END_USER_MESSAGE>>>
`.trim();
}
Schritt 8: Daten abschneiden und validieren
Im letzten Schritt müssen Sie die normalisierten Daten abschneiden und validieren.
function truncate(text, maxChars = 8000) {
if (text.length <= maxChars) return text;
return text.slice(0, maxChars) + "\n...[TRUNCATED]";
}
Stellen Sie außerdem sicher, dass erforderliche Felder vorhanden sind, die Werte den Erwartungen entsprechen und Text vorhanden ist.
Nach Abschluss dieser Überprüfungen haben Sie KI-freundliche, normalisierte Ticketdaten, die für Ihre Anfragen bereit sind.
Hinweis zur Übersetzung: Dieser Beitrag wurde mit automatischer Übersetzungssoftware übersetzt, um dem Leser ein grundlegendes Verständnis des Inhalts zu vermitteln. Trotz angemessener Bemühungen, eine akkurate Übersetzung bereitzustellen, kann Zendesk keine Garantie für die Genauigkeit übernehmen.
Sollten in Bezug auf die Genauigkeit der Informationen im übersetzten Beitrag Fragen auftreten, beziehen Sie sich bitte auf die englische Version des Beitrags, die als offizielle Version gilt.