Přeskočit na hlavní obsah

Pravidla workflow

Automatizujte vaše Helpdesk procesy pomocí přizpůsobitelných pravidel workflow. Pravidla workflow vám umožňují automaticky aktualizovat atributy tiketů, odesílat oznámení a spouštět specifické akce na základě definovaných událostí nebo podmínek. Tato funkce pomáhá snížit manuální práci, udržovat konzistenci a urychlit dobu odezvy.

Po instalaci Helpdesk MX automaticky vytvoří výchozí pravidlo workflow "Auto-change status to Waiting for Customer on agent reply".


Obecné informace​

Obecné informaceObecné informace
  • Rule Name: definujte popisný název pravidla. Jasné pojmenování pomáhá vašemu týmu snadno identifikovat, co každé pravidlo dělá.
  • Active: povolte nebo zakažte pravidlo. Pouze aktivní pravidla jsou vykonávána, když jsou splněny jejich události a podmínky.
  • Event: vyberte událost, která spouští pravidlo.
  • Priority / Sort Order: určete pořadí zpracování pravidla. Nižší čísla jsou vykonávána první. To pomáhá kontrolovat, která pravidla mají přednost, když se více pravidel vztahuje na stejnou událost.
  • Stop Further Rules Processing: zastavit vykonávání pravidel s nižší prioritou, jakmile bylo toto pravidlo aplikováno. Užitečné, když chcete, aby specifické pravidlo mělo plnou kontrolu nad událostí.

Události​

Události definují, kdy je pravidlo workflow vyhodnocováno. Dostupné události zahrnují:

  • New Ticket — spuštěno, když je vytvořen nový tiket.
  • New Customer Reply — spuštěno, když zákazník odešle novou odpověď.
  • New Staff Reply — spuštěno, když agent odešle odpověď.
  • New Third Party Reply — spuštěno, když třetí strana odešle zprávu.
  • Ticket Assigned — spuštěno, když je tiket přiřazen uživateli.
  • Ticket Updated — spuštěno, když jsou pole tiketu aktualizována.
  • Cron Every Hour — spuštěno systémem každou hodinu, umožňující časově založené akce.

Podmínky​

Podmínky definují, kdy by mělo být pravidlo workflow vykonáno. Můžete použít jednu nebo více podmínek, kombinovat je s logikou ALL/ANY a dokonce vytvářet vnořené skupiny pro pokročilé filtrování. Nechte tuto sekci prázdnou, aby se pravidlo vykonávalo při každém výskytu události.

PodmínkyPodmínky

Dostupná pole​

Můžete vytvářet podmínky pomocí následujících polí:

  • Subject — kontroluje slova nebo fráze v předmětu tiketu.
  • Customer Email — odpovídá emailové adrese zákazníka.
  • Customer Name — porovnává jméno zákazníka.
  • Channel — filtruje tikety vytvořené z konkrétních zdrojů (např. email, kontaktní formulář, API).
  • Department — odpovídá aktuálnímu oddělení přiřazenému tiketu.
  • Department (Before Change) — umožňuje porovnání s oddělením před aktualizační událostí.
  • Folder — kontroluje, do které složky tiket aktuálně patří.
  • Folder (Before Change) — kontroluje složku před poslední změnou.
  • Owner — odpovídá přiřazenému agentovi.
  • Owner (Before Change) — porovnává vlastníka před aktualizací.
  • Priority — kontroluje aktuální prioritu tiketu.
  • Priority (Before Change) — porovnává prioritu před aktualizací.
  • Status — kontroluje aktuální stav tiketu.
  • Status (Before Change) — porovnává předchozí stav.
  • Last Message — umožňuje kontrolovat obsah v poslední zprávě.
  • Last Reply By — definuje, kdo odpověděl naposledy (zákazník, zaměstnanec nebo třetí strana).
  • Hours Since Created — uplynulý čas od vytvoření tiketu.
  • Hours Since Last Reply — čas od poslední odpovědi.
  • Hours Since Updated — čas od poslední úpravy tiketu.

Operátory podmínek​

Každá podmínka může použít jeden z následujících operátorů pro definici způsobu porovnání hodnot:

  • Equals — spustí, když hodnota pole přesně odpovídá zadané hodnotě.
  • Not Equals — spustí, když se hodnota pole liší od zadané hodnoty.
  • Greater Than — spustí, když je hodnota větší než zadaná (především pro numerická nebo časová pole).
  • Greater Than or Equals — spustí, když je hodnota větší nebo rovna zadané.
  • Less Than — spustí, když je hodnota menší než zadaná.
  • Less Than or Equals — spustí, když je hodnota menší nebo rovna zadané.
  • Between — spustí, když hodnota spadá mezi dvě zadaná čísla (užitečné pro časově založené podmínky).
  • Matches Regex — porovnává hodnoty polí pomocí regulárních výrazů pro pokročilé porovnávání vzorů.
  • Starts With — spustí, pokud pole začíná zadaným textem.
  • Ends With — spustí, pokud pole končí zadaným textem.
  • Is Empty — spustí, když pole nemá hodnotu.
  • Is Not Empty — spustí, když pole obsahuje jakoukoli hodnotu.
  • Contains — spustí, když pole zahrnuje zadaný text.
  • Does Not Contain — spustí, když pole nezahrnuje zadaný text.

Akce​

Akce definují, co se stane, jakmile jsou všechny podmínky splněny. Více akcí může být kombinováno v rámci jediného pravidla.

AkceAkce

Dostupné akce zahrnují:

  • Set Status — aktualizovat stav tiketu.
  • Set Priority — změnit úroveň priority.
  • Set Department — přeřadit tiket jinému oddělení.
  • Set Owner — přiřadit konkrétnímu agentovi.
  • Change Folder — přesunout tiket do konkrétní složky.
  • Add Tags — přidat tagy pro kategorizaci.
  • Remove Tags — smazat existující tagy z tiketu.
  • Send Email — odeslat emailová oznámení zadaným příjemcům.
  • Run Script — vykonat vlastní JavaScript kód pro pokročilou automatizaci.

Akce Send Email​

Akce Send Email umožňuje odesílat automatická emailová oznámení, když je pravidlo spuštěno. To je užitečné pro upozornění členů týmu, informování zákazníků nebo komunikaci s externími stranami.

Dostupné možnosti:

  • Send to ticket owner — upozornit přiřazeného agenta.
  • Send to all department users — upozornit všechny členy oddělení tiketu.
  • Send to customer — informovat zákazníka o aktualizacích.
  • Send to other addresses — zadat vlastní emailové adresy.
  • Email Subject — definovat předmět emailu (podporuje proměnné šablony Liquid).
  • Email Body — sestavit obsah emailu (podporuje proměnné šablony Liquid).
  • Include attachments — připojit soubory z poslední zprávy.

Proměnné šablon​

Můžete použít proměnné šablon Liquid v polích Email Subject a Email Body pro dynamické vložení informací o tiketu, zákazníkovi a zprávě.

Proměnné tiketu:

ProměnnáPopis
{{ ticket.code }}Kód tiketu (např. T-001)
{{ ticket.subject }}Předmět tiketu
{{ ticket.created_at }}Časové razítko vytvoření tiketu
{{ ticket.updated_at }}Časové razítko poslední aktualizace
{{ ticket.customer_name }}Celé jméno zákazníka
{{ ticket.customer_email }}Emailová adresa zákazníka
{{ ticket.admin_url }}Přímý odkaz na tiket v administrátorském panelu
{{ ticket.admin_last_message_text }}Tělo poslední odpovědi agenta (prostý text)
{{ ticket.admin_last_message_html }}Tělo poslední odpovědi agenta (HTML)
{{ ticket.customer_last_message_text }}Tělo poslední odpovědi zákazníka (prostý text)
{{ ticket.customer_last_message_html }}Tělo poslední odpovědi zákazníka (HTML)

Proměnné vlastníka/přiřazeného:

ProměnnáPopis
{{ owner.firstname }}Křestní jméno přiřazeného agenta
{{ owner.lastname }}Příjmení přiřazeného agenta
{{ owner.email }}Email přiřazeného agenta
{{ owner.fullname }}Celé jméno přiřazeného agenta
{{ owner.is_admin }}Zda je vlastník administrátor

Proměnné oddělení:

ProměnnáPopis
{{ department.name }}Název oddělení
{{ department.sender_name }}Jméno odesílatele oddělení

Proměnné zprávy (při spuštění událostmi zprávy):

ProměnnáPopis
{{ message.body_text }}Obsah zprávy (prostý text)
{{ message.body_html }}Obsah zprávy (HTML)
{{ message.type }}Typ zprávy
{{ message.created_at }}Časové razítko vytvoření zprávy

Proměnné data/času:

ProměnnáPopis
{{ now }}Aktuální časové razítko (RFC3339)
{{ date }}Aktuální datum (YYYY-MM-DD)
{{ time }}Aktuální čas (HH:MM:SS)
{{ year }}Aktuální rok

Příklad šablony emailu:

Subject: Nová odpověď na tiket #{{ ticket.code }}

Ahoj {{ owner.firstname }},

Zákazník odpověděl na tiket "{{ ticket.subject }}".

Zákazník: {{ ticket.customer_name }} ({{ ticket.customer_email }})

Poslední zpráva:
{{ ticket.customer_last_message_text }}

Zobrazit tiket: {{ ticket.admin_url }}

Akce Run Script​

Akce Run Script umožňuje vykonávat vlastní JavaScript kód pro implementaci komplexní logiky automatizace, která přesahuje jednoduché přiřazování polí. Skripty mohou číst data tiketu, provádět podmíněná rozhodnutí a aktualizovat více polí najednou.

Dostupné vlastnosti tiketu (čtení):

VlastnostPopis
ticket.idJedinečný identifikátor tiketu
ticket.subjectPředmět tiketu
ticket.folderAktuální složka (INBOX, ASSIGNED, SPAM atd.)
ticket.tagsPole tagů
ticket.statusObjekt s id, code a name
ticket.priorityObjekt s id a name
ticket.departmentObjekt s id a name
ticket.ownerObjekt s id, email, firstname, lastname
ticket.customerObjekt s id, email, firstname, lastname, name
ticket.<custom_field_code>Hodnota vlastního pole podle jeho kódu

Dostupné vlastnosti tiketu (zápis):

VlastnostOčekávaná hodnota
ticket.statusKód stavu (řetězec) nebo ID stavu
ticket.priorityNázev priority (řetězec) nebo ID priority
ticket.departmentNázev oddělení (řetězec) nebo ID oddělení
ticket.ownerEmail uživatele (řetězec) nebo ID uživatele
ticket.folderNázev složky: "INBOX", "ASSIGNED", "SPAM", "ARCHIVE"
ticket.tagsPole řetězců tagů
ticket.<custom_field_code>Hodnota odpovídající typu vlastního pole

Pomocné funkce:

FunkceVrací
getStatuses()Pole všech dostupných stavů
getPriorities()Pole všech dostupných priorit
getDepartments()Pole všech dostupných oddělení
getUsers()Pole všech dostupných uživatelů
fetch(url, options)Provádění HTTP požadavků na externí API

Kontext zprávy (dostupný při spuštění pravidla událostí zprávy):

VlastnostPopis
message.idJedinečný identifikátor zprávy
message.body_textObsah zprávy (prostý text)
message.body_htmlObsah zprávy (HTML)
message.createdAtČasové razítko vytvoření zprávy

Příklady skriptů:

// Nastavit prioritu podle klíčových slov předmětu
if (ticket.subject.toLowerCase().includes("urgent")) {
ticket.priority = "High";
}
// Směrovat tikety do oddělení podle obsahu
if (ticket.subject.includes("billing") || ticket.subject.includes("invoice")) {
ticket.department = "Billing";
} else if (ticket.subject.includes("technical") || ticket.subject.includes("error")) {
ticket.department = "Technical Support";
}
// Zpracování VIP zákazníků
if (ticket.customer && ticket.customer.email.endsWith("@enterprise.com")) {
ticket.priority = "High";
ticket.tags = ["vip", "enterprise"];
}
// Nastavit hodnotu vlastního pole
ticket.order_id = "12345";
ticket.vip_customer = true;
ticket.order_amount = 99.99;
// Získat data zákazníka z externího API a aktualizovat tiket
var response = fetch("https://api.example.com/customers/" + ticket.customer.email, {
headers: { "Authorization": "Bearer YOUR_API_KEY" }
});

if (response.ok && response.json) {
ticket.customer_tier = response.json.tier;
if (response.json.tier === "enterprise") {
ticket.priority = "High";
ticket.department = "Enterprise Support";
}
}

Důležité poznámky:

  • Skripty mají časový limit 10 sekund pro zabránění nekonečným cyklům.
  • Neplatné hodnoty polí (neexistující stav, priorita atd.) jsou tiše ignorovány.
  • Chyby skriptů neovlivňují další pravidla ani nespůsobují pád systému.
  • Vlastní pole jsou odkazována podle jejich kódu, nikoli názvu.

Oznámení​

Můžete odesílat automatická emailová oznámení, když se pravidlo vykoná, aby byly všechny strany informovány.

OznámeníOznámení

Možnosti oznámení zahrnují:

  • Send email to ticket owner — upozornit přiřazeného agenta.
  • Send email to all department users — upozornit všechny členy oddělení.
  • Send email to customer — informovat zákazníka o změnách.
  • Send email to other addresses — odeslat externím příjemcům.
  • Email Subject — zadat předmět.
  • Email Body — sestavit obsah emailu.
  • Attach files previously attached to the last message — zahrnout předchozí přílohy pro kontext.

Příklady pravidel workflow​

Změna stavu při odpovědi zákazníka
Když zákazník odpoví, systém automaticky změní stav tiketu na Waiting for Agent.

Typ: Workflow Rule
Is Active: Ano
Event: New Customer Reply
Conditions: Status Not Equals Closed
Actions: Set Status → Waiting for Agent
Nová odpověď od třetí strany
Když třetí strana odešle zprávu, systém nastaví stav na Waiting for Agent a přidá tag `third_party`.

Typ: Workflow Rule
Is Active: Ano
Event: New Third Party Reply
Conditions: Žádné
Actions:
Set Status → Waiting for Agent
Add Tags → third_party
Tiket přiřazen zaměstnanci
Když je tiket přiřazen členu zaměstnanců, automaticky se přesune do složky Assigned a odešle se emailové oznámení.

Typ: Workflow Rule
Is Active: Ano
Event: Ticket Assigned
Conditions: Žádné
Actions:
Change Folder → Assigned
Send email to ticket owner
Zavřít tiket po 72 hodinách bez odpovědi
Pokud není obdržena odpověď do 72 hodin, tiket se automaticky zavře.

Typ: Workflow Rule
Is Active: Ano
Event: Cron Every Hour
Conditions:
Status Equals Waiting for Customer
Hours Since Last Reply Greater Than 72
Actions: Set Status → Closed
Skript: Směrovat a prioritizovat podle domény emailu zákazníka
Směrovat podnikové zákazníky na dedikovanou podporu a nastavit vysokou prioritu.

Typ: Workflow Rule
Is Active: Ano
Event: New Ticket
Conditions: Žádné
Actions: Run Script

```javascript
if (ticket.customer && ticket.customer.email) {
var domain = ticket.customer.email.split("@")[1];

if (domain === "enterprise.com" || domain === "bigcorp.com") {
ticket.priority = "High";
ticket.department = "Enterprise Support";
ticket.tags = ["enterprise", "priority"];
}
}
```
Skript: Automatická kategorizace tiketů podle klíčových slov předmětu
Automaticky kategorizovat tikety a nastavit vlastní pole podle obsahu předmětu.

Typ: Workflow Rule
Is Active: Ano
Event: New Ticket
Conditions: Žádné
Actions: Run Script

```javascript
var subject = ticket.subject.toLowerCase();

if (subject.includes("refund") || subject.includes("return")) {
ticket.department = "Billing";
ticket.category = "refund_request";
} else if (subject.includes("password") || subject.includes("login")) {
ticket.department = "Technical Support";
ticket.category = "account_access";
} else if (subject.includes("order") || subject.includes("shipping")) {
ticket.department = "Orders";
ticket.category = "order_inquiry";
}
```
Skript: Eskalace na základě analýzy obsahu zprávy
Detekce urgentních klíčových slov ve zprávách a automatická eskalace tiketů.

Typ: Workflow Rule
Is Active: Ano
Event: New Customer Reply
Conditions: Žádné
Actions: Run Script

```javascript
if (message && message.body_text) {
var body = message.body_text.toLowerCase();
var urgentKeywords = ["asap", "urgent", "critical", "down", "outage", "emergency"];

for (var i = 0; i < urgentKeywords.length; i++) {
if (body.includes(urgentKeywords[i])) {
ticket.priority = "High";
ticket.tags = ticket.tags.concat(["escalated"]);
break;
}
}
}
```