# Shopify + Brew

Shopify의 고객, 주문, 결제 페이지, 주문 처리 이벤트로 Brew 자동화를 트리거하세요. 웰컴, 영수증, 결제 이탈, 배송 플로우를 구동해요.

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

- 방향: 데이터 가져오기
- 연결 방식: 웹훅 시크릿
- 커머스 이벤트 트리거

## 사용 가능한 기능

- **이벤트 트리거**: Shopify의 고객, 주문, 결제 페이지, 주문 처리 이벤트로 Brew 자동화를 트리거해요. 웰컴, 영수증, 결제 이탈, 배송 플로우를 구동해요.

## 스토어 이벤트를 유용한 이메일로 바꾸세요

Shopify를 연결하면 고객이 가입하거나, 주문 결제가 완료되거나, 고객이 결제를 시작하거나, 주문 상품이 발송될 때 브랜드에 맞는 이메일을 보낼 수 있어요. Brew는 고객, 주문, 결제 페이지, 주문 처리에 걸친 Shopify 웹훅 이벤트 13개를 지원해요.

설정에는 Shopify 관리자에서 직접 만드는 웹훅을 사용해요. Shopify 앱, 클라이언트 ID, OAuth는 필요 없어요. 주문, 결제, 주문 처리는 계속 Shopify가 담당해요. Brew는 이메일을 만들고 보내요.


## 만들 수 있는 것

- 고객 웰컴 이메일: customers/create 이벤트는 Shopify에서 고객 레코드가 생성되면 발생해요.
- 주문 확인 및 영수증: orders/create 이벤트는 주문이 접수되면, orders/paid 이벤트는 결제가 완료되면 발생해요. 두 이벤트 모두 orderNumber, totalPrice, currency, financialStatus를 담고 있어요. 중복 발송을 막으려면 메시지마다 하나만 고르세요.
- 주문 취소 안내: orders/cancelled 이벤트는 주문이 취소되면 발생하며 주문 번호와 결제 상태를 담고 있어요.
- 배송 알림: fulfillments/create 이벤트에는 주문 처리에 추적 정보가 있으면 trackingNumber와 trackingUrl이 담겨요. orders/fulfilled 이벤트도 주문이 발송되면 발생하지만 추적 필드가 없으므로, 배송 이메일마다 트리거를 하나만 고르세요.
- 주문 처리 후속 이메일: fulfillments/update 이벤트는 주문 처리 정보가 바뀌면 발생해요. fulfillmentStatus는 pending, success, failure 같은 주문 처리 진행 상태이지, 배송 완료 확인이 아니에요. 배송 후 감사 이메일이나 리뷰 요청을 보내려면, 애플리케이션에서 배송 완료를 확인한 뒤에만 Brew 사용자 지정 이벤트를 보내세요.
- 결제 이탈 리마인더: checkouts/create 이벤트는 고객이 결제를 시작하면 발생하며, 중단한 결제를 다시 이어 갈 수 있는 링크인 abandonedCheckoutUrl을 담을 수 있어요.
- 고객이 같은 메시지를 양쪽에서 받지 않도록 Shopify 고객 알림과 조율하세요.

## 결제 이탈 리마인더에는 상태 확인이 필요해요

checkouts/create 이벤트는 고객이 결제를 중단할 때가 아니라 결제를 시작할 때 발생해요. 리마인더 플로우는 이 시점에 시작해서 대기해요. 고객이 주문을 완료해도 이미 시작된 실행은 멈추지 않아요.

대기 단계가 지나면 조건이 shopify_last_order_status, shopify_last_order_at 같은 연락처 필드의 현재 값을 읽어요. 이 필드는 지금 이 결제가 아니라 Brew가 마지막으로 확인한 주문을 나타내므로, 이 결제가 주문으로 이어졌는지 증명할 수 없어요.

checkouts/update 이벤트는 정해진 시간이 지난 뒤가 아니라 결제 정보가 바뀔 때마다 발생하므로, 그것만으로는 시간을 두고 보내는 두 번째 리마인더로 쓸 수 없어요.

이메일 주소가 없는 결제는 Brew가 같은 Shopify 고객 ID의 이메일을 이미 확인한 경우가 아니면 자동화를 시작하지 않아요. 게시하기 전에 주문으로 이어지는 결제와 그렇지 않은 결제를 모두 테스트하세요.


## Brew에서 Shopify 설정하기

- ‘연동’을 열고 Shopify를 선택한 다음 ‘웹훅 URL 생성’을 누르세요.
- 온라인 스토어의 커스텀 도메인이 아니라 acme.myshopify.com 같은 myshopify.com 도메인을 입력하세요. Brew는 웹훅이 들어올 때마다 이 도메인을 X-Shopify-Shop-Domain 헤더와 대조해요.
- Shopify 관리자에서 설정 > 알림을 열고 Webhook 섹션까지 스크롤하세요. Shopify는 이벤트를 그 이벤트용으로 만든 웹훅에만 보내므로, 사용할 이벤트마다 웹훅을 하나씩 만드세요. 형식은 JSON으로 설정하고, Brew URL을 붙여 넣은 다음 최신 API 버전을 선택하세요.
- Webhook 섹션 하단에 있는 서명 시크릿을 복사하세요. 스토어의 모든 웹훅은 같은 시크릿으로 서명돼요. 시크릿을 Brew에 붙여 넣고 ‘연결’을 누르세요.
- 만든 웹훅마다 메뉴를 열고 테스트를 보내세요. 첫 테스트가 도착하면 Brew의 상태가 ‘테스트 이벤트 대기 중’에서 ‘연결됨’으로 바뀌고, 테스트를 보낼 때마다 해당 이벤트가 수신된 것으로 표시돼요. 테스트는 웹훅을 확인할 뿐이에요. Brew는 연락처를 추가하지 않고 자동화도 시작하지 않아요.
- ‘연결’을 누르면 이벤트 13개 모두에 대한 트리거가 만들어져요. 이벤트별로 켜고 끄는 스위치는 없지만, Shopify 웹훅이 없는 이벤트는 발생하지 않아요.
- 자동화를 만들고 Shopify 이벤트를 선택한 다음, 아직 초안일 때 테스트를 보내 보세요. 일치하는 이벤트가 도착하면 활성 상태인 자동화만 실행돼요.

## 지원되는 Shopify 이벤트

Brew는 다음 웹훅 이벤트 13개를 지원해요:

- customers/create
- customers/update
- customers/delete
- customers/enable
- customers/disable
- orders/create
- orders/paid
- orders/cancelled
- orders/fulfilled
- checkouts/create
- checkouts/update
- fulfillments/create
- fulfillments/update

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

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

주문 이벤트는 shopify_last_order_number, shopify_last_order_total, shopify_last_order_currency, shopify_last_order_at을 업데이트해요. orders/create, orders/paid, orders/cancelled 이벤트는 shopify_last_order_status도 설정하고, orders/fulfilled 이벤트는 shopify_last_fulfillment_status를 설정해요. 주문 처리 이벤트는 shopify_last_tracking_number, shopify_last_tracking_url, shopify_last_fulfillment_status를 업데이트해요. 결제 페이지 이벤트는 shopify_last_checkout_url을 업데이트해요.

customers/delete, customers/disable, customers/enable 이벤트는 shopify_account_status를 각각 deleted, disabled, active로 설정해요. Brew는 연락처를 삭제하거나 수신 거부 처리하지 않으므로, 필요한 곳에서는 이 필드로 필터링하세요.

개인화 태그에는 선택한 이벤트에 선언된 페이로드 스키마를 사용하세요. 모든 이벤트에는 값이 있는 경우 email, firstName, lastName, currency, shopDomain, createdAt이 포함돼요. 주문 이벤트에는 orderNumber, totalPrice, financialStatus, fulfillmentStatus가, 결제 페이지 이벤트에는 totalPrice와 abandonedCheckoutUrl이, 주문 처리 이벤트에는 trackingNumber, trackingUrl, fulfillmentStatus가 추가돼요.

totalPrice는 Shopify가 주문 통화로 보내는 금액으로, 센트 단위가 아니라 49.95 같은 값이에요. 페이로드에는 주문 품목이 포함되지 않으며, Shopify 객체 ID는 개인화 태그로 쓸 수 없어요.

Shopify 고객 웹훅에는 더 이상 마케팅 수신 동의 정보가 포함되지 않아서 Brew도 이 정보를 받지 못해요. 수신 동의는 따로 기록하고, 프로모션 이메일을 보내기 전에 확인하세요.


## Brew는 환불 이벤트와 장바구니 이벤트를 지원하나요?

아니요. Shopify에는 orders/refunded 이벤트가 없고, 환불 웹훅에는 고객 정보가 없어요. carts/update 이벤트에는 수신자를 식별할 정보가 없어서 Brew가 이 이벤트로는 안전하게 이메일을 보낼 수 없어요. 이런 이벤트용 웹훅은 추가하지 마세요.


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

이벤트 수신과 이메일 발송은 별개의 단계예요. 일치하는 자동화가 활성 상태인지 확인한 다음, 필터와 실행 기록, 수신자가 발송 대상인지, 발신 도메인을 확인하세요. Shopify에서 보낸 테스트는 테스트 이벤트로 표시되며 자동화를 시작하지 않아요. 알 수 없는 고객의 이벤트에 이메일 주소가 없으면 수신자를 찾지 못한 것으로 기록돼요.


## 제한 사항 및 문제 해결

- Brew는 Shopify 고객, 주문, 주문 처리를 변경할 수 없어요.
- shop_domain_mismatch와 함께 401 오류가 나면 Brew에 입력한 도메인이 웹훅을 보내는 스토어와 일치하지 않는다는 뜻이에요. 정식 myshopify.com 도메인으로 다시 연결하세요.
- Shopify에서 서명 시크릿을 교체했다면 새 값으로 다시 연결하세요. 시크릿은 16자 이상이어야 해요.
- 트리거에 ‘아직 이벤트 없음’이 표시되면 해당 이벤트용 Shopify 웹훅을 만들고 그 웹훅에서 테스트를 보내세요.
- 주문 웹훅에는 고객 이름이 빠져 있을 수 있어요. firstName에는 기본 인사말 같은 개인화 태그 대체값을 지정하세요.
- 각 이메일의 수신 동의와 목적을 검토하세요. Shopify 고객을 동기화했다고 해서 프로모션 이메일을 보내도 되는 건 아니에요.

## 출처 및 설정 가이드

- [Shopify 설정 가이드](https://docs.brew.new/integrations/import/shopify)
- [자동화 만들기](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)
- [Shopify 웹훅](https://shopify.dev/docs/apps/build/webhooks)

## 관련 링크

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