메인 콘텐츠로 건너뛰기

개요

동적 콘텐츠를 사용하면 각 대상에 대해 별도의 버전을 만들지 않고도 대규모로 메시지를 개인화할 수 있습니다. 다국어 메시지를 보내든 지역이나 캠페인별로 콘텐츠를 맞춤화하든 동적 콘텐츠를 사용하면 각 사용자에게 자동으로 조정되는 하나의 메시지를 정의할 수 있습니다. 콘텐츠 변형이 포함된 데이터를 포함하는 CSV 파일을 업로드하거나 Template API를 사용하여 프로그래밍 방식으로 수행하고 Liquid 구문을 사용하여 메시지에서 해당 값을 참조합니다. 메시지가 전송되면 OneSignal은 각 사용자의 데이터 태그를 기반으로 해당 사용자에게 적합한 콘텐츠를 가져옵니다. 동적 콘텐츠는 푸시, 이메일 및 SMS에서 작동하므로 다음에 이상적입니다:
  • 다국어 온보딩 또는 마케팅 플로우
  • 지역 또는 세그먼트별 프로모션
  • 외부 캠페인 데이터에 의한 개인화
주요 이점:
  • 대규모 개인화 – 수십 개의 메시지 변형을 만들고 관리하지 않고도 맞춤형 경험을 제공합니다.
  • 다국어 지원 – 각 사용자의 선호 언어로 자동 표시되는 하나의 메시지를 작성합니다.
  • 동적 세그먼테이션 – 언어, 지역, 플랜 또는 campaign_id와 같은 사용자 지정 태그와 같은 사용자 속성을 기반으로 메시지 콘텐츠를 변경합니다.
  • 마찰 없는 협업 – 번역가 또는 비기술 팀이 OneSignal 로그인 없이 CSV 파일에서 직접 메시지 콘텐츠를 만들고 편집할 수 있습니다.
  • 크로스 채널 호환성 – 푸시, 이메일 및 SMS 캠페인에서 동일한 CSV 로직을 사용합니다.
일반적인 사용 사례:
  • 국가 또는 도시별 이벤트 공지
  • 캠페인 ID 또는 구매 내역을 기반으로 한 개인화된 푸시 알림
  • 사용자 그룹 전반에 걸친 여러 제목 줄 또는 메시지 테스트
메시지를 개인화하는 추가 옵션은 메시지 개인화를 참조하세요.

동적 콘텐츠 설정

새 메시지 또는 템플릿을 만드세요. 대시보드에서: Dynamic Content를 선택하세요.
  • 메시지 콘텐츠를 데이터 태그에 매핑하는 CSV 파일을 업로드하세요.
Templates API에서: dynamic_content 속성을 사용하세요.
  • 동적 콘텐츠가 자주 변경되는 경우 훌륭한 솔루션입니다.

푸시 생성 에디터에 있는 동적 콘텐츠 버튼.

콘텐츠 형식 지정

빈 파일로 시작하거나 제공된 템플릿 중 하나를 선택할 수 있습니다:
  • Multi-language
  • Content personalization

OneSignal에서 제공하는 CSV 템플릿 옵션.

API 세부 정보는 다음을 참조하세요:

CSV 요구 사항

  • 파일 크기는 200 KB 미만이어야 합니다
  • 열 헤더:
    • 영숫자만
    • 공백 대신 밑줄(_) 사용
    • 특수 문자 피하기
  • 스프레드시트 에디터에서 UTF-8 인코딩 확인
  • Multi-language Example
  • Content Personalization Example
subscription.language 속성을 섹션별 다른 번역에 매핑하세요.

Excel의 VLOOKUP 수식과 유사하게 사용자 속성을 CSV의 해당 콘텐츠와 일치시킵니다.

메시지에서 동적 콘텐츠 참조

dynamic_content에서 개인화된 콘텐츠를 표시하려면 이 Liquid 구문을 사용하세요.
{{dynamic_content.file_name.section_name[data_tag_or_property]}}
다음을 교체하세요:
  • file_name: CSV 파일 이름(.csv 제외).
  • section_name: 행의 첫 번째 열 값
  • data_tag_or_property: 데이터 태그 또는 구독 속성과 일치하는 열 헤더

대체 콘텐츠

대체 콘텐츠를 추가하면 사용자가 빈 콘텐츠를 받는 것을 방지합니다. 다음과 같은 경우 메시지가 렌더링되도록 합니다:
  • 사용자에게 일치하는 태그 또는 속성이 없습니다.
  • 사용자에게 dynamic_content에서 사용할 수 없는 태그 또는 속성이 있습니다.

사용자에게 일치하는 태그 또는 속성이 없음

subscription.language가 없는 경우 대신 dynamic_content의 기본 열을 참조하세요.
{% assign lang = subscription.language | default: "default" %}
{{ dynamic_content.content_personalization_template.title[lang] }}

사용자에게 dynamic_content에서 사용할 수 없는 태그 또는 속성이 있음

subscription.language가 구독에 존재하지만 dynamic_content에는 없는 경우 대신 기본 열을 참조하세요.
// dynamic_content에서 사용 가능한 각 언어를 추가하세요:
{% assign supported_langs = "de,en,es,fr,it,default" | split: "," %}
{% assign lang = subscription.language | default: "default" %}

// 구독 언어가 지원되는 언어에 있는지 확인하고, 없으면 언어를 'default'로 할당하세요
{% unless supported_langs contains lang %}
  {% assign lang = "default" %}
{% endunless %}

{{ dynamic_content.content_personalization_template.title[lang] }}

예제

다국어 이메일

translations.csv를 사용하여 이메일을 현지화하세요:
  • {{dynamic_content.translations.section_1[subscription.language]}}
  • {{dynamic_content.translations.section_2[subscription.language]}}

예제는 다국어 예제에 대한 liquid 구문을 추가하는 방법을 보여줍니다.

Liquid을 사용하여 제목 줄, 프리헤더, 버튼 레이블 및 URL을 업데이트하세요.

개인화된 푸시 메시지

사용자별 푸시 메시지에 content_personalization_template.csv를 사용하세요. 각 사용자의 campaign_id 태그는 사용할 행을 결정합니다.
전제 조건: 각 사용자는 campaign_id라는 _데이터 태그_를 가져야 합니다. 전송 시 OneSignal은 사용자의 campaign_id 값을 사용하여 CSV에서 일치하는 행을 선택합니다.

CSV 형식 (campaign_id로 키가 지정된 행)

campaign_id,title,message,url
campaign_123,Flash deal for you,Tap to claim,https://example.com/flash
campaign_456,Weekend picks are here,See what's trending,https://example.com/weekend
default,Our latest offers,See what's new,https://example.com
  • 첫 번째 열(campaign_id)은 사용자의 campaign_id 태그 값과 일치해야 하는 행 키입니다.
  • 다른 열(title, message, url)은 푸시에 삽입할 필드입니다.
  • 태그가 없거나 알 수 없는 값도 유효한 콘텐츠를 렌더링하도록 default 행을 포함하세요.

Liquid이 CSV에 매핑되는 방법

{{ dynamic_content.content_personalization_template[campaign_id].title }}
{{ dynamic_content.content_personalization_template[campaign_id].message }}
{{ dynamic_content.content_personalization_template[campaign_id].url }}
  • content_personalization_template → CSV 파일 이름(.csv 생략).
  • [campaign_id] → 첫 번째 열 값이 사용자의 campaign_id 태그와 같은 행을 선택합니다.
  • .title / .message / .url → 해당 행에서 선택한 열을 반환합니다.

대체 예제(권장)

{% assign cid = campaign_id | default: "default" %}

{% unless dynamic_content.content_personalization_template[cid] %}
  {% assign cid = "default" %}
{% endunless %}

{{ dynamic_content.content_personalization_template[cid].title }}
{{ dynamic_content.content_personalization_template[cid].message }}
{{ dynamic_content.content_personalization_template[cid].url }}
헤더 규칙: 영숫자/밑줄을 선호합니다(예: campaign_id, title). 공백이나 특수 문자를 사용해야 하는 경우 해시 표기법으로 액세스하세요:
{{ dynamic_content.file_name["row key"]["column key"] }}
Dynamic Content personalization Liquid example

예제는 콘텐츠 개인화 예제에 대한 liquid 구문을 추가하는 방법을 보여줍니다.


테스트 및 미리 보기

1

테스트 CSV 만들기

다국어 테스트:
  • 열: email, language
개인화 테스트:
  • 열: external_id, campaign_id

업로드하고 이메일 테스터 세그먼트를 만들 예제 CSV.


이메일에서 + 주소 지정을 사용하여 여러 변형을 테스트하세요: username+test@example.com

external_id와 campaign_id 태그가 있는 테스터 세그먼트를 업로드하고 만들 예제 CSV.

2

테스트 세그먼트 업로드

Subscriptions 또는 Segments > Upload/Import Users로 이동하세요.첫 번째 열을 식별자로 설정하세요. 다른 모든 열은 사용자 속성 또는 데이터 태그로 처리됩니다.

필요에 따라 반복할 테스터 세그먼트를 만드세요.

사용자 데이터 업로드에 대한 자세한 내용은 Import를 참조하세요.
3

메시지 보기

테스트 메시지를 보낸 후 받은 편지함이나 기기를 확인하여 표시를 확인하세요.
dynamic_content가 렌더링되지 않으면 대체 콘텐츠를 참조하세요

예제는 동적 콘텐츠와 함께 전송된 이메일을 보여줍니다.

예제는 동적 콘텐츠와 함께 전송된 푸시를 보여줍니다.

이제 이러한 템플릿과 CSV를 사용하여 개인화된 메시징을 확장할 수 있습니다.

사용 고려 사항

동적 콘텐츠 vs. 사용자 지정 데이터를 사용하는 경우

  • 다양한 언어 또는 개인화된 메시지 블록에는 동적 콘텐츠를 사용하세요.
  • 단일 언어의 간단한 인라인 개인화에는 **사용자 지정 데이터**를 사용하세요.

템플릿 편집

CSV를 다시 업로드하거나 Update Template APIdynamic_content 속성을 사용하여 업데이트하세요.

키의 특수 문자

키에 영숫자가 아닌 문자가 포함된 경우 해시 표기법을 사용하세요:
{{ dynamic_content.file_name["!the_row!"]["&the_column&"] }}
표준 영숫자 키에는 점 표기법을 사용하세요:
{{ dynamic_content.file_name.the_row.the_column }}

관련 문서