워크플로우 (트리거)
트리거 가이드
데이터가 변경될 때 자동으로 작업을 실행하는 트리거 기능을 안내합니다. 예약이 확정되면 메시지를 보내거나, 고객 정보가 변경되면 외부 시스템에 알림을 보내는 등의 자동화를 설정할 수 있습니다.
1. 트리거란?
"~하면 ~한다" 규칙을 설정하는 기능입니다.
- "예약이 확정되면 → 고객에게 확인 메시지를 보낸다"
- "새 고객이 등록되면 → 환영 메시지를 보낸다"
- "고객 상태가 VIP로 변경되면 → CRM에 알린다"
트리거는 감시 대상, 조건, 실행할 작업 세 가지로 구성됩니다.
2. 감시 대상 (어떤 데이터를 감시할까?)
현재 트리거를 설정할 수 있는 데이터는 3가지입니다.
| 감시 대상 | 설명 | 활용 예시 |
|---|---|---|
| 고객 (organization_customers) | 고객 정보의 생성/변경 | 신규 고객 등록, 등급 변경, 연락처 업데이트 |
| 예약 (reservations) | 예약의 생성/변경 | 예약 접수, 확정, 취소, 날짜 변경 |
| 채팅 (chat_sessions) | 채팅 세션의 생성/변경 | 새 상담 시작, 채팅 종료 |
감시 이벤트
| 이벤트 | 설명 |
|---|---|
| 새로 생성 (insert) | 데이터가 새로 만들어질 때 |
| 변경 (update) | 기존 데이터가 수정될 때 |
| 생성 또는 변경 (upsert) | 둘 다 감시 |
3. 조건 (언제 실행할까?)
감시 대상의 모든 변경에 반응하면 너무 많은 작업이 실행됩니다. **조건(필터)**을 설정하면 특정 상황에서만 트리거가 실행됩니다.
조건 연산자
| 연산자 | 의미 | 예시 |
|---|---|---|
eq | 값이 ~와 같을 때 | 상태가 "confirmed"일 때 |
neq | 값이 ~와 다를 때 | 상태가 "cancelled"가 아닐 때 |
in | 값이 목록 중 하나일 때 | 상태가 ["confirmed", "completed"] 중 하나일 때 |
not_in | 값이 목록에 없을 때 | 상태가 ["cancelled", "no_show"]가 아닐 때 |
changed | 값이 변경되었을 때 | 상태 필드가 바뀌었을 때 (어떤 값이든) |
changed_to | 특정 값으로 변경되었을 때 | 상태가 "confirmed"로 변경되었을 때 |
changed_from | 특정 값에서 변경되었을 때 | 상태가 "pending"에서 변경되었을 때 |
is_null | 값이 비어있을 때 | 이메일이 없는 고객 |
is_not_null | 값이 있을 때 | 전화번호가 있는 고객 |
contains | 값에 특정 문자가 포함될 때 | 메모에 "VIP"가 포함된 고객 |
조건 조합
- 모두 만족 (AND): 설정한 조건을 전부 충족해야 실행
- 하나라도 만족 (OR): 조건 중 하나만 충족해도 실행
조건 설정 예시
"예약이 확정되었을 때":
감시 대상: 예약
이벤트: 변경
조건 (모두 만족):
- status가 "confirmed"로 변경되었을 때 (changed_to)"VIP 고객이 새로 등록되었을 때":
감시 대상: 고객
이벤트: 새로 생성
조건 (모두 만족):
- form_data.grade 값이 "vip"일 때 (eq)"예약이 취소되거나 노쇼일 때":
감시 대상: 예약
이벤트: 변경
조건 (하나라도 만족):
- status가 "cancelled"로 변경 (changed_to)
- status가 "no_show"로 변경 (changed_to)4. 실행할 작업 (무엇을 할까?)
조건이 충족되면 자동으로 실행되는 작업입니다.
| 작업 종류 | 설명 | 예시 |
|---|---|---|
| 메시지 발송 | 고객에게 템플릿 메시지 발송 | 예약 확인, 리마인더, 내원 후 안내 |
| 데이터 변경 | 관련 데이터를 자동 수정 | 고객 등급 자동 변경, 방문 횟수 업데이트 |
| 외부 알림 | 외부 시스템에 웹훅 전달 | CRM 연동, 슬랙 알림, 외부 API 호출 |
5. 실전 활용 시나리오
5.1 예약 확정 → 확인 메시지 발송
트리거 이름: 예약 확정 알림
감시 대상: 예약
이벤트: 변경
조건: status가 "confirmed"로 변경
작업: "예약 확인" 템플릿 메시지 발송고객이 받는 메시지:
"홍길동님, 3월 5일 오후 2시 예약이 확정되었습니다."
5.2 예약일 하루 전 → 리마인더 발송
트리거 이름: 예약 리마인더
감시 대상: 예약
이벤트: 변경 (시스템이 예약일 하루 전에 상태를 "reminder_sent"로 변경)
조건: reminder_status가 "pending"에서 변경
작업: "예약 리마인더" 템플릿 메시지 발송5.3 새 고객 등록 → 환영 메시지
트리거 이름: 신규 고객 환영
감시 대상: 고객
이벤트: 새로 생성
조건: 없음 (모든 신규 고객)
작업: "환영 인사" 템플릿 메시지 발송5.4 고객 등급 변경 → VIP 안내
트리거 이름: VIP 승급 안내
감시 대상: 고객
이벤트: 변경
조건: form_data.grade가 "vip"로 변경
작업: "VIP 혜택 안내" 템플릿 메시지 발송5.5 예약 취소 → 내부 알림
트리거 이름: 예약 취소 알림
감시 대상: 예약
이벤트: 변경
조건: status가 "cancelled"로 변경
작업: 슬랙/내부 시스템에 웹훅 알림6. 트리거 설정 방법
관리자 페이지에서 설정
- 트리거 메뉴로 이동
- 새 트리거 만들기 클릭
- 아래 항목을 설정합니다:
| 항목 | 설명 |
|---|---|
| 이름 | 트리거 구분용 이름 (예: "예약 확정 알림") |
| 설명 | 선택사항. 트리거의 목적 설명 |
| 감시 대상 | 고객 / 예약 / 채팅 중 선택 |
| 이벤트 | 새로 생성 / 변경 / 생성 또는 변경 |
| 조건 | 필터 규칙 설정 (선택사항. 비워두면 모든 이벤트에 반응) |
| 활성화 | ON/OFF 토글로 즉시 활성화/비활성화 가능 |
조건 입력 형식
조건은 JSON 형식으로 입력합니다:
모두 만족 (AND):
{
"all": [
{ "field": "status", "op": "changed_to", "value": "confirmed" }
]
}하나라도 만족 (OR):
{
"any": [
{ "field": "status", "op": "changed_to", "value": "cancelled" },
{ "field": "status", "op": "changed_to", "value": "no_show" }
]
}중첩 필드 (커스텀 필드 등):
{
"all": [
{ "field": "form_data.grade", "op": "changed_to", "value": "vip" }
]
}7. 실행 이력 확인
트리거가 실행될 때마다 자동으로 기록됩니다.
| 항목 | 설명 |
|---|---|
| 실행 시각 | 트리거가 실행된 시간 |
| 상태 | 성공 / 실패 / 대기 |
| 대상 데이터 | 어떤 예약/고객이 트리거를 발동시켰는지 |
| 응답 | 작업 실행 결과 |
| 소요 시간 | 실행에 걸린 시간 (ms) |
실행 이력을 통해 트리거가 정상적으로 작동하고 있는지, 실패한 경우 원인이 무엇인지 확인할 수 있습니다.
8. 트리거 + 템플릿 메시지 연동 흐름
트리거와 템플릿 메시지를 함께 사용하면 완전한 자동화가 가능합니다.
[데이터 변경 발생]
↓
[트리거 조건 확인] → 조건 불일치 → 종료
↓ 조건 일치
[작업 실행: 템플릿 메시지 발송]
↓
[발송 경로 결정]
├─ 카카오 로그인 고객 → 친구톡 발송
├─ 전화번호만 있는 고객 → RCS → SMS 폴백
└─ 연락처 없음 → 발송 실패 (로그 기록)9. 주의사항
| 항목 | 내용 |
|---|---|
| 조건 없는 트리거 | 조건을 비워두면 해당 이벤트의 모든 변경에 반응합니다. 의도치 않은 대량 발송에 주의하세요 |
| 비활성화 활용 | 테스트 후 바로 비활성화하고, 확인 후 활성화하는 것을 권장합니다 |
| 중복 트리거 | 같은 조건의 트리거가 여러 개 있으면 작업이 중복 실행될 수 있습니다 |
| 실행 시간 제한 | 외부 웹훅 호출은 10초 내에 응답해야 합니다. 초과 시 타임아웃으로 기록됩니다 |
| 커스텀 필드 조건 | 고객의 커스텀 필드를 조건으로 사용하려면 form_data.필드명 형식으로 입력합니다 |