Bewerbungen als echte Tickets bei Ticketanizer anlegen (statt Discord-Webhook)

Umgestellt von der ursprünglichen Discord-Webhook-Idee auf die offizielle
Ticketanizer-Inbound-Ticket-API (api.ticketanizer.com/v1/tickets) - erzeugt
echte Tickets statt nur Nachrichten, landen dadurch direkt im richtigen
Ticketanizer-Bereich in Discord.

- Neu: cloudflare-worker/src/lib/ticketanizer.js. panel_id pro Bewerbungs-
  bereich fest hinterlegt (aus dem Ticketanizer-Dashboard abgelesen):
  Modi=4, Kooperation=5, Scout=6, Creator=7 (dort "Manager-Bewerbung")
- Alte discord.js entfernt (Ansatz verworfen)
- applications.js: Aufruf entsprechend umbenannt/angepasst
- README.md: Einrichtungsanleitung aktualisiert (TICKETANIZER_API_KEY
  statt 4x DISCORD_WEBHOOK_*)
- Ticketanizer bleibt rein informativ, kein Ausfallpunkt - Bewerbung wird
  immer in der eigenen Datenbank gespeichert, unabhängig vom Ticket-Erfolg
- Secret TICKETANIZER_API_KEY bereits live gesetzt und deployed; End-to-
  End mit 3 Test-Bewerbungen geprüft (HTTP Ok geloggt), Testeinträge aus
  der DB wieder entfernt
This commit is contained in:
2026-08-01 12:56:15 +02:00
parent 992e3de446
commit 7b7fcd829b
4 changed files with 140 additions and 138 deletions
+40 -36
View File
@@ -84,61 +84,65 @@ npx wrangler secret put POSTFACH_CODE
# z.B. erzeugen mit: node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
npx wrangler secret put ENCRYPTION_KEY
# 7. (Optional) Bewerbungen zusätzlich automatisch in Discord posten —
# siehe Abschnitt "Bewerbungen auf Discord (Ticketanizer)" unten.
# Ohne diesen Schritt läuft alles wie gehabt, es fehlt nur die
# Discord-Benachrichtigung.
# 7. (Optional) Bewerbungen zusätzlich automatisch als Ticket bei
# Ticketanizer anlegen (dort in Discord sichtbar) — siehe Abschnitt
# "Bewerbungen als Ticketanizer-Tickets" unten. Ohne diesen Schritt
# läuft alles wie gehabt, es fehlt nur das automatische Ticket.
# 8. Deployen
npx wrangler deploy
```
## Bewerbungen auf Discord (Ticketanizer)
## Bewerbungen als Ticketanizer-Tickets
Jede eingehende Bewerbung wird zusätzlich zur Speicherung in der Datenbank als
schön formatierte Nachricht (Embed) in den passenden Discord-Kanal gepostet —
pro Bewerbungsbereich ein eigener Kanal/Webhook, exakt wie auf der Website
getrennt (Modi, Scout, Creator, Kooperation).
Jede eingehende Bewerbung wird zusätzlich zur Speicherung in der eigenen
Datenbank als **echtes Ticket** bei Ticketanizer angelegt — im passenden
Bereich (Modi/Scout/Creator/Kooperation), exakt wie auf der Website getrennt.
Das läuft über die offizielle Ticketanizer-Inbound-Ticket-API
(`POST https://api.ticketanizer.com/v1/tickets`), kein Discord-Bot-Code nötig.
**Das läuft komplett über normale Discord-Webhooks — kein Bot, kein
zusätzlicher Code auf Discord-Seite nötig.** Falls Ticketanizer selbst in
seinen Board-/Kanal-Einstellungen bereits eine eigene Ziel-Webhook-URL
anzeigt, kann diese genauso eingetragen werden wie eine normale
Discord-Webhook-URL — beide funktionieren identisch (Discord-Webhook-Format).
### Einrichtung (einmalig, ca. 2 Minuten)
### Einrichtung (pro Kanal ca. 1 Minute)
1. Im Discord-Kanal (z.B. dem Modi-Bewerbungskanal): Kanal bearbeiten →
**Integrationen****Webhooks****Neuer Webhook**.
2. Der Webhook kann beliebig heißen (z.B. "Homepage-Bewerbungen"). **Webhook-URL
kopieren.**
3. Als Secret im Worker hinterlegen (einmal pro Bewerbungsbereich, nur die
URLs eintragen, die schon vorhanden sind — fehlende werden einfach
übersprungen, es gibt dafür keine Fehlermeldung):
1. Im Ticketanizer-Dashboard: **API & Webhooks → API-Keys → Key erstellen**
(Name z.B. "DOGFATHER UNIVERSE Homepage"). Den Key **sofort kopieren**
wird meist nur einmal im Klartext angezeigt.
2. Als Secret im Worker hinterlegen:
```bash
npx wrangler secret put DISCORD_WEBHOOK_MODI
npx wrangler secret put DISCORD_WEBHOOK_SCOUT
npx wrangler secret put DISCORD_WEBHOOK_CREATOR
npx wrangler secret put DISCORD_WEBHOOK_KOOPERATION
npx wrangler secret put TICKETANIZER_API_KEY
```
Jeweils die kopierte Webhook-URL einfügen, wenn danach gefragt wird.
3. Danach einmal `npx wrangler deploy`.
4. Danach einmal `npx wrangler deploy`, damit der Worker die neuen Secrets
kennt (Secrets selbst brauchen keinen Deploy, aber schadet nicht).
Die Zuordnung Bewerbungsbereich → Ticketanizer-Panel ist fest in
`src/lib/ticketanizer.js` (`PANEL_IDS`) hinterlegt, abgelesen aus dem
Ticketanizer-Dashboard unter **Panels**:
| Bewerbung auf der Website | Ticketanizer-Panel | panel_id |
|---|---|---|
| Modi | Modi-Bewerbung | 4 |
| Kooperation | Kooperationsbewerbung | 5 |
| Scout | Scout-Bewerbung | 6 |
| Creator | Manager-Bewerbung | 7 |
Ändert sich ein Panel (neu angelegt, andere ID), einfach die Zahlen in
`PANEL_IDS` in `src/lib/ticketanizer.js` anpassen und neu deployen.
### Wichtig
- **Discord ist rein informativ, kein Ausfallpunkt.** Fehlt eine Webhook-URL
oder ist Discord kurz nicht erreichbar, wird die Bewerbung trotzdem ganz
normal in der Datenbank gespeichert — nur die Zusatz-Nachricht in Discord
- **Ticketanizer ist rein informativ, kein Ausfallpunkt.** Fehlt der API-Key
oder ist Ticketanizer kurz nicht erreichbar, wird die Bewerbung trotzdem
ganz normal in der eigenen Datenbank gespeichert — nur das Zusatz-Ticket
entfällt dann.
- Secrets stehen **nie** im Code oder in `wrangler.toml` (die ist eingecheckt),
- Der Key steht **nie** im Code oder in `wrangler.toml` (die ist eingecheckt),
sondern ausschließlich verschlüsselt bei Cloudflare — genau wie
`POSTFACH_CODE` und `ENCRYPTION_KEY`.
- Ändern/Ersetzen einer URL: den jeweiligen `wrangler secret put ...`-Befehl
erneut ausführen, überschreibt den alten Wert.
- Ändern/Ersetzen des Keys: `wrangler secret put TICKETANIZER_API_KEY` erneut
ausführen, überschreibt den alten Wert.
- Es wird bewusst nur Schritt 1 der Ticketanizer-API genutzt (Ticket
eröffnen). Das Nachladen von Staff-Antworten (Schritt 3, "pollen") ist
hier nicht eingebaut, da eine Bewerbung ein einmaliger Vorgang ist und
kein dauerhaft laufender Chat.
## Wer den Owner-Code kennen darf