Zapier를 통해 Klaviyo로 동의를 전송하는 방법
학습 내용
SMS 동의를 Klaviyo로 전송하기 위한 맞춤 Zapier 웹후크를 만드는 방법을 알아보세요. 이 가이드의 지침을 간단히 수정해 이메일 수신 동의도 함께 보낼 수 있어요.
아래 단계에 따라 Python 스크립트 작업을 트리거하는 웹후크(캐치 훅이라고도 함)를 사용해 Zap을 만들 수 있어요. 이 샘플은 SMS 마케팅 동의를 업데이트해요. 요청에 이메일 주소를 포함해도 프로필이 이메일 마케팅을 구독하는 것은 아니에요.
이 설정을 사용하려면 Zapier의 웹후크가 포함된 유료 Zapier 요금제가 필요해요.
연동 정보
이 연동은 Klaviyo에서 완전히 지원하지 않지만, 필요하다면 대안으로 사용할 수 있어요. 이 연동을 지원할 수 있는 개발자가 팀에 있는 경우에만 사용하시는 것을 권장해요.
이 가이드는 트리거가 감지되면 Python 스크립트를 실행하는 Zapier 코드 작업을 사용합니다. 이 솔루션을 사용하면 Klaviyo 엔드포인트에서 요구하는 데이터 유형에 필드를 매핑할 수 있으며, 특히 프로필 구독 및 프로필 구독 취소 엔드포인트에 해당합니다.
시작하기 전에 알아야 할 것
테스트 수신자의 국가에 맞는 발신 번호로 Klaviyo에서 SMS를 설정해 주세요. 직접 관리하는 실제 휴대폰 번호와 이메일 주소를 사용해 주세요. 코드 작업을 테스트하면 Klaviyo 계정에서 동의 상태가 변경돼요.
lists:write, profiles:write, subscriptions:write 권한이 있는 Klaviyo 비공개 API 키를 준비해 주세요. 계정의 API 키를 관리하는 방법을 확인해 보세요.
계정에서 SMS 연령 제한을 사용 중이라면, 이 샘플을 사용하기 전에 구독 요청에 age_gated_date_of_birth을(를) 포함하도록 확장해 주세요. 아래 예시는 생년월일을 수집하거나 전송하지 않아요.
Zapier 웹후크 설정
Zapier의 현재 설정 방법은 웹후크 트리거 및 Python 코드 작업 안내서를 확인해 주세요.
- Zapier 계정에 로그인합니다.
- Zapier 메인 페이지에서 +생성을 선택한 다음 Zap을 선택해 주세요.
- 새 Zap의 이름을 입력하세요(예: Klaviyo 웹후크).
- 트리거 단계를 클릭한 다음 Zapier의 웹후크를 검색해 선택해 주세요.

- 이벤트 드롭다운 메뉴에서 Catch Hook을(를) 선택해 주세요.

- 계속을 클릭합니다. 이 가이드에서 사용하는 플랫 테스트 데이터의 경우 하위 키 선택을 비워 둔 다음 계속을 다시 클릭해 주세요.
- 테스트 탭을 선택하세요.
- 요청을 보낼 수 있도록 Zapier에서 제공하는 웹후크 URL을 복사하세요.

- 동의 수집 앱을 구성하여 동의 변경 내용을 이 웹후크 URL로 전송하도록 설정하세요. 여기에는 아래에서 사용되는
email,phone_number,sms_consent필드가 포함돼요. 해당 앱의 문서를 따라 발신 웹후크를 설정하세요. - 테스트하기 전에 웹후크로 테스트 데이터를 전송해야 해요. 자세한 내용은 Zapier로 테스트 데이터를 전송하는 방법 가이드를 참고해 주세요. 테스트 데이터를 전송할 때 + 기호와 국가 코드를 포함해 전화번호를 E.164 형식으로 형식을 지정 했는지 확인해 주세요.
- 테스트 데이터를 웹후크로 전송한 후 테스트 탭에서 트리거 테스트를 클릭해 주세요.

- 요청이 성공하면 성공 메시지가 표시되고, 아래 예시와 비슷하게 성공 메시지 아래에 테스트 데이터가 채워져요:

- 트리거가 작동하면 선택한 레코드로 계속을 클릭하세요.
Zapier 작업 설정
- 작업 단계(action step)를 추가한 다음 Code by Zapier를 검색해 선택해 주세요.

- 이벤트 드롭다운 메뉴에서 Python 실행을 선택하세요.

- 계속을 클릭합니다.
필드 매핑을 설정하고 스크립트 로직을 만들기
- 입력 데이터에서
email,phone_number,sms_consent를 테스트 데이터의 해당 필드에 매핑해 주세요. 키는 표시된 대로 정확히 입력해 주세요. 예시 데이터의name필드는 이 스크립트에서 사용되지 않아요.

데이터 입력 | 테스트 데이터 매핑됨 |
| 1. 이메일: <Test email> |
| 1. 전화번호: <Test phone number> |
| 1. Sms_consent: true |
| 1. 이름: <Test name> |
명시적으로 SMS 마케팅 수신에 동의한 경우에만 true을(를) 전송해 주세요. SMS 구독 취소 요청이 있는 경우에만 false을(를) 전송해 주세요. 을(를) 보내면 계정 전반에서 SMS 마케팅 동의가 철회되고 선택한 리스트에서 프로필이 제거돼요. 동의 값이 비어 있거나 알 수 없는 경우에는 false을(를) 사용하지 마세요.
- 아래 예시와 같은 스크립트를 코드 상자에 추가하세요:
import requests
sms_consent = str(input_data.get("sms_consent", "")).strip().lower()
if sms_consent not in ("true", "false"):
raise ValueError("sms_consent must be true or false")
# Configure the SMS marketing subscribe or unsubscribe request.
if sms_consent == "true":
url = "https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs/"
payload = {
"data": {
"type": "profile-subscription-bulk-create-job",
"attributes": {
"profiles": {
"data": [{
"type": "profile",
"attributes": {
"email": input_data["email"],
"phone_number": input_data["phone_number"],
"subscriptions": {
"sms": {"marketing": {"consent": "SUBSCRIBED"}}
}
}
}]
}
},
"relationships": {
"list": {"data": {"type": "list", "id": "LIST_ID"}}
}
}
}
else:
url = "https://a.klaviyo.com/api/profile-subscription-bulk-delete-jobs/"
payload = {
"data": {
"type": "profile-subscription-bulk-delete-job",
"attributes": {
"profiles": {
"data": [{
"type": "profile",
"attributes": {
"email": input_data["email"],
"phone_number": input_data["phone_number"],
"subscriptions": {
"sms": {"marketing": {"consent": "UNSUBSCRIBED"}}
}
}
}]
}
},
"relationships": {
"list": {"data": {"type": "list", "id": "LIST_ID"}}
}
}
}
headers = {
"accept": "application/json",
"revision": "2026-07-15",
"content-type": "application/json",
"Authorization": "Klaviyo-API-Key your-private-api-key"
}
response = requests.post(url, json=payload, headers=headers, timeout=10)
response.raise_for_status()
# Zapier requires an output object.
output = {
"status_code": response.status_code,
"response text": response.text
}your-private-api-key을(를) Klaviyo 비공개 API 키로 바꾸세요.
비공개 API 키는 비밀번호처럼 취급해 안전한 곳에 보관하고 절대 공개하지 마세요.
- 두 위치 모두에서
LIST_ID을(를) Klaviyo 목록 ID로 바꿔 주세요. Klaviyo에서 대상 > 목록 및 세그먼트로 이동한 다음, 목록을 열고 설정 > 세부 정보를 선택해 목록 ID를 복사하세요. - 해당 리스트의 설정 > 동의 > 옵트인 프로세스를 확인해 주세요. 확인 없이 구독하려면 단일 옵트인을 선택한 다음 저장을 클릭해 주세요. 이중 옵트인을 사용하는 경우, 구독을 확인하기 전에 테스트 번호로 전송된 모든 SMS 확인을 완료해 주세요.
- 계속을 클릭한 다음, 단계 테스트를 클릭해 주세요.
- 출력에
status_code202이(가) 표시되는지 확인해 주세요. 즉, Klaviyo에서 처리하기 위해 요청을 수락했다는 의미이며, 동의가 업데이트를 완료했다는 것을 확인하는 것은 아니에요. 응답 본문은 비어 있는 것이 정상이에요.

- Klaviyo에서 선택한 리스트에 테스트 프로필이 추가되었는지 확인한 다음, 프로필을 열고 SMS 마케팅을 구독하고 있는지 확인해 주세요. 확인 메시지가 전송되었다면, 먼저 해당 확인을 완료해 주세요.

- 동일한 테스트 프로필로 구독 취소 경로를 테스트해 보세요.
sms_consent을(를)false(으)로 설정한 새 웹후크 요청을 보낸 다음, Zapier에서 해당 새 트리거 레코드를 선택하고 코드 단계를 다시 테스트해 보세요. Klaviyo에서 해당 프로필이 SMS 마케팅에서 구독 취소되었고 선택한 리스트에서 제거되었는지 확인해 보세요. - 두 테스트가 모두 성공하면 게시를 클릭해 Zap을 게시해 주세요. 테스트가 성공하지 않으면 일반적인 문제에 대한 문제 해결 팁을 확인해 보세요.
이메일 동의 예시를 상황에 맞게 조정해 주세요
이 Zap의 이메일 전용 버전은 다음을 확인해 주세요:
- 소스에서
email_consent입력을 매핑한 다음 스크립트 전체에서sms_consent을(를)email_consent(으)로 바꿔 주세요. 명시적인 이메일 마케팅 수신 동의에는true을(를) 사용하고 이메일 구독 취소 요청에는false을(를) 사용해 주세요. - 두 요청 페이로드 모두에서
subscriptions아래의sms키를email(으)로 바꿔 주세요. 수신자의email필드는 유지하고, 두 페이로드 모두에서phone_number필드는 제거해 주세요. - Zap의 이메일 버전을 게시하기 전에 이메일 동의 경로를 둘 다 테스트해 주세요. 프로필에서 이메일 동의를 확인하고, 구독 테스트 중에 전송된 이메일 수신 동의 확인을 모두 완료해 주세요.
문제 해결 팁
다음은 Zapier 웹후크를 설정할 때 흔히 겪을 수 있는 문제예요. 그 밖의 문제가 발생하면 추가 안내를 위해 Klaviyo 커뮤니티에 문의할 수 있어요.
문자열 리터럴을 스캔하는 동안 EOL
이 오류가 표시되면 변수 중 하나를 따옴표로 감싸는 따옴표가 누락된 거예요. 목록 ID와 비공개 API 키가 양쪽 모두 따옴표로 감싸져 있는지 확인해 주세요.
SyntaxError: 잘못된 구문
이 오류가 표시되면 코드의 줄바꿈, 들여쓰기, 따옴표, 대괄호가 샘플과 일치하는지 확인해 주세요. 특히 url 및 payload 할당은 서로 다른 줄에 있어야 해요. # (으)로 시작하는 줄은 유효한 Python 주석이므로 제거할 필요가 없어요.
추가 자료
- 계정의 API 키를 관리하는 방법
Klaviyo 계정의 API 키에 액세스하고 관리하는 방법을 알아보세요.
- Zapier에 테스트 데이터를 보내는 방법
Klaviyo에 이메일 및 SMS 동의를 전송하는 웹후크를 만들 때 POST 요청을 통해 테스트 데이터를 Zapier로 보내는 방법을 알아보세요.