메시지 보관
메시지 보관 기능을 사용하면 보관 또는 규정 준수 목적으로 사용자에게 전송된 메시지의 사본을 AWS S3 버킷, Azure Blob Storage 컨테이너 또는 Google Cloud Storage 버킷에 저장할 수 있습니다.
이 문서에서는 메시지 보관 설정 방법, JSON 페이로드 참조 및 자주 묻는 질문을 다룹니다.
메시지 보관은 추가 기능으로 제공됩니다. 메시지 보관을 시작하려면 Braze 고객 성공 매니저에게 문의하세요.
작동 방식
이 기능을 켜면 Braze는 선택한 채널(이메일, SMS/MMS, 푸시 또는 인앱 메시지)을 통해 사용자에게 전송된 각 메시지에 대해 gzip으로 압축된 JSON 파일을 작성합니다. Braze는 이 파일을 기본 데이터 내보내기 대상에 작성합니다. 여기에는 각 채널의 모든 Campaign 유형이 포함되며, 예를 들어 트랜잭션 이메일 API를 통해 전송된 트랜잭션 이메일 Campaign도 포함됩니다.
이 파일에는 파일 참조에 정의된 필드가 포함되며, 사용자에게 전송된 최종 템플릿 메시지가 반영됩니다. Campaign에 정의된 모든 템플릿 값(예: {{${first_name}}})은 사용자의 프로필 정보를 기반으로 사용자가 실제로 받은 최종 값으로 표시됩니다. 이를 통해 전송된 메시지의 사본을 유지하여 규정 준수, 감사 또는 고객 지원 요구 사항을 충족할 수 있습니다.
여러 클라우드 스토리지 공급자에 대한 자격 증명을 설정한 경우, 메시지 아카이빙은 기본 데이터 내보내기 대상으로 지정된 공급자에만 내보냅니다. 명시적인 기본값을 설정하지 않았고 AWS S3 버킷이 연결되어 있다면, 메시지 아카이빙은 해당 버킷에 업로드합니다.

이 기능을 켜면 메시지 전송 속도에 영향을 미칩니다. 정확성을 유지하기 위해 메시지가 전송되기 직전에 파일 업로드가 수행되기 때문입니다. 메시지 아카이빙으로 인한 지연 시간은 클라우드 스토리지 공급자와 저장되는 문서의 처리량 및 크기에 따라 달라집니다.
JSON은 다음과 같은 키 구조를 사용하여 스토리지 버킷에 저장됩니다.
sent_messages/{channel, one of: email, push, sms}/{MD5 digest of downcased: email address, push token, or E.164 phone number}/{campaign or Canvas step API ID}/{dispatch ID}.json.gz
예시 파일은 다음과 같습니다.
sent_messages/email/819baa08d8d7e77e19d4666f5fc6050b/ee965cb2-8934-4b0a-acf1-91c899c2f915/651fd10b282850b39e1169c13975234b.json.gz

MD5 다이제스트는 알려진 소문자 변환 이메일 주소, 푸시 토큰 또는 E.164 전화번호를 사용해서만 계산할 수 있습니다. 알려진 MD5 다이제스트를 역으로 변환하여 소문자 변환 이메일 주소, 푸시 토큰 또는 E.164 전화번호를 얻을 수는 없습니다.

버킷에서 푸시 토큰을 찾는 데 어려움이 있나요?
Braze는 푸시 토큰을 해시하기 전에 소문자로 변환합니다. 따라서 푸시 토큰 Test_Push_Token12345는 키 경로에서 test_push_token12345로 소문자 변환되며, 해시는 32b802170652af2b5624b695f34de089가 됩니다.
메시지 보관 설정하기
이 섹션에서는 워크스페이스에 메시지 보관을 설정하는 방법을 안내합니다. 진행하기 전에 회사에서 메시지 보관 기능을 구매하고 활성화했는지 확인하세요.
1단계: 클라우드 스토리지 버킷 연결하기
아직 연결하지 않았다면 클라우드 스토리지 버킷을 Braze에 연결하세요. 자세한 단계는 Amazon S3, Azure Blob Storage 또는 Google Cloud Storage에 대한 파트너 설명서를 참조하세요.

메시지 보관을 위해 Currents를 설정할 필요는 없으므로, 파트너 설명서의 해당 전제 조건은 건너뛰어도 됩니다.
2단계: 메시지 보관에 사용할 채널 선택하기
메시지 보관 설정 페이지에서는 전송된 메시지의 사본을 클라우드 스토리지 버킷에 저장할 채널을 관리합니다.
채널을 선택하려면 다음과 같이 하세요.
- 설정 > 메시지 보관으로 이동합니다.
- 채널을 선택합니다.
- 변경 사항 저장을 선택합니다.


설정에 메시지 보관이 표시되지 않는다면 회사에서 메시지 보관 기능을 구매하고 활성화했는지 확인하세요.

인앱 메시지에 대해 메시지 보관을 활성화하면 모든 인앱 메시지가 템플릿 인앱 메시지로 변환됩니다. 즉, Braze가 메시지를 표시하기 전에 네트워크 요청이 필요합니다. 자세한 내용은 인앱 메시지에 대해 메시지 보관을 활성화하면 어떻게 되나요?를 참조하세요.
IP 허용 목록
메시지 아카이빙이 클라우드 스토리지 버킷에 파일을 업로드할 때, Braze는 당사 서버에서 AWS S3, Azure Blob Storage 또는 Google Cloud Storage 엔드포인트로 네트워크 요청을 보냅니다. IP 허용 목록을 사용하면 이러한 요청이 Braze에서 오는 것인지 확인할 수 있어 보안을 한층 강화할 수 있습니다.
Braze는 연결된 콘텐츠 및 Currents에 사용하는 것과 동일한 IP 주소에서 메시지 아카이빙 업로드를 전송합니다. 인스턴스별 전체 IP 목록은 연결된 콘텐츠 IP 허용 목록을 참조하세요.
파일 참조
다음은 메시지가 전송될 때마다 클라우드 스토리지 버킷으로 전달되는 JSON 페이로드에 대한 참조입니다. 메시지 아카이브 샘플 파일은 코드 예제 리포지토리에서 확인하세요.
{
"version": 1, //numerical version of the JSON structure
"to": ToAddress, ("[email protected]")
"subject": SubjectLine ("20% off coupon inside!"),
"from_name": DisplayName ("Braze"),
"from_address": FromAddress ("[email protected]"),
"html_body": HtmlBody,
"plaintext_body": PlainTextBody,
"amp_body": AMPEmailBody,
"extras": Hash of key-value pairs from Email Extras configured in the email editor,
"headers": HashOfHeaders,
"sent_at": UnixTimestamp,
"dispatch_id": DispatchIdFromBraze,
"campaign_id": CampaignApiId, // may not be available
"canvas_id": CanvasApiId, // may not be available
"canvas_step_id": CanvasStepApiId, // may not be available
"canvas_variation_id" : CanvasVariationApiId, // may not be available
"message_variation_id": MessageVariationApiId, // may not be available,
"attachments": Array of JSON Objects containing 'bytes' and 'file_name', // may not be available
"user_id": String,
"campaign_name": String, // will only be available if the message is from a campaign
"canvas_name": String, // will only be available if the message is from a Canvas
"canvas_step_name": String, // will only be available if the message is from a Canvas
"external_id": String
}
extras 필드에는 HTML 에디터에서 이메일을 작성할 때 이메일 엑스트라 필드에 구성한 키-값 페어가 포함됩니다. 이메일 엑스트라는 모든 이메일 서비스 공급자(SendGrid 및 Sparkpost 포함)에서 작동하며, 어떤 공급자를 사용하든 아카이브된 메시지에 포함됩니다. 이메일 엑스트라 구성에 대한 자세한 내용은 이메일 캠페인 만들기를 참조하세요. Currents로 데이터를 다시 전송하려면 메시지 엑스트라를 참조하세요.

{
"version": 1 //numerical version of the JSON structure
"to": PhoneNumber, ("+15555555555"),
"body": Body ("Hi there!"),
"subscription_group": SubscriptionGroupExternalId,
"provider": StringOfProviderName,
"media_urls": ArrayOfString, // indicates a message is MMS
"sent_at": UnixTimestamp,
"dispatch_id": DispatchIdFromBraze,
"campaign_id": CampaignApiId, // may not be available
"canvas_id": CanvasApiId, // may not be available
"canvas_step_id": CanvasStepApiId, // may not be available
"canvas_variation_id" : CanvasVariationApiId, // may not be available
"message_variation_id": MessagVariationApiId, // may not be available
"user_id": String,
"campaign_name": String, // will only be available if the message is from a campaign
"canvas_name": String, // will only be available if the message is from a Canvas
"canvas_step_name": String, // will only be available if the message is from a Canvas
"external_id": String
}
{
"version": 1, //numerical version of the JSON structure
"to": PushToken,
"payload": JsonOfEntirePushPayload,
"platform": one of "android_push" | "ios_push" | "kindle_push" | "web_push",
"app_id": ApiKeyOfApp,
"sent_at": UnixTimestamp,
"dispatch_id": DispatchIdFromBraze,
"campaign_id": CampaignApiId, // may not be available
"canvas_id": CanvasApiApiId, // may not be available
"canvas_step_id": CanvasStepApiId, // may not be available
"canvas_variation_id" : CanvasVariationApiId, // may not be available
"message_variation_id": MessagVariationApiId, // may not be available
"user_id": String,
"campaign_name": String, // will only be available if the message is from a campaign
"canvas_name": String, // will only be available if the message is from a Canvas
"canvas_step_name": String, // will only be available if the message is from a Canvas
"external_id": String
}
푸시 페이로드 구조 변형

푸시 알림 아카이브의 최상위 payload 필드에는 기기로 전송된 공급자 페이로드 전체가 포함됩니다. 이 JSON 내의 aps(APNs의 경우) 또는 notification 및 data(FCM의 경우)와 같은 키는 메시지 유형, 플랫폼, 구성에 따라 크게 달라질 수 있습니다.
메시지 아카이빙은 메시지 페이로드 자체를 캡처하지만, FCM 또는 APNs로 전송되는 전달 메타데이터는 포함하지 않습니다. 전달 메타데이터에는 다음이 포함됩니다.
- 기기 토큰
- 우선순위 설정
- 유효 기간(TTL)
- 축소 ID
- APNs 헤더
- 만료 타임스탬프
- 기타 전달 구성 필드
이러한 필드는 푸시 공급자에 대한 전달 지침 역할을 하며, 일반적으로 메시지 콘텐츠의 일부로 간주되지 않습니다.
예를 들면 다음과 같습니다.
- iOS 푸시 알림은 리치 알림(
aps.alert가title및body같은 필드를 포함하는 객체인 경우)과 단순 알림(aps.alert가 문자열인 경우)의 구조가 다를 수 있습니다. - Android 푸시 알림(예: FCM)은 커스텀 키가 포함된 데이터 메시지를 사용합니다. 페이로드 구조에는 푸시 버튼, 캐러셀, 추가 메타데이터 등 메시지 구성에 따라 서로 다른 선택 필드가 포함될 수 있습니다.
또한 대시보드에서 보낸 테스트 메시지는 프로덕션 메시지와 다른 페이로드 구조를 생성할 수 있습니다.
JSON 페이로드 형식은 메시지마다 다를 수 있으며 시간이 지나면서 변경될 수 있습니다. 아카이브된 푸시 페이로드를 파싱할 때는 고정된 구조를 가정하거나 항상 동일한 필드가 존재한다고 예상하지 마세요. 다양한 페이로드 형식을 처리할 수 있는 유연한 파싱 로직을 구현하세요.
자주 묻는 질문
인앱 메시지에 대해 메시지 보관을 켜면 어떻게 되나요?
인앱 메시지에 대해 메시지 보관을 켜면 모든 인앱 메시지가 템플릿 인앱 메시지가 됩니다. 따라서 Braze가 메시지를 표시하려면 먼저 네트워크 요청이 필요합니다.
페이로드에 포함되지 않는 템플릿은 무엇인가요?
메시지가 Braze를 떠난 후에 이루어진 수정 사항은 클라우드 스토리지 버킷에 저장된 파일에 반영되지 않습니다. 여기에는 클릭 추적을 위한 링크 래핑이나 추적 픽셀 삽입처럼 메일 전송 파트너가 수행하는 수정 사항이 포함됩니다.
Campaign 경로에서 “unassociated” 값 아래에 있는 메시지는 무엇인가요?
Campaign 또는 Canvas 외부에서 메시지를 보내면 파일 이름의 Campaign ID가 “unassociated”로 표시됩니다. 대시보드에서 테스트 메시지를 보낼 때, Braze가 SMS/MMS 자동 응답을 보낼 때, 또는 API를 통해 보낸 메시지에 Campaign ID가 지정되지 않은 경우에 이런 상황이 발생합니다.
이 발송에 대한 자세한 정보는 어떻게 찾을 수 있나요?
external_id 또는 dispatch_id를 user_id와 함께 사용해 템플릿 메시지를 Currents 데이터와 교차 참조하면 전달된 타임스탬프, 사용자가 메시지를 열람하거나 클릭했는지 여부 등 더 많은 정보를 확인할 수 있습니다.
재시도는 어떻게 처리되나요?
클라우드 스토리지 버킷에 연결할 수 없는 경우 Braze는 백오프 지터를 적용해 최대 세 번까지 재시도합니다. AWS S3 사용량 제한에 따른 재시도는 Braze가 자동으로 처리합니다.
자격 증명이 유효하지 않으면 어떻게 되나요?
클라우드 스토리지 자격 증명이 언제든 유효하지 않게 되면 Braze는 클라우드 스토리지 버킷에 메시지를 저장할 수 없으며, 해당 메시지는 손실됩니다. 자격 증명 문제에 대한 알림을 받을 수 있도록 Amazon Web Services, Google Cloud Services 또는 Azure(Microsoft Cloud Services)에 대한 알림 환경설정을 구성하는 것을 권장합니다.
보관 파일의 sent_at 타임스탬프가 Currents의 발송 타임스탬프와 약간 다른 이유는 무엇인가요?
렌더링된 사본은 사용자에게 메시지를 보내기 직전에 업로드됩니다. 클라우드 스토리지 업로드 시간 때문에 렌더링된 사본의 sent_at 타임스탬프와 실제 발송 시간 사이에 몇 초 정도의 지연이 있을 수 있습니다.
Currents 데이터에 사용하는 현재 버킷은 유지하면서 메시지 보관 전용으로 새 버킷을 만들 수 있나요?
아니요. dedicated message archiving buckets while keeping a separate Currents bucket에 관심이 있으시면 제품 피드백을 제출해 주세요.
보관된 데이터는 Currents 데이터 내보내기 구조와 비슷하게 기존 버킷의 전용 폴더에 기록되나요?
데이터는 버킷의 sent_messages 섹션에 기록됩니다. 자세한 내용은 작동 방식을 참조하세요.
메시지 보관을 사용해 파일을 서로 다른 워크스페이스별로 그룹화할 수 있나요?
아니요. 메시지 보관은 워크스페이스를 기준으로 파일을 그룹화하는 기능을 지원하지 않습니다. 대신 Campaign 또는 캔버스 단계 API ID가 어느 워크스페이스에 속하는지 확인한 다음, 해당 정보를 기준으로 그룹화할 수 있습니다.