POST /segments(그룹 만들기)와 POST /segments/preview(저장하지 않고 규칙에 맞는 연락처 수만 세기)에 보내는 filter 객체입니다.
규칙의 구조
세 목록은 다음과 같이 합쳐집니다. 연락처가
conditions(operator로 이어짐)에 일치하고, 그리고 requiredConditions의 모든 조건에 일치하고, 그리고 excludeConditions의 어떤 조건에도 일치하지 않으면 그룹에 속합니다. 비어 있거나 생략된 목록은 건너뜁니다. excludeConditions만 있으면, 그 조건에 일치하는 연락처를 뺀 모든 연락처가 그룹이 됩니다.
- 목록 하나에는 조건을 최대 20개까지 넣을 수 있습니다. 더 길면
400 VALIDATION_ERROR입니다. - 규칙에는 세 목록을 통틀어 조건이 하나 이상 있어야 합니다. 하나도 없으면
422 EMPTY_FILTER로 거부됩니다. - 알 수 없는 키는 규칙과 모든 조건에서 거부됩니다(
400 VALIDATION_ERROR,message에 잘못된 키의 경로가 표시됩니다). 조건 타입별로 이 페이지에 나온 키만 보내세요. - 조건은
field로 타입을 지정하는 객체입니다. 가능한 타입은 모두 아래에 있으며, 타입마다 쓰는 키가 다릅니다. - 일부 조건은 특정 목록에서 거부됩니다(아래 “일부 목록에서 거부되는 조건” 참고). 이런 조건은
422 CONDITION_NOT_SUPPORTED를 받습니다. - 수신 거부한 연락처는 규칙과 상관없이 어떤 그룹의 멤버도 되지 않습니다.
- 기간(
withinDays, 일 수를 뜻하는value등)은 규칙을 평가하는 시점부터 거슬러 셉니다. 그래서 같은 규칙도 시간이 지나면 다른 연락처와 일치합니다. - “한 적 없음” 형태의 연산자(
not_viewed,not_clicked,not_enrolled)는 기록이 전혀 없는 연락처도 포함합니다. 중요한 경우에는 아래 각 항목에 따로 적어 두었습니다.
조건에 쓰는 id
일부 조건은 내 문서, 상품, 폴더, 1회성 발송, 그룹을 id로 가리킵니다. 모든 id는 내 계정에 있는지 확인합니다. 내 계정에 없는 id는422 REFERENCE_NOT_FOUND이며, details.path(규칙 안의 위치)와 details.kind(document, product, tier, cta, folder, broadcast, step 중 하나)가 함께 옵니다. 내 계정에 없는 태그를 지정한 tag 조건은 422 TAG_NOT_FOUND(details.tag)를 받습니다. 내 계정에 없는 그룹을 지정한 group_membership 조건은 422 GROUP_REFERENCE_NOT_FOUND(details.groupIds)를 받습니다. UUID가 아닌 id는 400 VALIDATION_ERROR입니다.
id가 선택이면 생략할 때 조건이 “계정 어디서든”으로 넓어집니다(예:
documentId 없는 document_view는 내 모든 문서를 뜻합니다). id를 생략한 형태의 의미는 각 항목에 적어 두었습니다.
조건 타입
tag
내 태그를 가진(또는 가지지 않은) 연락처입니다. 태그는 정확한 이름으로 찾습니다.
document_view
내 문서를 본(또는 본 적 없는) 연락처입니다. 어떤 문서인지, 얼마나 최근인지, 몇 번인지, 어디까지 읽었는지로 범위를 좁힐 수 있습니다.
- 기간(
withinDays, 또는viewedFrom과viewedTo)을 지정하면, 가장 최근 조회가 그 기간 안에 있을 때 본 것으로 칩니다.minCount와minScrollPct는 전체 기간 기준 값입니다. 기간은 최근 여부만 정하므로, “30일 안에 3번 조회”는 전체 조회가 3번 이상이고 마지막 조회가 최근 30일 안이라는 뜻입니다. - 그 문서가 들어 있는 폴더나 코스를 방문한 것도 문서를 본 것으로 칩니다.
minScrollPct는 문서를 직접 본 경우만 세고 폴더 방문은 세지 않습니다. withinDays는viewedFrom/viewedTo와 함께 쓸 수 없습니다.viewedFrom과viewedTo는 함께 써야 하고,viewedFrom은viewedTo와 같거나 이전이어야 합니다.minCount와minScrollPct는viewed에 쓰는 옵션입니다.not_viewed와 쓰면 받아들여지며 뜻이 뒤집힙니다. 그 횟수나 깊이에 이른 조회가 없는 연락처가 됩니다.
consent
마케팅 메시지 수신에 동의했는지로 나눕니다.
cta_click
내 문서의 CTA(행동 유도) 버튼을 누른(또는 누른 적 없는) 연락처입니다.
- 범위는 지정한 id가 정합니다.
ctaId는 그 버튼,documentId는 그 문서의 아무 버튼, 둘 다 없으면 내 모든 문서의 아무 버튼입니다. ctaId와documentId는 둘 중 하나만 보내세요.
email_open
내 1회성 발송과 자동화 이메일을 연(또는 열지 않은) 연락처입니다. 영수증 같은 거래 이메일은 포함되지 않습니다.
- 범위는 지정한 id가 정합니다. 1회성 발송, 자동화 단계, 또는 둘 다 없으면 모든 1회성 발송과 자동화 이메일입니다.
sent_not_opened에는broadcastId또는stepId가 필요합니다.sinceSentDays는sent_not_opened에서만 쓸 수 있습니다. 쓰지 않으면 아직 발송 대기 중인 이메일도 보낸 것으로 치고, 쓰면 그 일수 이전에 이미 발송된 이메일만 셉니다.minCount는broadcastId,stepId와 함께 쓸 수 없습니다.
email_link_click
내 1회성 발송과 자동화 이메일의 링크를 누른(또는 누르지 않은) 연락처입니다. 내 콘텐츠로 가는 링크만 셉니다. 수신 거부 링크는 세지 않습니다.
- 범위는 지정한 id가 정합니다. 1회성 발송, 자동화 단계, 또는 둘 다 없으면 모든 1회성 발송과 자동화 이메일입니다.
broadcastId와stepId는 둘 중 하나만 보내세요.
has_phone
전화번호가 있는지로 나눕니다.
form_submission
내 폼을 제출한(또는 제출한 적 없는) 연락처입니다. 폼 하나를 고르는 방법은 없고, 모든 폼이 대상입니다.
payment_status
결제가 완료되거나 실패하거나 환불될 때 연락처에 기록되는 결제 상태로 나눕니다.
first_seen
연락처가 처음 나타난 시점(첫 조회, 방문, 제출)이 얼마나 오래되었는지로 나눕니다.
last_active
연락처가 내 콘텐츠를 마지막으로 보거나 방문한 시점으로 나눕니다. 문서와 폴더 방문만 셉니다. 이메일을 열거나 링크를 누른 것은 세지 않습니다.
group_membership
내 다른 그룹에 속한(또는 속하지 않은) 연락처입니다.
tier_access
내 상품을 구매해 지금 이용 권한이 있는(또는 없는) 연락처입니다.
- 범위는 지정한 id 하나가 정합니다.
productId,tierId,documentId,saleStatus를 모두 생략하면 내 모든 상품이 대상입니다. productId,tierId,documentId,saleStatus는 최대 하나만 보내세요.expiringWithinDays는expiring_within_days에서 필수이며, 다른 연산자에서는 생략해야 합니다.
days_since_purchase
상품을 결제한 지 얼마나 되었는지로 나눕니다.
- 결제한 적 없는 연락처는 어느 연산자에도 일치하지 않습니다.
- 범위는 지정한 id 하나가 정합니다.
productId,tierId,documentId,saleStatus를 모두 생략하면 내 모든 상품이 대상입니다. 넷 중 최대 하나만 보내세요. - 전액 환불된 주문은 결제된 것으로 치지 않습니다.
repeat_bounce
이메일 주소가 계속 실패하는 연락처입니다.
course_last_access
폴더나 코스 하나를 얼마나 최근에 방문했는지로 나눕니다.
kakao_reachable
카카오 메시지를 보낼 수 있는 연락처입니다.
course_progress
폴더나 코스 하나를 얼마나 완료했는지로 나눕니다.
location
방문 기록에서 얻은 국가, 그리고 선택적으로 도시로 나눕니다.
checkout_abandoned
상품 하나의 결제를 시작했지만 끝내지 않은 연락처입니다. 반대 연산자는 없습니다.
일부 목록에서 거부되는 조건
일부 조건 형태는422 CONDITION_NOT_SUPPORTED로 거부됩니다. details.path는 그 조건의 위치, details.operator는 그 조건의 연산자이고, 같은 결과를 내는 연산자가 있으면 details.invertTo에 담기며 그 연산자를 requiredConditions에 넣으면 됩니다. 여기에 없는 경우는 모든 목록에서 그대로 쓸 수 있습니다.
다른 모든 조건과, 위 조건이라도 다른 연산자나 범위로 쓰는 경우는 모든 목록에서 그대로 쓸 수 있습니다.
아직 지원하지 않는 조건
custom_field 조건은 받지 않습니다. 이 조건이 들어 있는 규칙은 422 CONDITION_NOT_SUPPORTED로 거부되며, details.field에 조건 타입이, details.path에 그 위치가 담깁니다.