# RevenueCat + Brew

Apple, Google, Amazon, Stripe, Web Billing 전반의 RevenueCat 인앱 구매, 구독, 결제 이벤트로 Brew 자동화를 트리거하세요. RevenueCat Pro 이상 요금제가 필요해요.

정식 URL: https://brew.new/ko/browse/integrations/revenuecat

- 방향: 데이터 가져오기
- 연결 방식: 웹훅 시크릿
- 인앱 구매 + 구독 이벤트

## 사용 가능한 기능

- **이벤트 트리거**: Apple, Google, Amazon, Stripe, Web Billing 전반의 RevenueCat 인앱 구매, 구독, 결제 이벤트로 Brew 자동화를 트리거해요.

## 구독 이벤트를 유용한 이메일로 바꾸세요

RevenueCat을 연결하면 앱에서 누군가 구매하거나, 구독을 갱신하거나, 해지하거나, 결제 문제가 생길 때 브랜드에 맞는 이메일을 보낼 수 있어요. Brew는 RevenueCat 라이프사이클 이벤트 11개를 지원하며, 하나의 플로우로 App Store, Google Play, Amazon, Stripe, Web Billing 구독자 모두에게 대응할 수 있어요.

구매, 갱신, 환불, 이용 권한은 계속 RevenueCat과 각 스토어가 담당해요. Brew는 이메일을 만들고 보내요.


## 만들 수 있는 것

- 구독자 웰컴 이메일: INITIAL_PURCHASE 이벤트는 체험 시작을 포함해 새 구독이 시작되면 발생해요. 일회성 구매는 대신 NON_RENEWING_PURCHASE 이벤트로 들어와요.
- 갱신 영수증: RENEWAL 이벤트는 구독이 갱신되거나 구독이 끊겼던 구독자가 다시 구독하면 발생하며, productId, priceUsd, pricePurchaseCurrency, currency를 담고 있어요.
- 결제 문제 안내: BILLING_ISSUE 이벤트는 결제가 실패하면 발생해요. 구독자가 결제 수단을 업데이트할 수 있는 곳으로 연결하세요.
- 해지 후속 이메일: CANCELLATION 이벤트에는 cancelReason이 담겨 있어서, 이메일에서 환불이나 결제 오류로 인한 해지를 구독자가 직접 해지한 경우와 구분해 다룰 수 있어요.
- 복귀 환영 이메일: UNCANCELLATION 이벤트는 해지된 구독이 만료되기 전에 구독자가 구독을 되살리면 발생해요.
- 이용 종료 후 재참여 이메일: EXPIRATION 이벤트는 구독이 실제로 끝나면 발생하며 expirationReason을 담고 있어요.
- 요금제 변경 안내: PRODUCT_CHANGE 이벤트에는 previousProductId와 newProductId가 담겨 있어요. 새 상품은 나중에 적용될 수 있으니, 이메일에서는 변경 요청이 접수됐다고 안내하세요.
- 일시 중지 및 연장 안내: SUBSCRIPTION_PAUSED 이벤트는 Google Play 구독이 현재 기간이 끝날 때 일시 중지되도록 예약되면 발생해요. SUBSCRIPTION_EXTENDED 이벤트는 스토어가 구독 기간을 연장하거나 Google Play가 청구를 미루면 발생해요.

## 해지가 곧 이용 종료는 아니에요

CANCELLATION 이벤트는 구독 해지나 환불을 뜻할 수 있으며, 그것만으로 이용이 끝났다는 뜻은 아니에요. 이용이 끝났음을 알리는 이벤트는 EXPIRATION이에요. SUBSCRIPTION_PAUSED 이벤트는 앞으로의 일시 중지를 예약할 뿐이에요.

윈백 이메일이나 해지 설문 이메일에는 CANCELLATION을, 이용이 끝났다고 전제하는 이메일에는 EXPIRATION을 사용하세요. UNCANCELLATION 이벤트가 들어와도 해지로 이미 시작된 실행은 멈추지 않으니, 이후에 보내는 이메일마다 그 앞에 revenuecat_subscription_status를 확인하는 조건을 추가하세요.

environment로 필터링해 SANDBOX 이벤트가 활성 자동화에 들어가지 않게 하세요.


## Brew에서 RevenueCat 설정하기

- RevenueCat 웹훅을 쓰려면 RevenueCat Pro 이상 요금제가 필요해요.
- ‘연동’을 열고 RevenueCat을 선택한 다음 ‘웹훅 URL 생성’을 누르세요.
- RevenueCat의 Integrations > Webhooks에서 구성을 추가하세요. Brew URL을 붙여 넣고, Production, Sandbox 또는 둘 다를 고른 다음, 보낼 라이프사이클 이벤트를 선택하세요.
- 그 구성에서 HMAC 웹훅 서명을 켜고 서명 시크릿을 바로 복사하세요. RevenueCat은 시크릿을 한 번만 보여 줘요. 시크릿을 Brew에 붙여 넣고 ‘연결’을 누르세요. RevenueCat REST API 키나, 선택 항목인 Authorization 헤더 값은 붙여 넣지 마세요.
- RevenueCat에서 테스트 웹훅을 보내세요. 서명된 TEST 이벤트는 연결을 활성화하지만, 고객 대상 자동화는 시작하지 않아요.
- Brew가 보낼 주소를 알 수 있도록 고객마다 $email 구독자 속성을 설정하세요.
- ‘연결’을 누르면 이벤트 11개 모두에 대한 트리거가 만들어져요. 이벤트별로 켜고 끄는 스위치는 없어요. 자동화를 만들고 RevenueCat 이벤트를 선택한 다음, 아직 초안일 때 테스트를 보내 보세요. 일치하는 이벤트가 도착하면 활성 상태인 자동화만 실행돼요.

## 지원되는 RevenueCat 이벤트

Brew는 다음 이벤트 유형 11개를 지원해요:

- INITIAL_PURCHASE
- RENEWAL
- NON_RENEWING_PURCHASE
- PRODUCT_CHANGE
- CANCELLATION
- UNCANCELLATION
- EXPIRATION
- BILLING_ISSUE
- SUBSCRIPTION_PAUSED
- SUBSCRIPTION_EXTENDED
- TRANSFER

## 연락처 동기화와 개인화

Brew는 먼저 $email 구독자 속성에서 수신자를 읽고, 없으면 이메일 형식의 앱 사용자 ID, 원래 앱 사용자 ID, 별칭을 대신 사용해요. RevenueCat 별칭은 앱 사용자 ID의 이력이므로, 별칭에 기대지 말고 $email을 명시적으로 설정하세요. 이 필드 어디에도 실제 주소가 없으면 Brew는 이벤트를 수신자를 찾지 못한 이벤트로 기록하고, 연락처를 만들지 않으며 자동화도 시작하지 않아요.

실제 이메일 주소가 담긴 검증된 이벤트는 자동화에서 쓰이는지와 관계없이, 이메일 주소를 기준으로 Brew 연락처를 만들거나 업데이트해요. 데이터가 있으면 Brew가 revenuecat_app_user_id, revenuecat_store, revenuecat_environment를 설정해요.

라이프사이클 이벤트는 revenuecat_subscription_status를 active, cancelled, expired, billing_issue, pause_scheduled 중 하나로 설정해요. 이벤트에 값이 있으면 Brew는 revenuecat_product_id, revenuecat_cancel_reason, revenuecat_expiration_reason, revenuecat_last_purchase_at, revenuecat_pending_product_id도 저장해요.

개인화 태그에는 선택한 이벤트에 선언된 페이로드 스키마를 사용하세요. 모든 이벤트에는 값이 있는 경우 email, productId, priceUsd, pricePurchaseCurrency, currency, store, environment, createdAt이 포함돼요. priceUsd는 USD 기준 가격이고, pricePurchaseCurrency는 currency에 지정된 통화 기준 가격이에요. RevenueCat 페이로드에는 이름과 성이 들어 있지 않아요.

store에는 APP_STORE나 PLAY_STORE처럼 RevenueCat이 보낸 값이 그대로 들어가며, RevenueCat이 새 값을 추가할 수도 있어요. 필요한 값으로만 매칭하세요.

구매만으로는 마케팅 이메일 수신 동의가 성립하지 않아요. 수신 동의는 따로 기록하고, 프로모션 이메일을 보내기 전에 확인하세요.


## TRANSFER 이벤트로는 왜 이메일이 발송되지 않나요?

RevenueCat은 TRANSFER 이벤트를 앱 사용자 ID만 담아 보내고, 수신자 이메일은 보내지 않아요. Brew는 이 이벤트를 수신자를 찾지 못한 것으로 기록하고 자동화를 시작하지 않아요.


## 이벤트는 들어왔는데 이메일이 발송되지 않는 이유는 뭔가요?

이벤트 수신과 이메일 발송은 별개의 단계예요. 일치하는 자동화가 활성 상태인지 확인한 다음, 필터와 실행 기록, 수신자가 발송 대상인지, 발신 도메인을 확인하세요. TEST 이벤트는 자동화를 시작하지 않아요. 수신자를 찾지 못했다면 먼저 $email을 확인하세요. Brew는 이메일 형식의 앱 사용자 ID, 원래 앱 사용자 ID, 별칭도 받아들여요.


## 제한 사항 및 문제 해결

- Brew는 이용 권한을 부여하거나 취소할 수 없고, 환불하거나 구독을 변경할 수도 없어요.
- 서명 헤더가 없다는 401 오류는 보통 HMAC 서명이 꺼져 있거나, 서명 시크릿 대신 Authorization 값을 붙여 넣었다는 뜻이에요. HMAC 서명을 켜고 새 시크릿을 복사한 다음 다시 연결하세요.
- HMAC 불일치로 401 오류가 나면 Brew에 저장된 시크릿이 다르거나 오래된 거예요. RevenueCat에서 시크릿을 교체하면 이전 시크릿은 무효가 되므로, 새 값을 복사해 Brew를 다시 연결하세요.
- 웹훅이 전혀 들어오지 않으면 사용 중인 RevenueCat 요금제에 웹훅이 포함돼 있는지 확인하세요.
- 각 이메일의 수신 동의와 목적을 검토하세요. 구독자를 동기화했다고 해서 프로모션 이메일을 보내도 되는 건 아니에요.

## 출처 및 설정 가이드

- [RevenueCat 설정 가이드](https://docs.brew.new/integrations/import/revenuecat)
- [자동화 만들기](https://docs.brew.new/create-emails/build-an-automation)
- [개인화 태그](https://docs.brew.new/create-emails/merge-tags)
- [Brew로 보낼 수 있는 이메일](https://docs.brew.new/get-started/what-you-can-send)
- [RevenueCat 웹훅](https://www.revenuecat.com/docs/integrations/webhooks)
- [RevenueCat 고객 속성](https://www.revenuecat.com/docs/customers/customer-attributes)

## 관련 링크

- [전체 연동](https://brew.new/ko/browse/integrations.md)
- [회원가입](https://brew.new/ko/sign-up.md)
- 웹사이트: https://brew.new
