[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M79BWPDZSN2ZP26VMBH9CMEA":3,"skill-same:01M79BWPDZSN2ZP26VMBH9CMEA":51},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":27,"commitSha":28,"skillDirectory":29,"forksCount":30,"repositoryHtmlUrl":31,"repositoryHomepageUrl":32,"ownerHtmlUrl":33,"ownerBlogUrl":34,"ownerDescription":35,"updatedAt":36,"install":37,"resources":50},"01M79BWPDZSN2ZP26VMBH9CMEA","omnichannel-helpdesk-ticket-routing",null,"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.","hamzabellouch\u002Fagent-skills","hamzabellouch","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F237856042?v=4","01M79BRYW7XAMK3YDWQEMTWGWS","Hamza Bellouch","01M79BRYWXQV3JK2TGVTX8GN2A",8,"MIT","https:\u002F\u002Fgithub.com\u002Fhamzabellouch\u002Fagent-skills\u002Fblob\u002Fmain\u002FBusiness\u002FCustomer_Operations_and_Support\u002Fomnichannel-helpdesk-ticket-routing\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: omnichannel-helpdesk-ticket-routing\nmetadata:\n  category: Customer Support and Service Automation\ndescription: 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.\ncompatibility: REST Webhooks, Zendesk v2 API, Freshdesk v2 API\n---\n\n# Omnichannel Helpdesk & Ticket Routing Skill Guide\n\nThis skill provides architectural patterns, state machine designs, and automated routing logic for high-volume customer support operations.\n\n---\n\n## 1. Ticket Lifecycle & Routing State Machine\n\n```text\n[ Incoming Ingestion ] (Email \u002F Chat \u002F WhatsApp \u002F Webhook)\n             |\n             v\n[ Normalization & Deduplication Layer ]\n             |\n             v\n[ Ticket Classifier & SLA Policy Attacher ]\n  |-- Calculate Response SLA (e.g., P1 = 15m, P2 = 1h, P3 = 4h)\n  |-- Tag Tier: VIP \u002F Standard\n             |\n             v\n[ Skill-Based Routing Engine ]\n  |-- Match Agent Language, Product Domain, and Shift Status\n  |-- Distribute via Round-Robin or Least-Loaded Capacity\n             |\n             v\n[ Assigned to Agent \u002F Auto-Resolved via AI Assistant ]\n```\n\n---\n\n## 2. Production Code Implementations\n\n### A. Skill-Based Round-Robin Routing Engine (Python)\n\n```python\nfrom dataclasses import dataclass, field\nfrom datetime import datetime, timezone\nfrom enum import Enum\nimport heapq\n\n\nclass Priority(Enum):\n    URGENT = 1\n    HIGH = 2\n    NORMAL = 3\n    LOW = 4\n\n\n@dataclass\nclass Agent:\n    id: str\n    name: str\n    skills: set[str]\n    active_ticket_count: int = 0\n    max_capacity: int = 5\n    is_online: bool = True\n\n    def is_eligible(self, required_skills: set[str]) -> bool:\n        return self.is_online and (self.active_ticket_count \u003C self.max_capacity) and required_skills.issubset(self.skills)\n\n\n@dataclass\nclass Ticket:\n    id: str\n    priority: Priority\n    required_skills: set[str]\n    customer_id: str\n    created_at: datetime = field(default_factory=lambda: datetime.now(timezone.utc))\n    assigned_agent_id: str | None = None\n\n\nclass TicketRouter:\n    def __init__(self, agents: list[Agent]):\n        self.agents = agents\n\n    def route_ticket(self, ticket: Ticket) -> Agent | None:\n        \"\"\"Finds eligible agent with minimum active ticket count (Least-Loaded).\"\"\"\n        eligible_agents = [\n            agent for agent in self.agents\n            if agent.is_eligible(ticket.required_skills)\n        ]\n\n        if not eligible_agents:\n            return None  # Enqueue to backlog \u002F fallback queue\n\n        # Sort by active tickets ascending\n        selected_agent = min(eligible_agents, key=lambda a: a.active_ticket_count)\n        selected_agent.active_ticket_count += 1\n        ticket.assigned_agent_id = selected_agent.id\n        return selected_agent\n```\n\n### B. SLA Breach Warning & Webhook Monitor (TypeScript \u002F Node.js)\n\n```typescript\nexport interface SLAPolicy {\n  p1MaxResponseMinutes: number; \u002F\u002F e.g. 15\n  p2MaxResponseMinutes: number; \u002F\u002F e.g. 60\n  p3MaxResponseMinutes: number; \u002F\u002F e.g. 240\n}\n\nexport function evaluateSLABreach(\n  ticketPriority: \"P1\" | \"P2\" | \"P3\",\n  createdAtIso: string,\n  firstResponseAtIso: string | null,\n  policy: SLAPolicy\n): { isBreached: boolean; minutesRemaining: number } {\n  const created = new Date(createdAtIso).getTime();\n  const now = Date.now();\n  const elapsedMinutes = (now - created) \u002F (1000 * 60);\n\n  const limitMinutes =\n    ticketPriority === \"P1\"\n      ? policy.p1MaxResponseMinutes\n      : ticketPriority === \"P2\"\n      ? policy.p2MaxResponseMinutes\n      : policy.p3MaxResponseMinutes;\n\n  if (firstResponseAtIso) {\n    const respondedTime = (new Date(firstResponseAtIso).getTime() - created) \u002F (1000 * 60);\n    return { isBreached: respondedTime > limitMinutes, minutesRemaining: 0 };\n  }\n\n  const minutesRemaining = limitMinutes - elapsedMinutes;\n  return {\n    isBreached: minutesRemaining \u003C= 0,\n    minutesRemaining: Math.round(minutesRemaining),\n  };\n}\n```\n\n---\n\n## 3. Best Practices Checklist\n\n- [ ] **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.\n- [ ] **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.\n- [ ] **SLA Pause Conditions:** Automatically pause SLA countdown clocks when ticket status moves to \"Pending Customer Information\".\n","# Omnichannel Helpdesk & Ticket Routing Skill Guide\n\nThis skill provides architectural patterns, state machine designs, and automated routing logic for high-volume customer support operations.\n\n---\n\n## 1. Ticket Lifecycle & Routing State Machine\n\n```text\n[ Incoming Ingestion ] (Email \u002F Chat \u002F WhatsApp \u002F Webhook)\n             |\n             v\n[ Normalization & Deduplication Layer ]\n             |\n             v\n[ Ticket Classifier & SLA Policy Attacher ]\n  |-- Calculate Response SLA (e.g., P1 = 15m, P2 = 1h, P3 = 4h)\n  |-- Tag Tier: VIP \u002F Standard\n             |\n             v\n[ Skill-Based Routing Engine ]\n  |-- Match Agent Language, Product Domain, and Shift Status\n  |-- Distribute via Round-Robin or Least-Loaded Capacity\n             |\n             v\n[ Assigned to Agent \u002F Auto-Resolved via AI Assistant ]\n```\n\n---\n\n## 2. Production Code Implementations\n\n### A. Skill-Based Round-Robin Routing Engine (Python)\n\n```python\nfrom dataclasses import dataclass, field\nfrom datetime import datetime, timezone\nfrom enum import Enum\nimport heapq\n\n\nclass Priority(Enum):\n    URGENT = 1\n    HIGH = 2\n    NORMAL = 3\n    LOW = 4\n\n\n@dataclass\nclass Agent:\n    id: str\n    name: str\n    skills: set[str]\n    active_ticket_count: int = 0\n    max_capacity: int = 5\n    is_online: bool = True\n\n    def is_eligible(self, required_skills: set[str]) -> bool:\n        return self.is_online and (self.active_ticket_count \u003C self.max_capacity) and required_skills.issubset(self.skills)\n\n\n@dataclass\nclass Ticket:\n    id: str\n    priority: Priority\n    required_skills: set[str]\n    customer_id: str\n    created_at: datetime = field(default_factory=lambda: datetime.now(timezone.utc))\n    assigned_agent_id: str | None = None\n\n\nclass TicketRouter:\n    def __init__(self, agents: list[Agent]):\n        self.agents = agents\n\n    def route_ticket(self, ticket: Ticket) -> Agent | None:\n        \"\"\"Finds eligible agent with minimum active ticket count (Least-Loaded).\"\"\"\n        eligible_agents = [\n            agent for agent in self.agents\n            if agent.is_eligible(ticket.required_skills)\n        ]\n\n        if not eligible_agents:\n            return None  # Enqueue to backlog \u002F fallback queue\n\n        # Sort by active tickets ascending\n        selected_agent = min(eligible_agents, key=lambda a: a.active_ticket_count)\n        selected_agent.active_ticket_count += 1\n        ticket.assigned_agent_id = selected_agent.id\n        return selected_agent\n```\n\n### B. SLA Breach Warning & Webhook Monitor (TypeScript \u002F Node.js)\n\n```typescript\nexport interface SLAPolicy {\n  p1MaxResponseMinutes: number; \u002F\u002F e.g. 15\n  p2MaxResponseMinutes: number; \u002F\u002F e.g. 60\n  p3MaxResponseMinutes: number; \u002F\u002F e.g. 240\n}\n\nexport function evaluateSLABreach(\n  ticketPriority: \"P1\" | \"P2\" | \"P3\",\n  createdAtIso: string,\n  firstResponseAtIso: string | null,\n  policy: SLAPolicy\n): { isBreached: boolean; minutesRemaining: number } {\n  const created = new Date(createdAtIso).getTime();\n  const now = Date.now();\n  const elapsedMinutes = (now - created) \u002F (1000 * 60);\n\n  const limitMinutes =\n    ticketPriority === \"P1\"\n      ? policy.p1MaxResponseMinutes\n      : ticketPriority === \"P2\"\n      ? policy.p2MaxResponseMinutes\n      : policy.p3MaxResponseMinutes;\n\n  if (firstResponseAtIso) {\n    const respondedTime = (new Date(firstResponseAtIso).getTime() - created) \u002F (1000 * 60);\n    return { isBreached: respondedTime > limitMinutes, minutesRemaining: 0 };\n  }\n\n  const minutesRemaining = limitMinutes - elapsedMinutes;\n  return {\n    isBreached: minutesRemaining \u003C= 0,\n    minutesRemaining: Math.round(minutesRemaining),\n  };\n}\n```\n\n---\n\n## 3. Best Practices Checklist\n\n- [ ] **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.\n- [ ] **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.\n- [ ] **SLA Pause Conditions:** Automatically pause SLA countdown clocks when ticket status moves to \"Pending Customer Information\".\n",{"name":5,"metadata":24,"description":7,"compatibility":26},{"category":25},"Customer Support and Service Automation","REST Webhooks, Zendesk v2 API, Freshdesk v2 API","main","e905af21e5f1e1c3ca605e9656c3a7930360a84e","Business\u002FCustomer_Operations_and_Support\u002Fomnichannel-helpdesk-ticket-routing",1,"https:\u002F\u002Fgithub.com\u002Fhamzabellouch\u002Fagent-skills","https:\u002F\u002Fhamzabellouch.github.io\u002F","https:\u002F\u002Fgithub.com\u002Fhamzabellouch","hamzabellouch.github.io","CEO & Founder of @tknoglobal | Researcher in Technology & Applied Sciences.","2026-10-17 03:20:19",{"source":8,"skillName":5,"commands":38,"prompt":48,"zipAvailable":49},[39,42,45],{"tool":40,"command":41},"npx","npx skills add hamzabellouch\u002Fagent-skills --skill omnichannel-helpdesk-ticket-routing",{"tool":43,"command":44},"bunx","bunx skills add hamzabellouch\u002Fagent-skills --skill omnichannel-helpdesk-ticket-routing",{"tool":46,"command":47},"pnpm","pnpm dlx skills add hamzabellouch\u002Fagent-skills --skill omnichannel-helpdesk-ticket-routing","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fhamzabellouch\u002Fagent-skills\u002Fblob\u002Fmain\u002FBusiness\u002FCustomer_Operations_and_Support\u002Fomnichannel-helpdesk-ticket-routing\u002FSKILL.md",true,[],[52,59,66,73,80,87],{"skillNo":53,"name":54,"nameZh":6,"description":55,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":56,"categories":57,"keywords":58,"publishedAt":19},"01M79FHH2H815A9TAP6WNKH4Q8","security-audit","Comprehensive security guidance, source code audit, vulnerability assessment, and penetration test review for codebases, APIs, microservices, CLI tools, libraries, and LLM-backed applications. Triggers on requests to audit a codebase, conduct security reviews, find vulnerabilities or flaws, pen-test source code, or when the user asks in Arabic (فحص أمني، تدقيق الكود أمنياً، مراجعة الثغرات، فحص أمان المشروع). Supports Guidance mode (focused review) and Full Audit mode (deterministic 6-phase harness).","https:\u002F\u002Fgithub.com\u002Fhamzabellouch\u002Fagent-skills\u002Fblob\u002Fmain\u002FSecurity\u002FSecurity_Audit_and_Code_Review\u002Fsecurity-audit\u002FSKILL.md",[],[],{"skillNo":60,"name":61,"nameZh":6,"description":62,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":65,"publishedAt":19},"01M79FHBGXVBY6VQ1X7ETAZMF1","malware-analysis-reversing","Production malware analysis workflows, reverse engineering methodologies, isolated sandbox triage, static\u002Fdynamic binary analysis, memory forensics, and YARA detection rule authoring.","https:\u002F\u002Fgithub.com\u002Fhamzabellouch\u002Fagent-skills\u002Fblob\u002Fmain\u002FSecurity\u002FOffensive_Security_and_Pentesting\u002Fmalware-analysis-reversing\u002FSKILL.md",[],[],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":19},"01M79FH6EACDR801TZCE4R8SAC","application-security-pentesting","Production Application Security (AppSec) standards, OWASP Top 10 vulnerability remediation, SAST\u002FDAST pipeline integration, secure code review, threat modeling, and defensive security posture.","https:\u002F\u002Fgithub.com\u002Fhamzabellouch\u002Fagent-skills\u002Fblob\u002Fmain\u002FSecurity\u002FOffensive_Security_and_Pentesting\u002Fapplication-security-pentesting\u002FSKILL.md",[],[],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":19},"01M79FH0VKVT44FK923K520ZQA","oauth2-oidc-security-flows","Implement enterprise OAuth 2.1 and OpenID Connect (OIDC) authorization code flow with Proof Key for Code Exchange (PKCE), state and nonce verification, refresh token rotation, token revocation, and centralized IdP federation (Keycloak, Auth0, Okta). Trigger when building secure authentication, single sign-on (SSO), or third-party delegated authorization.","https:\u002F\u002Fgithub.com\u002Fhamzabellouch\u002Fagent-skills\u002Fblob\u002Fmain\u002FSecurity\u002FIdentity_and_Access_Management_IAM\u002Foauth2-oidc-security-flows\u002FSKILL.md",[],[],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":19},"01M79FGVVB3R4T88XXD8FRSV5B","jwt-session-management-hardening","Harden JWT-based authentication and session lifecycles using asymmetric signing (RS256\u002FEdDSA), JWKS rotation, strict claims validation, Redis-backed sliding window sessions, revocation lists, and secure HttpOnly cookie storage. Trigger when implementing token validation, session revocation, or hardening API authentication.","https:\u002F\u002Fgithub.com\u002Fhamzabellouch\u002Fagent-skills\u002Fblob\u002Fmain\u002FSecurity\u002FIdentity_and_Access_Management_IAM\u002Fjwt-session-management-hardening\u002FSKILL.md",[],[],{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":19},"01M79FGNCPZ85CVEY0B3NE4H3B","soc2-compliance-automation","Best practices for implementing SOC 2 Type II compliance controls, continuous evidence collection, infrastructure policy-as-code, and automated security monitoring. Use when automating Trust Services Criteria (Security, Availability, Confidentiality, Processing Integrity, Privacy), audit logging, IAM least privilege, or CI\u002FCD security gates.","https:\u002F\u002Fgithub.com\u002Fhamzabellouch\u002Fagent-skills\u002Fblob\u002Fmain\u002FSecurity\u002FGovernance_Compliance_and_Legal_Tech\u002Fsoc2-compliance-automation\u002FSKILL.md",[],[]]