# POST /api/v1/feedback — Buat feedback (+ tiket Zammad) `POST https://console.gisportal.id/api/v1/feedback` Auth: JWT atau API Token (scope sesuai route middleware). --- ## Request body ```json { "type": "bug", "title": "Tombol simpan tidak merespons", "message": "Saat klik Simpan di halaman profil, tidak ada reaksi.", "context": { "page": "/profile", "url": "https://my.gisportal.id/profile", "user_agent": "Mozilla/5.0 ...", "reporter": "rbsetiawan", "reporter_name": "RB Setiawan", "reported_at": "2026-07-03T10:00:00+07:00" } } ``` | Field | Wajib | Keterangan | |-------|-------|------------| | `type` | ✅ | `bug`, `suggestion`, `other` | | `title` | ✅ | Max 120 karakter | | `message` | ✅ | Max 5000 karakter | | `context.reporter` | — | Username / email pelapor | | `context.reporter_name` | — | Nama tampilan | --- ## Response 201 Feedback selalu disimpan. Jika integrasi Zammad aktif (`ZAMMAD_API_TOKEN`), tiket dibuat otomatis. ```json { "data": { "id": 12, "status": "open", "zammad_ticket_id": 10042, "zammad_ticket_number": "10042", "zammad_ticket_url": "https://zammad.gisportal.id/#ticket/zoom/10042", "zammad_sync_error": null }, "meta": {}, "error": null } ``` Jika sync Zammad gagal, `id` dan `status` tetap ada; `zammad_ticket_*` null dan `zammad_sync_error` berisi pesan singkat. --- ## Env server | Variable | Contoh | |----------|--------| | `ZAMMAD_ENABLED` | `true` | | `ZAMMAD_BASE_URL` | `https://zammad.gisportal.id` | | `ZAMMAD_API_TOKEN` | Token `fe-ticketing-pwa` dari Zammad | | `ZAMMAD_DEFAULT_GROUP` | `Users` | Token disimpan di server Zammad: `/opt/stacks/zammad/.fe-ticketing-token` --- ## FE (my.gisportal.id) Setelah sukses, tampilkan ke user: ```tsx if (data.zammad_ticket_number) { toast.success(`Tiket #${data.zammad_ticket_number} dibuat. Tim support akan menindaklanjuti.`); } ``` Lihat juga `Zammad/docs/notes/fe-ticketing-integration.md`.