[{"data":1,"prerenderedAt":722},["ShallowReactive",2],{"docs-zammad-plugin-entwickeln-de":3},{"id":4,"title":5,"body":6,"category":712,"description":713,"draft":714,"extension":715,"meta":716,"navigation":388,"order":717,"path":718,"seo":719,"stem":720,"__hash__":721},"docs\u002Fdocs\u002Fzammad-plugin-entwickeln.md","Eigenes Zammad Plugin entwickeln",{"type":7,"value":8,"toc":698},"minimark",[9,13,38,41,46,141,147,151,158,206,217,224,228,234,283,298,311,315,328,333,340,413,416,420,523,538,542,549,569,572,576,588,599,608,612,635,639,651,655,694],[10,11,5],"h1",{"id":12},"eigenes-zammad-plugin-entwickeln",[14,15,16,17,21,22,26,27,30,31,34,35,37],"p",{},"Wer nach ",[18,19,20],"strong",{},"Zammad Plugins"," sucht, erwartet oft einen Marketplace wie bei OTOBO oder Znuny (",[23,24,25],"code",{},".opm","). Den gibt es bei Zammad ",[18,28,29],{},"nicht",". Ein „eigenes Plugin“ ist in der Praxis eine ",[18,32,33],{},"Integration",": Sie erweitern das Helpdesk über Admin-Funktionen, Webhooks, die REST-API oder eine externe App — ohne eine ",[23,36,25],{},"-Datei ins System zu laden.",[14,39,40],{},"Diese Anleitung hilft Ihnen, den richtigen Weg zu wählen und eine wartbare Erweiterung zu bauen.",[42,43,45],"h2",{"id":44},"die-vier-wege-entscheidungshilfe","Die vier Wege (Entscheidungshilfe)",[47,48,49,70],"table",{},[50,51,52],"thead",{},[53,54,55,60,63,67],"tr",{},[56,57,59],"th",{"align":58},"left","Weg",[56,61,62],{"align":58},"Wann sinnvoll",[56,64,66],{"align":65},"center","Update-Risiko",[56,68,69],{"align":58},"Typisches Ergebnis",[71,72,73,90,105,125],"tbody",{},[53,74,75,81,84,87],{},[76,77,78],"td",{"align":58},[18,79,80],{},"Native Integration",[76,82,83],{"align":58},"Slack, GitHub, GitLab, Teams, LDAP, CTI, Checkmk … bereits im Kern",[76,85,86],{"align":65},"niedrig",[76,88,89],{"align":58},"Konfiguration unter Admin → Integrationen",[53,91,92,97,100,102],{},[76,93,94],{"align":58},[18,95,96],{},"No-Code in Zammad",[76,98,99],{"align":58},"Automatisierung im Ticketfluss ohne fremdes System",[76,101,86],{"align":65},[76,103,104],{"align":58},"Trigger, Scheduler, Webhooks, Core Workflows, Objektmanager",[53,106,107,112,115,118],{},[76,108,109],{"align":58},[18,110,111],{},"Externe App \u002F API",[76,113,114],{"align":58},"Eigenes Portal, ERP, n8n, MCP, Monitoring, CMS",[76,116,117],{"align":65},"niedrig–mittel",[76,119,120,121,124],{"align":58},"Service, der ",[23,122,123],{},"\u002Fapi\u002Fv1"," spricht",[53,126,127,132,135,138],{},[76,128,129],{"align":58},[18,130,131],{},"Core-Patch \u002F Fork",[76,133,134],{"align":58},"UI- oder Kernverhalten, das API und Trigger nicht abdecken",[76,136,137],{"align":65},"hoch",[76,139,140],{"align":58},"Gemiedene Variante, nur mit eigenem Release-Prozess",[14,142,143,146],{},[18,144,145],{},"Faustregel:"," Erst nativ und No-Code prüfen. Dann eine schlanke API-App. Den Zammad-Kern nur forken, wenn Sie Updates, Tests und Merge-Konflikte wirklich tragen können.",[42,148,150],{"id":149},"weg-1-native-integrationen-nutzen","Weg 1: Native Integrationen nutzen",[14,152,153,154,157],{},"Viele Suchanfragen nach „Zammad Slack Plugin“ oder „Zammad GitHub Plugin“ sind bereits ",[18,155,156],{},"eingebaut",". Typische Module (Stand der offiziellen Admin-Dokumentation):",[159,160,161,182,188,194,200],"ul",{},[162,163,164,167,168,175,176,181],"li",{},[18,165,166],{},"Entwicklung:"," ",[169,170,174],"a",{"href":171,"rel":172},"https:\u002F\u002Fadmin-docs.zammad.org\u002Fen\u002Flatest\u002Fsystem\u002Fintegrations\u002Fgithub.html",[173],"nofollow","GitHub",", ",[169,177,180],{"href":178,"rel":179},"https:\u002F\u002Fadmin-docs.zammad.org\u002Fen\u002Flatest\u002Fsystem\u002Fintegrations\u002Fgitlab.html",[173],"GitLab"," — Issues im Ticket sichtbar machen (GitLab: keine Merge Requests)",[162,183,184,187],{},[18,185,186],{},"Kommunikation:"," Slack, Microsoft Teams, Telegram, SMS, Social",[162,189,190,193],{},[18,191,192],{},"Identität & Sync:"," LDAP\u002FActive Directory, Microsoft 365, Google, Exchange, Clearbit",[162,195,196,199],{},[18,197,198],{},"Telefonie:"," generisches CTI, Placetel, Sipgate",[162,201,202,205],{},[18,203,204],{},"Monitoring:"," Checkmk, Icinga, Nagios, Monit",[14,207,208,209,212,213,216],{},"Aktivierung unter ",[18,210,211],{},"Admin → Integrationen"," (Berechtigung ",[23,214,215],{},"admin.integration","). Zuerst auf einer Staging-Instanz testen, Tokens mit Minimalrechten ausstellen.",[14,218,219,220,223],{},"Verzeichnis aller Community- und API-Pakete: ",[169,221,20],{"href":222},"\u002Fzammad-plugins",".",[42,225,227],{"id":226},"weg-2-webhooks-trigger-und-objektmanager","Weg 2: Webhooks, Trigger und Objektmanager",[14,229,230,231,223],{},"Für ein „Plugin“, das bei Ticketänderungen ein anderes System benachrichtigt, brauchen Sie meist ",[18,232,233],{},"keinen Ruby-Code",[235,236,237,244,255],"ol",{},[162,238,239,240,243],{},"Unter ",[18,241,242],{},"Admin → Webhooks"," einen Endpoint anlegen (generisch oder Vorlage für Slack, Teams, Mattermost, Rocket.Chat, ntfy).",[162,245,246,247,250,251,254],{},"Einen ",[18,248,249],{},"Trigger"," oder ",[18,252,253],{},"Scheduler"," so konfigurieren, dass er diesen Webhook auslöst.",[162,256,257,258],{},"Am Empfänger die Header prüfen:\n",[159,259,260,266,272,278],{},[162,261,262,265],{},[23,263,264],{},"X-Zammad-Trigger"," — Name des Triggers",[162,267,268,271],{},[23,269,270],{},"X-Zammad-Delivery"," — eindeutige Delivery-ID (Idempotenz)",[162,273,274,277],{},[23,275,276],{},"X-Hub-Signature"," — HMAC-SHA1, wenn Sie ein Signature-Token gesetzt haben",[162,279,280],{},[23,281,282],{},"User-Agent: Zammad User Agent",[14,284,285,286,289,290,293,294,297],{},"Zusätzlich decken ",[18,287,288],{},"Core Workflows"," bedingte Felder und Sichtbarkeit ab. Der ",[18,291,292],{},"Objektmanager"," (UI oder API ",[23,295,296],{},"POST \u002Fapi\u002Fv1\u002Fobject",") legt Custom Fields an Ticket, User oder Organisation an — oft die Basis für fachliche „Plugin“-Daten, ohne Kerncode.",[14,299,300,301,175,306,223],{},"Offizielle Einstiege: ",[169,302,305],{"href":303,"rel":304},"https:\u002F\u002Fadmin-docs.zammad.org\u002Fen\u002Flatest\u002Fmanage\u002Fwebhook\u002Fadd.html",[173],"Webhooks hinzufügen",[169,307,310],{"href":308,"rel":309},"https:\u002F\u002Fadmin-docs.zammad.org\u002Fen\u002Flatest\u002Fmanage\u002Fwebhook\u002Fpayload.html",[173],"Webhook-Payload",[42,312,314],{"id":313},"weg-3-eigenes-plugin-als-rest-api-integration","Weg 3: Eigenes Plugin als REST-API-Integration",[14,316,317,318,321,322,327],{},"Das ist der Standardweg für ein ",[18,319,320],{},"eigenes Zammad Plugin",": ein Dienst (Python, Node, PHP, n8n, MCP), der die ",[169,323,326],{"href":324,"rel":325},"https:\u002F\u002Fdocs.zammad.org\u002Fen\u002Flatest\u002Fapi\u002Fintro.html",[173],"Zammad REST API"," nutzt.",[329,330,332],"h3",{"id":331},"authentifizierung","Authentifizierung",[14,334,335,336,339],{},"Zammad unterstützt drei Verfahren. ",[18,337,338],{},"Access Tokens"," sind der Default für Integrationen; Basic Auth nur im Notfall.",[341,342,347],"pre",{"className":343,"code":344,"language":345,"meta":346,"style":346},"language-bash shiki shiki-themes one-dark-pro","# HTTP Token (empfohlen)\ncurl -H \"Authorization: Token token=IHR_TOKEN\" \\\n  https:\u002F\u002Fhelpdesk.example.com\u002Fapi\u002Fv1\u002Fusers\u002Fme\n\n# OAuth2 Bearer\ncurl -H \"Authorization: Bearer IHR_TOKEN\" \\\n  https:\u002F\u002Fhelpdesk.example.com\u002Fapi\u002Fv1\u002Fusers\u002Fme\n","bash","",[23,348,349,358,377,383,390,396,408],{"__ignoreMap":346},[350,351,354],"span",{"class":352,"line":353},"line",1,[350,355,357],{"class":356},"sV9Aq","# HTTP Token (empfohlen)\n",[350,359,361,365,369,373],{"class":352,"line":360},2,[350,362,364],{"class":363},"sVbv2","curl",[350,366,368],{"class":367},"sVC51"," -H",[350,370,372],{"class":371},"subq3"," \"Authorization: Token token=IHR_TOKEN\"",[350,374,376],{"class":375},"sjrmR"," \\\n",[350,378,380],{"class":352,"line":379},3,[350,381,382],{"class":371},"  https:\u002F\u002Fhelpdesk.example.com\u002Fapi\u002Fv1\u002Fusers\u002Fme\n",[350,384,386],{"class":352,"line":385},4,[350,387,389],{"emptyLinePlaceholder":388},true,"\n",[350,391,393],{"class":352,"line":392},5,[350,394,395],{"class":356},"# OAuth2 Bearer\n",[350,397,399,401,403,406],{"class":352,"line":398},6,[350,400,364],{"class":363},[350,402,368],{"class":367},[350,404,405],{"class":371}," \"Authorization: Bearer IHR_TOKEN\"",[350,407,376],{"class":375},[350,409,411],{"class":352,"line":410},7,[350,412,382],{"class":371},[14,414,415],{},"Tokens legt der Benutzer unter den persönlichen Einstellungen an. Rechte so eng wie möglich (nur benötigte Ticket-\u002FUser-Scopes).",[329,417,419],{"id":418},"ticket-anlegen-beispiel","Ticket anlegen (Beispiel)",[341,421,423],{"className":343,"code":422,"language":345,"meta":346,"style":346},"curl -X POST https:\u002F\u002Fhelpdesk.example.com\u002Fapi\u002Fv1\u002Ftickets \\\n  -H \"Authorization: Token token=IHR_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"title\": \"Monitoring: CPU > 90%\",\n    \"group\": \"Users\",\n    \"customer\": \"monitoring@example.com\",\n    \"article\": {\n      \"subject\": \"Alert\",\n      \"body\": \"Host server-01 überschreitet den Schwellwert.\",\n      \"type\": \"note\",\n      \"internal\": true\n    }\n  }'\n",[23,424,425,440,449,458,466,471,476,481,487,493,499,505,511,517],{"__ignoreMap":346},[350,426,427,429,432,435,438],{"class":352,"line":353},[350,428,364],{"class":363},[350,430,431],{"class":367}," -X",[350,433,434],{"class":371}," POST",[350,436,437],{"class":371}," https:\u002F\u002Fhelpdesk.example.com\u002Fapi\u002Fv1\u002Ftickets",[350,439,376],{"class":375},[350,441,442,445,447],{"class":352,"line":360},[350,443,444],{"class":367},"  -H",[350,446,372],{"class":371},[350,448,376],{"class":375},[350,450,451,453,456],{"class":352,"line":379},[350,452,444],{"class":367},[350,454,455],{"class":371}," \"Content-Type: application\u002Fjson\"",[350,457,376],{"class":375},[350,459,460,463],{"class":352,"line":385},[350,461,462],{"class":367},"  -d",[350,464,465],{"class":371}," '{\n",[350,467,468],{"class":352,"line":392},[350,469,470],{"class":371},"    \"title\": \"Monitoring: CPU > 90%\",\n",[350,472,473],{"class":352,"line":398},[350,474,475],{"class":371},"    \"group\": \"Users\",\n",[350,477,478],{"class":352,"line":410},[350,479,480],{"class":371},"    \"customer\": \"monitoring@example.com\",\n",[350,482,484],{"class":352,"line":483},8,[350,485,486],{"class":371},"    \"article\": {\n",[350,488,490],{"class":352,"line":489},9,[350,491,492],{"class":371},"      \"subject\": \"Alert\",\n",[350,494,496],{"class":352,"line":495},10,[350,497,498],{"class":371},"      \"body\": \"Host server-01 überschreitet den Schwellwert.\",\n",[350,500,502],{"class":352,"line":501},11,[350,503,504],{"class":371},"      \"type\": \"note\",\n",[350,506,508],{"class":352,"line":507},12,[350,509,510],{"class":371},"      \"internal\": true\n",[350,512,514],{"class":352,"line":513},13,[350,515,516],{"class":371},"    }\n",[350,518,520],{"class":352,"line":519},14,[350,521,522],{"class":371},"  }'\n",[14,524,525,526,175,530,175,534,223],{},"Dasselbe Muster eignet sich für Portale, Shop-Checkout, Formulare oder Monitoring-Callbacks. Fertige Clients im Hub: ",[169,527,529],{"href":528},"\u002Fpackages\u002Fzammadpy","zammad_py",[169,531,533],{"href":532},"\u002Fpackages\u002Fzammad-api-client-php","zammad-api-client-php",[169,535,537],{"href":536},"\u002Fpackages\u002Flaravel-zammad","laravel-zammad",[329,539,541],{"id":540},"automation-layer-statt-kern-plugin","Automation-Layer statt Kern-Plugin",[14,543,544,545,548],{},"Wenn Sie Workflows orchestrieren wollen (ERP ↔ Zammad, Entra-ID-Sync, KI-Entwürfe), lagern Sie die Logik ",[18,546,547],{},"außerhalb"," von Zammad:",[159,550,551,562],{},[162,552,553,557,558],{},[169,554,556],{"href":555},"\u002Fpackages\u002Fdigital-bossn8n-nodes-zammad","n8n-nodes-zammad"," \u002F ",[169,559,561],{"href":560},"\u002Fpackages\u002Fn8n-nodes-zammad-extended","n8n-nodes-zammad-extended",[162,563,564,568],{},[169,565,567],{"href":566},"\u002Fpackages\u002Fzammad-mcp-server","zammad-mcp-server"," für Agenten in Claude, Cursor & Co.",[14,570,571],{},"Vorteil: Zammad-Upgrades bleiben unabhängig von Ihrer Plugin-Logik.",[42,573,575],{"id":574},"weg-4-änderungen-am-zammad-kern","Weg 4: Änderungen am Zammad-Kern",[14,577,578,579,583,584,587],{},"Zammad ist AGPL-3.0 (Ruby on Rails, modernes Vue-Frontend). Sie ",[580,581,582],"em",{},"können"," den Quellcode forken. Das ist ",[18,585,586],{},"kein"," Plugin-Marktplatz:",[159,589,590,593,596],{},[162,591,592],{},"Jedes Upgrade muss Ihre Patches neu mergen.",[162,594,595],{},"Frontend- und API-Verträge ändern sich zwischen Major-Versionen (z. B. Zammad 6 → 7).",[162,597,598],{},"Hosting-Anbieter (Zammad Cloud) lassen Kernel-Patches in der Regel nicht zu.",[14,600,601,602,607],{},"Wenn Sie beitragen wollen, folgen Sie der ",[169,603,606],{"href":604,"rel":605},"https:\u002F\u002Fdocs.zammad.org\u002Fen\u002Flatest\u002Fcontributing\u002Fstart.html",[173],"offiziellen Contributing-Doku"," — das ist Upstream-Entwicklung, kein privates Addon-Format.",[42,609,611],{"id":610},"checkliste-vor-dem-go-live","Checkliste vor dem Go-live",[159,613,614,617,620,626,629,632],{},[162,615,616],{},"Staging-Instanz mit produktionsnahem Datenmodell",[162,618,619],{},"Token mit Least Privilege, Rotation dokumentiert",[162,621,622,623,625],{},"Webhook-Signatur prüfen, Retries und ",[23,624,270],{}," behandeln",[162,627,628],{},"Personenbezogene Ticketinhalte: Auftragsverarbeitung, Speicherort, Logs",[162,630,631],{},"Verhalten nach Zammad-Minor-Updates testen (API-Felder, Integrationen)",[162,633,634],{},"README: benötigte Zammad-Version, Rechte, Beispiel-Payloads",[42,636,638],{"id":637},"im-open-itsm-hub-listen","Im Open ITSM Hub listen",[14,640,641,642,646,647,223],{},"Community-Integrationen sind oft nur als GitHub-Repo sichtbar. Tragen Sie Ihr Projekt ins ",[169,643,645],{"href":644},"\u002Fpackages","Paketverzeichnis"," ein, damit Admins „Zammad Plugins“ zentral finden. Analog für OTOBO\u002FZnuny: ",[169,648,650],{"href":649},"\u002Fdocs\u002Fpaket-veroeffentlichen","Paket veröffentlichen",[42,652,654],{"id":653},"weiterlesen","Weiterlesen",[159,656,657,663,669,675,681],{},[162,658,659],{},[169,660,662],{"href":661},"\u002Fblog\u002Fbeste-zammad-plugins-2026","Beste Zammad Plugins 2026",[162,664,665],{},[169,666,668],{"href":667},"\u002Fblog\u002Fzammad-plugin-selber-bauen","Zammad Plugin selber bauen (Überblick)",[162,670,671],{},[169,672,674],{"href":673},"\u002Fblog\u002Fzammad-mcp-server-vergleich","Zammad MCP Server im Vergleich",[162,676,677],{},[169,678,680],{"href":679},"\u002Fblog\u002Fpython-automation-ticketsysteme-rest-api","Python-Automation für Ticketsysteme",[162,682,683,684,688,689],{},"Offiziell: ",[169,685,687],{"href":324,"rel":686},[173],"API-Einführung"," · ",[169,690,693],{"href":691,"rel":692},"https:\u002F\u002Fadmin-docs.zammad.org\u002Fen\u002Flatest\u002Fsystem\u002Fintegrations\u002Findex.html",[173],"Integrationen",[695,696,697],"style",{},"html pre.shiki code .sV9Aq, html code.shiki .sV9Aq{--shiki-default:#7F848E;--shiki-default-font-style:italic}html pre.shiki code .sVbv2, html code.shiki .sVbv2{--shiki-default:#61AFEF}html pre.shiki code .sVC51, html code.shiki .sVC51{--shiki-default:#D19A66}html pre.shiki code .subq3, html code.shiki .subq3{--shiki-default:#98C379}html pre.shiki code .sjrmR, html code.shiki .sjrmR{--shiki-default:#56B6C2}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":346,"searchDepth":360,"depth":360,"links":699},[700,701,702,703,708,709,710,711],{"id":44,"depth":360,"text":45},{"id":149,"depth":360,"text":150},{"id":226,"depth":360,"text":227},{"id":313,"depth":360,"text":314,"children":704},[705,706,707],{"id":331,"depth":379,"text":332},{"id":418,"depth":379,"text":419},{"id":540,"depth":379,"text":541},{"id":574,"depth":360,"text":575},{"id":610,"depth":360,"text":611},{"id":637,"depth":360,"text":638},{"id":653,"depth":360,"text":654},"Zammad","Wie Sie ein Zammad Plugin oder eine eigene Integration bauen: native Integrationen, Webhooks, REST-API, n8n und die Grenzen des Zammad-Addon-Modells.",false,"md",{},70,"\u002Fdocs\u002Fzammad-plugin-entwickeln",{"title":5,"description":713},"docs\u002Fzammad-plugin-entwickeln","cvcsNR9oZ7Ad29DklGqUmZuI-kG2IeRZOzR_JyiPwz8",1793464490548]