Braze에 이메일과 전화번호를 업로드해야 하나요?

Braze를 컨설팅하면서 고객들에게 가장 많이 듣는 질문이 있다.

Braze에서 이메일, 문자까지 보내려면 이메일과 전화번호 업로드 해야하지 않나요?
저희는 개인정보 정책이 엄격하기 때문에 외부로 이메일과 전화번호를 넣을 수 없어요. 어떻게 하죠?

오늘날 개인정보 보호가 갈수록 민감한 이슈가 되어가면서, 모든 회사들이 개인정보 보호에 앞장서고 있고, 이러한 고객의 질문을 많이 접하고 있다. 또한 이는 당연히 필요한 질문이다.

일반적으로 우리가 알고 있는 사실은 Braze에 이메일과 전화번호를 업로드해야 직접적인 사용이 가능하다는 것이다. 과연 그럴까? 하나하나 알아보자.

우선 Braze는 아래의 메시징 채널들을 지원한다.

  1. 푸시메시지 (웹, 앱)
  2. 이메일 (웹훅 or SendGrid를 통한)
  3. 문자메시지 (웹훅 or Twilio를 통한)
  4. 인앱/인브라우저 메시지 (모달, 슬라이더 등 팝업류)
  5. 웹훅(Webhook)을 통한 카카오톡 알림톡 등

만약 저 말이 사실이라면 Braze를 사용할 때 주요 채널인 2, 3번(이메일, 문자메시지)을 직접적으로 사용하지 못하게 되는 것이므로, 사용성이 극도로 제약된다.

특히 Braze에 따르면 이메일을 아예 보내지 않는 것과 보내는 것과의 A/B 테스팅 시 재방문(reengagement)한 사용자간의 차이는 무려 45%에 달한다. (관련 링크)

또한 이메일 전체발송 대비 개인화된 동적인 콘텐츠를 실은 발송의 경우 무려 25%의 오픈율 상승과 이메일을 통한 114%의 전환율 상승을 보여준다. (관련 링크)

이렇게 효과가 명확한데, 만약 Braze에 이메일과 전화번호를 업로드하지 못한다고 해서 그 메시징 채널을 포기해야 할까?

180컨설팅의 세일즈와 Customer Success, 그리고 Solutions Consultant들은 아래와 같이 답변을 드린다.

Braze는 개인정보를 업로드하지 않아도 이메일과 문자메시지 발송이 가능합니다.

본 글에서는 어떻게하면 Braze에 개인정보를 업로드하지 않고서도 사용이 가능한지 알아보고자 한다.

User Lifecycle Orchestration 플랫폼으로서의 Braze

(출처 : 관련 링크 / 오케스트라에서 한 명의 지휘자가 다양한 연주자들을 통제하듯이, 하나의 브랜드가 개인 사용자와 소통하는 것에는 일관성있는 캠페인을 진행할 수 있는 지휘자와 같은 통제센터가 필요하다)

Braze를 부르는 여러 가지 명칭들이 있다. CRM 자동화, 마케팅 자동화, 메시징 자동화, 개인화 메시징 플랫폼 등등. 대부분의 경우 "자동화"나 "개인화"라는 명칭이 붙게 되는데, 이 중 가장 Braze의 본질을 잘 나타내는 명칭은 어쩌면 "User Lifecycle Orchestration 플랫폼"이라는 명칭이다.

User Lifecycle Orchestration

Braze는 기본적으로 서비스(브랜드)와 고객과의 관계(Relationship)를 개선하는 것을 가장 중요하게 생각한다. 그렇기에 Braze의 연간 컨퍼런스 이름도 LTR(Long-Term Relationship)이다.

그런데 이렇게 서비스(브랜드)와 고객과의 관계를 돈독하게 만들기 위해서는 기본적으로 고객의 모든 Lifecycle 전체에 걸쳐서 고객에게 개인화된 콘텐츠(메시지)을 최적의 시점에 최적의 수단을 통해서 제공해야 한다.

right message at the right time

이렇게 해야만 고객은 해당 서비스(브랜드)와의 관계를 특별하다고 생각할 것이다. 그리고 중요한 것은 이러한 캠페인들을 일관성있게 통제할 수 있는 하나의 통제센터가 있어야 한다는 것이다. 그리고 이러한 통제센터가 개인 사용자의 서비스 내 행동에 대한 인사이트를 가지고 캠페인들을 설계할 때 고객은 정말 "브랜드와 소통"하는 것과 같은 경험을 누릴 수 있다.

최근에 모 회사의 서비스를 이용하면서 정확히 이런 경험을 한적이 있다.

(1) 우선, 차량을 호출하자마자 차량이 배차되었다는 푸시메시지가 왔다.

(2) 그리고 곧바로 차량이 곧 도착한다는 메시지가 왔다.

(3) 이후에 출발하니까 안전벨트를 착용해달라는 메시지가 왔다.

또한 (4) 목적지에 가까이 다가갔을 때 목적지에 근접하고 있다라는 푸시메시지가 왔다. (심지어 목적지에 근접하고 있다는 푸시메시지를 보내줄 줄이야!) (5) 그리고 결제 완료가 되었다는 메시지가 왔다.

한 명의 서비스 사용자로서 필자는 단순하게 차량을 사용하는 커다란 1개의 행동 안에서 무려 5개 이상의 메시지를 받은 것이다. 그리고 이렇게 되었을 때 실제로 내가 해당 서비스(브랜드)와 소통을 하면서 서비스를 이용하고 있다라는 느낌을 정말로 받을 수 있었다.

위의 사례에서는 Braze를 사용해서 User Lifecycle을 Orchestrate하여 일련의 트리거에 따라서 사용자에게 가장 알맞은 메시지를 송신함으로써 소통의 효과를 낸 것이다.

Orchestration의 핵심은 발동 조건을 통제할 수 있는 것

Orchestration의 핵심은 어떤 상황에서 해당 메시지가 발동(Trigger)되느냐이지 (1) 어떤 수단 혹은 (2) 어떤 내용으로 해당 메시지를 보내는 것이 오히려 핵심이 되지 않는다.

왜냐하면 Webhook이라는 훌륭한 수단이 있고, 자유로운 템플릿(Template)과 리퀴드(Liquid) 언어, 그리고 동적으로 서버에 연결할 수 있는 커넥티드 컨텐츠(Connected Content) 기능을 통하여 보내는 메시지의 내용을 동적으로 변경할 수 있게끔 기능을 제공하기 때문이다.

Braze의 발동 조건은 크게 보면 3가지의 요소를 가지고 있다.

  1. Segment : 누구에게?
  2. (Campaign) Trigger : 언제?
  3. Canvas : 어떤 일련의 행동의 일환으로?

즉, 누구에게, 언제, 어떤 일련의 행동의 일환으로의 3가지 발동조건이 맞았을 때 사용자에게 메시지를 보내게 되며, 비로소 (1) 어떤 수단, (2) 어떤 내용으로 메시지를 보낼지 결정하게 되는 것이다.

(출처 : 관련 링크 / 앱을 5번 이상 사용하면서 1번 이상의 구매를 했음에도 불구하고, 지난 2주간 한 번도 앱에 접속하지 않은 사용자들을 필터링하는 화면)

첫번째로, Segment는 특정한 조건을 만족하는 사용자의 동질집단(Segment)을 설정하여 해당 집단에게만 데이터를 보내게끔 하는 것이다.

둘째로, Trigger는 해당 집단에 속한 사용자들이 어떠한 행동을 하였을 때 메시지를 보내게끔 하는 것이다.

  1. 예약 발송(Scheduled Delivery)
    1. 즉시 발송(Send as soon as Campaign is launched)
    2. 지정된 시각에 발송(Send at a designated time)
    3. 최적화 발송(Intelligent Delivery)  
  2. 행동 기반 발송(Action-Based Delivery)
  3. API 기반 발송(API-Triggered Delivery)

마지막으로 Braze의 강력한 발동조건은 Canvas 기능으로 어떤 일련의 행동을 미리 설계해 두고, 그 시퀀스의 특정 결과로서 다음 번 행동을 발생시키는 것이다. 이는 마치 프로그래밍에서 논리회로를 설계하는 것처럼 사용자들의 행동에 따라서 다음 번 행동을 촉발시킬 수 있도록 해준다.

예를 들어 이메일을 받고, 3일 동안 열어보지 않으면, 카카오톡 알림톡을 보낼 수 있고, 카카오톡 알림톡을 열어보고 쿠폰을 받았다고 해도, 7일 안에 쿠폰을 사용하지 않으면, 다시 리마인더 푸시메시지를 보낼 수 있게 손쉽게 설계할 수 있다.

즉, 이러한 다양한 발동조건을 설정함을 통하여 개인정보를 업로드 하느냐, 하지 않느냐와 상관없이 User Lifecycle에 대한 완벽한 통제가 가능해진다.

개인정보를 업로드하지 않는 2가지 방법

User Lifecycle Orchestration 플랫폼으로서의 Braze는 발동조건만 제대로 지정해줘도 그 이후에 (1) 수단과 (2) 내용을 동적으로 지정해줄 수 있기 때문에 개인정보를 Braze 서버에 실제 업로드하지 않고도 캠페인을 진행할 수 있다. (SDK에서 해당 값을 전달하지 않아도 이메일과 문자 등 캠페인 진행이 가능하다.)

현재 가장 크게 사용되는 방법은 (1)  커넥티드 콘텐츠와 (2) 웹훅의 2가지이다.

커넥티드 콘텐츠(Connected Content)

Braze의 커넥티드 콘텐츠(Connected Content)는 Braze 대시보드 내에 있는 다양한 Input 창에 삽입되어서 동적으로 특정한 값을 서버에서 가져와서 동적으로 사용하게 할 수 있다.

아래는 실제로 커넥티드 콘텐츠를 가장 많이 사용하는 사례인 카카오톡 알림톡을 Braze를 통해서 보내는 것을 시연한 화면이다.

{% connected_content <https://api.mycoffeeplace.com/user/identifyPhoneNumber?user_id={{${user_id}>}} :save user_profile %}

[
   {
      "receiver_phone_number":"{{user_profile.phone_number}}",
      "message":"{{${first_name}}} 회원님! 쌀쌀한 요즘, 따뜻한 커피 한잔 어때요?",
      "button_1":{
         "button_name":"커피 한 잔 하러가기",
         "mobile_redirect_to":"<https://m.mycoffeeplace.com/product/123>",
         "pc_redirect_to":"httsp://mycoffeeplace.com/product/123"
      }
   }
]

실제로 Braze는 서버에 데이터를 저장하지 않는다. 오히려 메시지를 보낼 때 https://api.mycoffeeplace.com/user/identifyPhoneNumber 라는 API를 호출하게 되고 기존에 저장해놓은 External User ID를 키값으로 하여 실제 전화번호를 서버로부터 받게 된다. 그리고 그 전화번호를 실제 Webhook의 Body에 실어서 보내게 된다.

즉, 이렇게 할 시 메시지 발송 시 Body에서만 데이터를 참조하기에 실제 전화번호를 저장하지 않고도 카카오톡 알림톡을 고객에게 보낼 수 있다.

사용 방법 요약

  1. 고객의 개인정보를 제외한 external_id (이 경우 내부용 회원 ID와 1:1로 대응되는 외부용 회원 ID의 사용을 권장)만을 Braze에 올린다.  
    1. Android : 관련 링크
    2. iOS : 관련 링크
    3. Web : 관련 링크  
  2. 내부적으로 커넥티드 콘텐츠에서 호출할 수 있는 API를 제작한다. (이 때 external_id를 키값으로 API에 송신하였을 때 Response로 전화번호를 내려줄 수 있도록 설계한다.)
  3. 실제 Input 창 안에서 변수로 지정한 전화번호 값을 Connected Content를 사용하여 당겨와서 메시지를 발송한다.

(✨ TIP : 만약 해당 external_id를 가진 사용자가 전화번호를 주지 않았을 경우는 null 혹은 빈값이 오게 된다. 그 경우에는 Connected Content 내에서 조건문을 걸어 abort_message()를 사용하면 된다. (관련 링크))

웹훅(Webhook)

커넥티드 콘텐츠는 어쨌든 Braze의 서버에 개인정보가 저장되지는 않지만, Braze의 서버를 1번은 개인정보가 거쳐가기에 이조차도 보안상 조치하기가 싫을 수 있다.

이에 대한 대안으로 Webhook을 사용하게 되면 내부의 Proxy API에 대한 간단한 개발을 통하여 개인정보(사용자 전화번호, 이메일 등)의 Braze 서버로의 업로드 없이, 그리고 심지어 직접 참조 없이도 이메일과 문자 발송이 가능하다.

Message Proxy API 설명

위는 실제 개발 시의 데이터 흐름도이며, 실제 데이터의 마스킹(Masking)을 수행하고 데이터를 전달(Proxy) 해줄 수 있는 별도의 웹훅용 API를 개발하여서 Braze에서는 external_id 이외의 데이터를 일체 저장하거나 엑세스 자체를 하지 못하게끔 막는 것이다.

사용 방법 요약

  1. 고객의 개인정보를 제외한 external_id (이 경우 내부용 회원 ID와 1:1로 대응되는 외부용 회원 ID의 사용을 권장)만을 Braze에 올린다.  
    1. Android : 관련 링크
    2. iOS : 관련 링크
    3. Web : 관련 링크  
  2. 이 때 Webhook을 메시지 발송 방법으로 선택하고, 해당 Webhook의 엔드포인트가 되는 Messaging Proxy API를 내부적으로 구축하여 파라미터로 앞서 (1)에서 저장한 external_id를 받을 수 있도록 설정한다.
  3. 이 때 Messaging Proxy API의 역할은 Braze에서 external_id와 메시지의 내용이 날라오면 해당 external_id에 매핑된 이메일 혹은 전화번호를 찾아서, 그 매핑된 이메일 혹은 전화번호로 메시지를 전달한다.
  4. 실제로 캠페인을 Braze 내부에서 생성하실 때에는 Webhook을 메시지 전송 수단으로 선택하여서 해당 Messaging Proxy API을 Webhook의 템플릿으로 등록해놓고, 편하게 사용할 수 있다.

Braze, 개인정보 업로드 없이도 쓸 수 있다

이렇게 Braze는 (1) Connected Content와 (2) Webhook as a Proxy의 2가지 방법을 통하여 개인정보 업로드 없이도 사용할 수 있다.