본문으로 건너뛰기

워크플로 규칙

사용자 정의 가능한 워크플로 규칙으로 헬프데스크 프로세스를 자동화하세요. 워크플로 규칙을 사용하면 티켓 속성을 자동으로 업데이트하고, 알림을 보내고, 정의된 이벤트 또는 조건에 따라 특정 작업을 트리거할 수 있습니다. 이 기능은 수동 작업을 줄이고, 일관성을 유지하며, 응답 시간을 단축하는 데 도움이 됩니다.

설치 후 Helpdesk MX는 기본 워크플로 규칙 "상담원 답장 시 상태를 고객 대기 중으로 자동 변경"을 자동으로 생성합니다.


일반 정보​

일반 정보일반 정보
  • Rule Name: 규칙의 설명적인 이름을 정의합니다. 명확한 명명은 팀이 각 규칙이 수행하는 작업을 쉽게 식별하는 데 도움이 됩니다.
  • Active: 규칙을 활성화하거나 비활성화합니다. 활성 규칙만 이벤트 및 조건이 충족될 때 실행됩니다.
  • Event: 규칙을 트리거하는 이벤트를 선택합니다.
  • Priority / Sort Order: 규칙의 처리 순서를 지정합니다. 낮은 숫자가 먼저 실행됩니다. 이는 여러 규칙이 동일한 이벤트에 적용될 때 어떤 규칙이 우선하는지 제어하는 데 도움이 됩니다.
  • Stop Further Rules Processing: 이 규칙이 적용된 후 우선순위가 낮은 규칙 실행을 중지합니다. 특정 규칙이 이벤트를 완전히 제어하도록 하려는 경우 유용합니다.

이벤트​

이벤트는 워크플로 규칙이 평가되는 시기를 정의합니다. 사용 가능한 이벤트는 다음과 같습니다:

  • New Ticket — 새 티켓이 생성될 때 트리거됩니다.
  • New Customer Reply — 고객이 새 답장을 보낼 때 트리거됩니다.
  • New Staff Reply — 상담원이 답장을 게시할 때 트리거됩니다.
  • New Third Party Reply — 제3자가 메시지를 보낼 때 트리거됩니다.
  • Ticket Assigned — 티켓이 사용자에게 할당될 때 트리거됩니다.
  • Ticket Updated — 티켓 필드가 업데이트될 때 트리거됩니다.
  • Cron Every Hour — 시스템에서 매시간 트리거되어 시간 기반 작업을 허용합니다.

조건​

조건은 워크플로 규칙이 실행되어야 하는 시기를 정의합니다. 하나 또는 여러 조건을 사용하고, ALL/ANY 로직으로 결합하며, 고급 필터링을 위해 중첩 그룹을 생성할 수도 있습니다. 모든 이벤트 발생 시 규칙을 실행하려면 이 섹션을 비워 둡니다.

조건조건

사용 가능한 필드​

다음 필드를 사용하여 조건을 구성할 수 있습니다:

  • Subject — 티켓 제목의 단어나 구를 확인합니다.
  • Customer Email — 고객의 이메일 주소와 일치시킵니다.
  • Customer Name — 고객의 이름을 비교합니다.
  • Channel — 특정 소스(예: 이메일, 연락처 양식, API)에서 생성된 티켓을 필터링합니다.
  • Department — 티켓에 할당된 현재 부서와 일치시킵니다.
  • Department (Before Change) — 업데이트 이벤트 전 부서와 비교할 수 있습니다.
  • Folder — 티켓이 현재 속한 폴더를 확인합니다.
  • Folder (Before Change) — 마지막 변경 전 폴더를 확인합니다.
  • Owner — 할당된 상담원과 일치시킵니다.
  • Owner (Before Change) — 업데이트 전 소유자를 비교합니다.
  • Priority — 티켓의 현재 우선순위를 확인합니다.
  • Priority (Before Change) — 업데이트되기 전 우선순위를 비교합니다.
  • Status — 현재 티켓 상태를 확인합니다.
  • Status (Before Change) — 이전 상태를 비교합니다.
  • Last Message — 최신 메시지의 내용을 확인할 수 있습니다.
  • Last Reply By — 마지막으로 답장한 사람(고객, 직원 또는 제3자)을 정의합니다.
  • Hours Since Created — 티켓이 생성된 이후 경과한 시간입니다.
  • Hours Since Last Reply — 마지막 답장이 작성된 이후 시간입니다.
  • Hours Since Updated — 티켓이 마지막으로 수정된 이후 시간입니다.

조건 연산자​

각 조건은 다음 연산자 중 하나를 사용하여 값을 비교하는 방법을 정의할 수 있습니다:

  • Equals — 필드 값이 지정된 값과 정확히 일치할 때 트리거됩니다.
  • Not Equals — 필드 값이 지정된 값과 다를 때 트리거됩니다.
  • Greater Than — 값이 지정된 값보다 클 때 트리거됩니다(주로 숫자 또는 시간 필드에 사용).
  • Greater Than or Equals — 값이 지정된 값보다 크거나 같을 때 트리거됩니다.
  • Less Than — 값이 지정된 값보다 작을 때 트리거됩니다.
  • Less Than or Equals — 값이 지정된 값보다 작거나 같을 때 트리거됩니다.
  • Between — 값이 두 개의 지정된 숫자 사이에 있을 때 트리거됩니다(시간 기반 조건에 유용).
  • Matches Regex — 고급 패턴 일치를 위해 정규식을 사용하여 필드 값을 비교합니다.
  • Starts With — 필드가 지정된 텍스트로 시작하는 경우 트리거됩니다.
  • Ends With — 필드가 지정된 텍스트로 끝나는 경우 트리거됩니다.
  • Is Empty — 필드에 값이 없을 때 트리거됩니다.
  • Is Not Empty — 필드에 값이 포함될 때 트리거됩니다.
  • Contains — 필드에 지정된 텍스트가 포함될 때 트리거됩니다.
  • Does Not Contain — 필드에 지정된 텍스트가 포함되지 않을 때 트리거됩니다.

작업​

작업은 모든 조건이 충족되면 발생하는 일을 정의합니다. 단일 규칙 내에서 여러 작업을 결합할 수 있습니다.

작업작업

사용 가능한 작업은 다음과 같습니다:

  • Set Status — 티켓의 상태를 업데이트합니다.
  • Set Priority — 우선순위 수준을 변경합니다.
  • Set Department — 티켓을 다른 부서에 재할당합니다.
  • Set Owner — 특정 상담원에게 할당합니다.
  • Change Folder — 티켓을 특정 폴더로 이동합니다.
  • Add Tags — 분류를 위한 태그를 추가합니다.
  • Remove Tags — 티켓에서 기존 태그를 삭제합니다.
  • Send Email — 지정된 수신자에게 이메일 알림을 보냅니다.
  • Run Script — 고급 자동화를 위해 사용자 정의 JavaScript 코드를 실행합니다.

이메일 전송 작업​

Send Email 작업을 사용하면 규칙이 트리거될 때 자동화된 이메일 알림을 보낼 수 있습니다. 이는 팀 구성원에게 알리거나, 고객에게 알리거나, 외부 당사자와 소통하는 데 유용합니다.

사용 가능한 옵션:

  • Send to ticket owner — 할당된 상담원에게 알립니다.
  • Send to all department users — 티켓 부서의 모든 구성원에게 알립니다.
  • Send to customer — 고객에게 업데이트를 알립니다.
  • Send to other addresses — 사용자 정의 이메일 주소를 지정합니다.
  • Email Subject — 이메일 제목 줄을 정의합니다(Liquid 템플릿 변수 지원).
  • Email Body — 이메일 내용을 작성합니다(Liquid 템플릿 변수 지원).
  • Include attachments — 마지막 메시지의 파일을 첨부합니다.

템플릿 변수​

Email Subject 및 Email Body 필드에서 Liquid 템플릿 변수를 사용하여 티켓, 고객 및 메시지 정보를 동적으로 삽입할 수 있습니다.

티켓 변수:

변수설명
{{ ticket.code }}티켓 코드(예: T-001)
{{ ticket.subject }}티켓 제목 줄
{{ ticket.created_at }}티켓 생성 타임스탬프
{{ ticket.updated_at }}마지막 업데이트 타임스탬프
{{ ticket.customer_name }}고객 전체 이름
{{ ticket.customer_email }}고객 이메일 주소
{{ ticket.admin_url }}관리 패널의 티켓 직접 링크
{{ ticket.admin_last_message_text }}마지막 상담원 답장 본문(일반 텍스트)
{{ ticket.admin_last_message_html }}마지막 상담원 답장 본문(HTML)
{{ ticket.customer_last_message_text }}마지막 고객 답장 본문(일반 텍스트)
{{ ticket.customer_last_message_html }}마지막 고객 답장 본문(HTML)

소유자/할당자 변수:

변수설명
{{ owner.firstname }}할당된 상담원의 이름
{{ owner.lastname }}할당된 상담원의 성
{{ owner.email }}할당된 상담원의 이메일
{{ owner.fullname }}할당된 상담원의 전체 이름
{{ owner.is_admin }}소유자가 관리자인지 여부

부서 변수:

변수설명
{{ department.name }}부서 이름
{{ department.sender_name }}부서 발신자 이름

메시지 변수(메시지 이벤트에 의해 트리거될 때):

변수설명
{{ message.body_text }}메시지 내용(일반 텍스트)
{{ message.body_html }}메시지 내용(HTML)
{{ message.type }}메시지 유형
{{ message.created_at }}메시지 생성 타임스탬프

날짜/시간 변수:

변수설명
{{ now }}현재 타임스탬프(RFC3339)
{{ date }}현재 날짜(YYYY-MM-DD)
{{ time }}현재 시간(HH:MM:SS)
{{ year }}현재 년도

예제 이메일 템플릿:

제목: 티켓 #{{ ticket.code }}에 새 답장

안녕하세요 {{ owner.firstname }},

고객이 티켓 "{{ ticket.subject }}"에 답장했습니다.

고객: {{ ticket.customer_name }} ({{ ticket.customer_email }})

마지막 메시지:
{{ ticket.customer_last_message_text }}

티켓 보기: {{ ticket.admin_url }}

스크립트 실행 작업​

Run Script 작업을 사용하면 사용자 정의 JavaScript 코드를 실행하여 간단한 필드 할당을 넘어서는 복잡한 자동화 로직을 구현할 수 있습니다. 스크립트는 티켓 데이터를 읽고, 조건부 결정을 내리며, 여러 필드를 한 번에 업데이트할 수 있습니다.

사용 가능한 티켓 속성(읽기):

속성설명
ticket.id티켓 고유 식별자
ticket.subject티켓 제목 줄
ticket.folder현재 폴더(INBOX, ASSIGNED, SPAM 등)
ticket.tags태그 배열
ticket.statusid, code 및 name이 있는 객체
ticket.priorityid 및 name이 있는 객체
ticket.departmentid 및 name이 있는 객체
ticket.ownerid, email, firstname, lastname이 있는 객체
ticket.customerid, email, firstname, lastname, name이 있는 객체
ticket.<custom_field_code>코드별 사용자 정의 필드 값

사용 가능한 티켓 속성(쓰기):

속성예상 값
ticket.status상태 코드(문자열) 또는 상태 ID
ticket.priority우선순위 이름(문자열) 또는 우선순위 ID
ticket.department부서 이름(문자열) 또는 부서 ID
ticket.owner사용자 이메일(문자열) 또는 사용자 ID
ticket.folder폴더 이름: "INBOX", "ASSIGNED", "SPAM", "ARCHIVE"
ticket.tags태그 문자열 배열
ticket.<custom_field_code>사용자 정의 필드 유형과 일치하는 값

헬퍼 함수:

함수반환
getStatuses()사용 가능한 모든 상태의 배열
getPriorities()사용 가능한 모든 우선순위의 배열
getDepartments()사용 가능한 모든 부서의 배열
getUsers()사용 가능한 모든 사용자의 배열
fetch(url, options)외부 API에 HTTP 요청

메시지 컨텍스트(규칙이 메시지 이벤트에 의해 트리거될 때 사용 가능):

속성설명
message.id메시지 고유 식별자
message.body_text메시지 내용(일반 텍스트)
message.body_html메시지 내용(HTML)
message.createdAt메시지 생성 타임스탬프

스크립트 예:

// 제목 키워드를 기반으로 우선순위 설정
if (ticket.subject.toLowerCase().includes("urgent")) {
ticket.priority = "High";
}
// 내용을 기반으로 티켓을 부서로 라우팅
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";
}
// VIP 고객 처리
if (ticket.customer && ticket.customer.email.endsWith("@enterprise.com")) {
ticket.priority = "High";
ticket.tags = ["vip", "enterprise"];
}
// 사용자 정의 필드 값 설정
ticket.order_id = "12345";
ticket.vip_customer = true;
ticket.order_amount = 99.99;
// 외부 API에서 고객 데이터를 가져와서 티켓 업데이트
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";
}
}

중요 참고 사항:

  • 스크립트는 무한 루프를 방지하기 위해 10초 시간 초과가 있습니다.
  • 잘못된 필드 값(존재하지 않는 상태, 우선순위 등)은 우아하게 무시됩니다.
  • 스크립트 오류는 다른 규칙이나 시스템 충돌에 영향을 주지 않습니다.
  • 사용자 정의 필드는 이름이 아닌 코드로 참조됩니다.

알림​

규칙이 실행될 때 자동화된 이메일 알림을 보내 모든 관계자에게 정보를 제공할 수 있습니다.

알림알림

알림 옵션은 다음과 같습니다:

  • Send email to ticket owner — 할당된 상담원에게 알립니다.
  • Send email to all department users — 모든 부서 구성원에게 알립니다.
  • Send email to customer — 고객에게 변경 사항을 알립니다.
  • Send email to other addresses — 외부 수신자에게 전송합니다.
  • Email Subject — 제목 줄을 지정합니다.
  • Email Body — 이메일 내용을 작성합니다.
  • Attach files previously attached to the last message — 컨텍스트를 위해 이전 첨부 파일을 포함합니다.

예제 워크플로 규칙​

고객 답장 시 상태 변경
고객이 답장하면 시스템이 자동으로 티켓 상태를 상담원 대기 중으로 변경합니다.

유형: 워크플로 규칙
활성: 예
이벤트: 새 고객 답장
조건: 상태가 닫힘이 아님
작업: 상태 설정 → 상담원 대기 중
제3자의 새 답장
제3자가 메시지를 보내면 시스템이 상태를 상담원 대기 중으로 설정하고 `third_party` 태그를 추가합니다.

유형: 워크플로 규칙
활성: 예
이벤트: 새 제3자 답장
조건: 없음
작업:
상태 설정 → 상담원 대기 중
태그 추가 → third_party
직원에게 티켓 할당됨
티켓이 직원에게 할당되면 할당됨 폴더로 자동으로 이동하고 이메일 알림을 보냅니다.

유형: 워크플로 규칙
활성: 예
이벤트: 티켓 할당됨
조건: 없음
작업:
폴더 변경 → 할당됨
티켓 소유자에게 이메일 전송
답장 없이 72시간 후 티켓 닫기
72시간 내에 답장이 없으면 티켓이 자동으로 닫힙니다.

유형: 워크플로 규칙
활성: 예
이벤트: 매시간 크론
조건:
상태가 고객 대기 중과 같음
마지막 답장 이후 시간이 72보다 큼
작업: 상태 설정 → 닫힘
스크립트: 고객 이메일 도메인을 기반으로 라우팅 및 우선순위 지정
엔터프라이즈 고객을 전담 지원으로 라우팅하고 높은 우선순위를 설정합니다.

유형: 워크플로 규칙
활성: 예
이벤트: 새 티켓
조건: 없음
작업: 스크립트 실행

```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"];
}
}
```
스크립트: 제목 키워드로 티켓 자동 분류
제목 내용을 기반으로 티켓을 자동으로 분류하고 사용자 정의 필드를 설정합니다.

유형: 워크플로 규칙
활성: 예
이벤트: 새 티켓
조건: 없음
작업: 스크립트 실행

```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";
}
```
스크립트: 메시지 내용 분석을 기반으로 에스컬레이션
메시지에서 긴급 키워드를 감지하고 티켓을 자동 에스컬레이션합니다.

유형: 워크플로 규칙
활성: 예
이벤트: 새 고객 답장
조건: 없음
작업: 스크립트 실행

```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;
}
}
}
```