Neuer Status bei Zammad einfügen

Zammad bietet von Haus aus, ein sehr gute API. Mit dieser API möchte ich festhalten wie es möglich ist, einen eigenen Status einzufügen.

Statusse

Beim Status eines Tickets handelt es sich um den Stand eines Tickets. Bei der Installation von Zammad stehen folgende Statusse zur Verfügung

  • Open | Offen
  • New | Neu
  • Pending Reminder | warten auf Erinnerung
  • closed | Geschlossen
  • merged | Zusammengeführt
  • removed | gelöscht (inaktiv)
  • pending close | warten auf Schließen

Diese können im Frontend ausgewählt werden. Nun macht es eventuell Sinn weitere Statusse hinzuzufügen. Dies kann über die API gemacht werden. Allerdings mit einem (gar nicht so) kleinen Manko. Der neu eingeführte Status kann im Frontend nicht ausgewählt werden. 

Wir kümmern uns aber darum. Ziel des Beitrags ist es ja, genau das zu bewerkstelligen.

Status über die API einfügen

Im Ersten Schritt erstellen wir unseren Status. Über die API wird ein JSON Objekt erwartet das folgendermaßen aussehen kann.

{
	"id": 8,
	"state_type_id": 5,
	"name": "zur Info",
	"next_state_id": null,
	"ignore_escalation": true,
	"default_create": false,
	"default_follow_up": false,
	"note": "Zur Information",
	"active": true
}

Dieses Objekt muss an folgenden Endpoint übermittelt werden:

curl -u admin@zammad.com:test123 -H "Content-Type: application/json" -X POST -d '{"id": 8, "state_type_id": 5, "name": "zur Info", "next_state_id": null, "ignore_escalation": false, "default_create": false, "default_follow_up": false, "note": "Zur Information", "active": true }' https://xxx.zammad.com/api/v1/ticket_states

Nun ist der Status in der Datenbank verfügbar.

Status im Frontend verwenden

Wie eingangs erwähnt kann dieser (neue) Status im Frontend nicht ausgewählt werden. Hierzu muss man via der (mitgelieferten) rails Konsole folgenden „Befehl“ absetzen:

ObjectManager::Attribute.add(
  force: true,
  object: 'Ticket',
  name: 'state_id',
  display: 'State',
  data_type: 'select',
  data_option: {
    relation: 'TicketState',
    nulloption: true,
    multiple: false,
    null: false,
    default: Ticket::State.find_by(default_follow_up: true).id,
    translate: true,
    filter: Ticket::State.by_category(:viewable).pluck(:id),
  },
  editable: false,
  active: true,
  screens: {
    create_middle: {
      'ticket.agent' => {
        null: false,
        item_class: 'column',
        filter: Ticket::State.by_category(:viewable_agent_new).pluck(:id),
      },
      'ticket.customer' => {
        item_class: 'column',
        nulloption: false,
        null: true,
        filter: Ticket::State.by_category(:viewable_customer_new).pluck(:id),
        default: Ticket::State.find_by(default_create: true).id,
      },
    },
    edit: {
      'ticket.agent' => {
        nulloption: false,
        null: false,
        filter: Ticket::State.by_category(:viewable_agent_edit).pluck(:id),
      },
      'ticket.customer' => {
        nulloption: false,
        null: true,
        filter: Ticket::State.by_category(:viewable_customer_edit).pluck(:id),
        default: Ticket::State.find_by(default_follow_up: true).id,
      },
    },
  },
  to_create: false,
  to_migrate: false,
  to_delete: false,
  position: 40,
)

Das ganze Prozedere kann auch direkt im Issue Tracker von Zammad nachgelesen werden.

← Vorheriger Beitrag

Nächster Beitrag →

2 Kommentare

  1. Hallo,

    vielen Dank für den hilfreichen Artikel zu Zammad. Wissen Sie vielleicht auch, wie man die Farbe des neu erstellten Status anpassen kann?

    Viele Grüße,
    Tobias

    • Hallo Tobias.

      Erstmals freut es mich, dass der Artikel geholfen hat. Zweitens wäre es mir das Du lieber als Sie 😉

      Nun zu deiner Frage:
      Ich habe mir das ganze angeschaut und soweit ich das gesehen habe kannst du (ich hoffe es passt auch wenn ich du schreibe) beim Einfügen eines neuen Statusses den Wert styte_type_id angeben, dieser bezieht sich auf die Tabelle ticket_state_types. Anhand dieses Wertes wird beim Ticket eine CSS Klasse mitgegeben, bei der die Farbe hinterlegt wurde (background-color). Wenn wir das Beispiel dieses Artikels ansehen, dann ist die Farbe hier grün.

      Es gibt in der Datenbank folgende Werte

      1 – orange (new)
      2 – orange (open)
      3 – pending reminder (grau)
      4 – pending action (grau)
      5 – closed (grün)
      6 – merged (blau)

      Wie man eigene Farben definieren kann, kann ich aktuell leider nicht beantworten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.