Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 38 additions & 9 deletions skills/zammad-cli/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
name: zammad-cli
description: Zammad helpdesk için CLI wrapper skill. Kullanıcı "ticket ara", "ticket aç", "ticket kapat", "müşteri tickets", "destek talepleri", "support ticket oluştur", "zammad'da güncelle", "/zammad-cli" dediğinde tetiklenir. zammad-cli Rust binary'sini doğru komutlarla çağırır - ticket search/list/get/create/update/articles/article add/overview, org list/search, user search, system groups/states/priorities. Her zaman --json kullanıp parse eder.
when_to_use: Zammad ticket yönetimi, destek talebi yaratma/güncelleme, organizasyon/kullanıcı arama, ticket overview. Tetikleme cümleleri - "açık tickets", "yüksek priority destek", "X organizasyonun ticketları", "ticket #61234", "ticket'a not ekle", "support'a yanıt yaz".
description: Zammad helpdesk ticket/org/user/tag yönetimini zammad-cli binary'siyle yürütür.
when_to_use: Trigger — "ticket ara", "ticket aç", "ticket kapat", "müşteri tickets", "destek talepleri", "support ticket oluştur", "zammad'da güncelle", "açık tickets", "yüksek priority destek", "X organizasyonun ticketları", "ticket #61234", "ticket'a not ekle", "support'a yanıt yaz", "ticket'a tag ekle", "ekleri indir", "/zammad-cli". Komutlar — ticket search/list/get/articles/create/update/article add/attachment list/attachment download/overview, org list/search, user search, system groups/states/priorities, tags list/add/remove. Her zaman --json ile çağır.
allowed-tools: Bash(zammad-cli *) Read
---

Expand Down Expand Up @@ -52,17 +52,29 @@ zammad-cli --json ticket create \
--title "..." --body "..." \
--group "Destek Ekibi" \
--customer info@example.com \
--priority "3 high" --state new
--priority "3 high" --state new \
--tags "billing,urgent" \ # opsiyonel — create sonrası eklenir
--attachments "/path/a.pdf,/path/b.png" # opsiyonel — ilk article'a iliştirilir

# Update (DESTRUCTIVE — onay al)
zammad-cli --json ticket update #61234 --state closed
zammad-cli --json ticket update #61234 --priority "3 high" --owner agent@example.com
zammad-cli --json ticket update #61234 --tags-add "vip" --tags-remove "spam" # tag ekle/çıkar
# Pending state → --pending-time (ISO 8601) ZORUNLU
zammad-cli --json ticket update #61234 --state "pending close" --pending-time 2026-06-18T17:00:00Z
# Reschedule: zaten pending ticket'ın zamanını değiştir (state tekrar verilmesi gerekmez)
zammad-cli --json ticket update #61234 --pending-time 2026-06-20T09:00:00Z

# Article add (DESTRUCTIVE — onay al, public yorum müşteriye gider)
zammad-cli --json ticket article add #61234 --body "..." # internal default
zammad-cli --json ticket article add #61234 --body "..." --public # müşteriye e-posta!
zammad-cli --json ticket article add #61234 --body "..." # internal default
zammad-cli --json ticket article add #61234 --body "..." --subject "Re: ..." # subject opsiyonel
zammad-cli --json ticket article add #61234 --body "..." --public # müşteriye e-posta!
zammad-cli --json ticket article add #61234 --body "..." --attachments "/path/log.txt"

# Attachment (list / download)
zammad-cli --json ticket attachment list #61234 # tüm ekleri + ID'leri
zammad-cli --json ticket attachment download #61234 --article 999 --attachment 5 --out ./dl
zammad-cli --json ticket attachment download #61234 --all --out ./dl # ticket'taki tüm ekler

# Overview (5 state için paralel sayım)
zammad-cli --json ticket overview
Expand All @@ -81,6 +93,18 @@ zammad-cli --json system states
zammad-cli --json system priorities
```

### Tags (herhangi bir nesneye)

`--object` default `Ticket`; `--id` internal ID (ticket number değil). Ticket tag'leri için
`ticket update --tags-add/--tags-remove` daha pratik — `tags` komutu diğer nesneler veya
listeleme için.

```bash
zammad-cli --json tags list --object Ticket --id 42
zammad-cli --json tags add --object Ticket --id 42 --name "vip"
zammad-cli --json tags remove --object Ticket --id 42 --name "spam"
```

## Search Syntax (ticket list / ticket search)

Zammad search syntax — string olduğu gibi geçer:
Expand Down Expand Up @@ -114,11 +138,13 @@ Zammad search syntax — string olduğu gibi geçer:
"customer": "info@example.com",
"organization": "Acme Corp",
"created_at": "...",
"updated_at": "..."
"updated_at": "...",
"article_count": 3
}]
```

`--json ticket articles` → `Article[]` (id, created_at, sender, from, subject, body, internal).
`--json ticket articles` → `Article[]` (id, created_at, sender, from, subject, body, internal, attachments[]).
`--json ticket attachment list` → `[{ticket_id, article_id, attachment_id, filename, size}]` (download için article_id + attachment_id buradan).

`--json ticket overview` → `{state: count, ...}`.

Expand Down Expand Up @@ -163,16 +189,19 @@ PUBLIC yanıt **müşteriye e-posta gider** — destructive!
- `Unauthorized (401)` → ZAMMAD_TOKEN geçersiz, profile'dan yenisini al
- `Permission denied (403)` → Token'ın `ticket.agent` veya `admin` izni yok
- `Bad request (400)` → Parametre formatı (özellikle state/priority adları)
- `Unprocessable (422)` → Geçersiz alan değeri (örn. owner email yok)
- `Unprocessable (422)` → Geçersiz/eksik alan değeri (örn. owner email yok, pending_time eksik). Not: `--pending-time` eksikliği artık CLI tarafında erken yakalanır, 422'ye düşmez.
- Boş `Error: ZAMMAD_URL...` → env eksik

## İpuçları

- **State doğru yaz**: `new`, `open`, `closed`, `pending reminder`, `pending close` (boşluklu olanlar quote'lu)
- **Priority doğru yaz**: `1 low`, `2 normal`, `3 high` (sayı + boşluk + isim)
- **Pending state → `--pending-time` zorunlu**: `pending close`/`pending reminder` için ISO 8601 timestamp (`2026-06-18T17:00:00Z`) ver; eksikse CLI HTTP'ye gitmeden net hata verir. Zaten pending bir ticket'ı yeniden zamanlamak için sadece `--pending-time` yeterli (state tekrar verilmesi gerekmez). State karşılaştırması case-insensitive.
- **Group default**: `ticket create` default `"Destek Ekibi"` (Diji-spesifik, başka instance'larda override gerekli)
- **Article internal default true**: `--public` flag olmadan dahili not olarak eklenir, müşteri görmez
- **Overview 100 cap**: `ticket overview` her state için `per_page=100` ile sayar — 100+ ticket varsa undercount, raporlarken belirt
- **Tag iki yol**: ticket için `ticket update --tags-add/--tags-remove` pratik; diğer nesneler veya listeleme için `tags` komutu (`--object`/`--id`, id internal ID).
- **Attachment ID akışı**: indirmeden önce `ticket attachment list #X` ile `article_id` + `attachment_id` al; veya tek seferde `--all` ile hepsini indir.
- **Overview 100 cap**: `ticket overview` her state için `per_page=100` ile sayar — 100+ ticket varsa undercount, raporlarken belirt (JSON çıktısında `_warning` alanı da gelir)

## İlgili Kaynaklar

Expand Down
Loading