Przejdź do treści
Biblioteka skilli
Sprzedaż i obsługa klienta · Budowanie i kod

omnichannel-helpdesk-ticket-routing

/omnichannel-helpdesk-ticket-routing

Projektuje automatyczne silniki routingu zgłoszeń i cyklu SLA w kanałach e-mail, czat, SMS i webhooki, z integracją Zendesk, Freshdesk i Jira Service Management oraz routingiem według umiejętności.

Repozytorium
agent-skills ↗
Licencja
MIT
Ostatnia zmiana repozytorium
16.10.2026

Ocena i bezpieczeństwo

100/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść35 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
1
Skrypty
0
Komentarze HTML
0
Adresy URL w SKILL.md
0
Przestarzałość

Brak sygnałów. Repozytorium zmienione 16.10.2026, bez odwołań do wycofanych modeli i API.

Licencja

MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.

Co robi i kiedy

Projektuje automatyczne silniki routingu zgłoszeń i cyklu SLA w kanałach e-mail, czat, SMS i webhooki, z integracją Zendesk, Freshdesk i Jira Service Management oraz routingiem według umiejętności.

Oryginalny opis (EN)

Architect automated omnichannel helpdesk routing and SLA lifecycle engines across email, chat, SMS, and webhooks. Integrate with ticketing systems (Zendesk, Freshdesk, Jira Service Management), enforce strict SLA tier policies (response time, resolution time), implement skill-based agent routing, and manage ticket state machines. Trigger when building customer service backends, routing algorithms, or support automation systems.

Jak działa

  1. 1. Ticket Lifecycle & Routing State Machine
  2. 2. Production Code Implementations
  3. 3. Best Practices Checklist
Sekcje z nagłówków SKILL.md, w oryginale · 140 linii, 502 słów
Podgląd SKILL.md
---
name: omnichannel-helpdesk-ticket-routing
metadata:
  category: Customer Support and Service Automation
description: Architect automated omnichannel helpdesk routing and SLA lifecycle engines across email, chat, SMS, and webhooks. Integrate with ticketing systems (Zendesk, Freshdesk, Jira Service Management), enforce strict SLA tier policies (response time, resolution time), implement skill-based agent routing, and manage ticket state machines. Trigger when building customer service backends, routing algorithms, or support automation systems.
compatibility: REST Webhooks, Zendesk v2 API, Freshdesk v2 API
---

# Omnichannel Helpdesk & Ticket Routing Skill Guide

This skill provides architectural patterns, state machine designs, and automated routing logic for high-volume customer support operations.

---

## 1. Ticket Lifecycle & Routing State Machine

```text
[ Incoming Ingestion ] (Email / Chat / WhatsApp / Webhook)
             |
             v
[ Normalization & Deduplication Layer ]
             |
             v
[ Ticket Classifier & SLA Policy Attacher ]
  |-- Calculate Response SLA (e.g., P1 = 15m, P2 = 1h, P3 = 4h)
  |-- Tag Tier: VIP / Standard
             |
             v
[ Skill-Based Routing Engine ]
  |-- Match Agent Language, Product Domain, and Shift Status
  |-- Distribute via Round-Robin or Least-Loaded Capacity
             |
             v
[ Assigned to Agent / Auto-Resolved via AI Assistant ]
```

---

## 2. Production Code Implementations

### A. Skill-Based Round-Robin Routing Engine (Python)

```python
from dataclasses import dataclass, field
from datetime import datetime, timezone
from enum import Enum
import heapq


class Priority(Enum):
    URGENT = 1
    HIGH = 2
    NORMAL = 3
    LOW = 4


@dataclass
class Agent:
    id: str
    name: str
    skills: set[str]
    active_ticket_count: int = 0
    max_capacity: int = 5
    is_online: bool = True

    def is_eligible(self, required_skills: set[str]) -> bool:
        return self.is_online and (self.active_ticket_count < self.max_capacity) and required_skills.issubset(self.skills)


@dataclass
class Ticket:
    id: str
    priority: Priority
    required_skills: set[str]
    customer_id: str
    created_at: datetime = field(default_factory=lambda: datetime.now(timezone.utc))
    assigned_agent_id: str | None = None


class TicketRouter:
    def __init__(self, agents: list[Agent]):
        self.agents = agents

    def route_ticket(self, ticket: Ticket) -> Agent | None:
        """Finds eligible agent with minimum active ticket count (Least-Loaded)."""
        eligible_agents = [
            agent for agent in self.agents
            if agent.is_eligible(ticket.required_skills)
        ]

        if not eligible_agents:
            return None  # Enqueue to backlog / fallback queue

        # Sort by active tickets ascending
        selected_agent = min(eligible_agents, key=lambda a: a.active_ticket_count)
        selected_agent.active_ticket_count += 1
        ticket.assigned_agent_id = selected_agent.id
        return selected_agent
```

### B. SLA Breach Warning & Webhook Monitor (TypeScript / Node.js)

```typescript
export interface SLAPolicy {
  p1MaxResponseMinutes: number; // e.g. 15
  p2MaxResponseMinutes: number; // e.g. 60
  p3MaxResponseMinutes: number; // e.g. 240
}

export function evaluateSLABreach(
  ticketPriority: "P1" | "P2" | "P3",
  createdAtIso: string,
  firstResponseAtIso: string | null,
  policy: SLAPolicy
): { isBreached: boolean; minutesRemaining: number } {
  const created = new Date(createdAtIso).getTime();
  const now = Date.now();
  const elapsedMinutes = (now - created) / (1000 * 60);

  const limitMinutes =
    ticketPriority === "P1"
      ? policy.p1MaxResponseMinutes
      : ticketPriority === "P2"
      ? policy.p2MaxResponseMinutes
      : policy.p3MaxResponseMinutes;

  if (firstResponseAtIso) {
    const respondedTime = (new Date(firstResponseAtIso).getTime() - created) / (1000 * 60);
    return { isBreached: respondedTime > limitMinutes, minutesRemaining: 0 };
  }

  const minutesRemaining = limitMinutes - elapsedMinutes;
  return {
    isBreached: minutesRemaining <= 0,
    minutesRemaining: Math.round(minutesRemaining),
  };
}
```

---

## 3. Best Practices Checklist

- [ ] **Deduplication:** Generate a deterministic message hash of (customer_id, normalized_subject, last_message_body) within a 5-minute sliding window to prevent duplicate tickets from webhook flurries.
- [ ] **Graceful Degraded Routing:** If no agent matching required skills is available, escalate to a generic Senior Tier 1 triage group rather than stalling in limbo.
- [ ] **SLA Pause Conditions:** Automatically pause SLA countdown clocks when ticket status moves to "Pending Customer Information".

Wersje

W bazie nie ma innych skilli o nazwie omnichannel-helpdesk-ticket-routing.

Migawka bazy z 28.10.2026 · wersja paczki eb94507acdcb (skrót SHA-256 całej paczki)

Pobrania w ostatnich 30 dniach: 0 · ranking

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 95freshdesk-api
    Wspiera integracje z API helpdesku Freshdesk: wyciąganie danych wsparcia, zarządzanie zgłoszeniami, kontaktami i firmami oraz automatyzację procesów obsługi klienta.
  • 90d365-customer-service-contact-center
    Przegląda Dynamics 365 Customer Service i Contact Center w cyklu od zgłoszenia do rozwiązania: zarządzanie sprawami, routing, Omnichannel, kolejki, SLA i baza wiedzy, w statycznym przeglądzie.
  • 100sla-management
    Projektuje i prowadzi SLA wsparcia klienta: macierz priorytetów zgłoszeń, cele czasu pierwszej odpowiedzi i rozwiązania, ścieżki eskalacji, godziny pracy i dashboardy zgodności.
  • 100customer-support-expert
    Buduje systemy obsługi klienta: ticketing, bazę wiedzy, śledzenie SLA, ścieżki eskalacji i analitykę satysfakcji (CSAT, NPS).
  • 90brace-triage
    Projektuje system triażu zgłoszeń: reguły routingu, tagi priorytetów, strukturę kolejek i automatyczną pierwszą odpowiedź, by skrócić czas do pierwszej reakcji.
  • 95customer-support-analysis
    Odpowiada na pytania o obsługę klienta w Zendesk na danych Fivetran w BigQuery, Snowflake lub Databricks: czasy odpowiedzi, SLA i CSAT.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.