메인 콘텐츠로 건너뛰기

개인화 작동 방식

Liquid 구문을 사용하여 메시지, 템플릿, Journey WebhookEvent Stream에 사용자 지정 데이터를 추가할 수 있습니다. 데이터는 다음에서 가져올 수 있습니다:
  • Data Feed: API의 실시간 데이터.
  • Custom Event: Journey 메시지를 개인화하기 위한 실시간 사용자 이벤트.
  • 속성 및 Tag: 내장된 사용자, Journey, 메시지, 템플릿, 앱 또는 조직 값.
  • API: custom_data: Create Message API에 직접 전달하는 사용자 지정 데이터.
  • 동적 콘텐츠: 대시보드 업로드를 통한 CSV 기반 개인화.

주요 고려 사항

개인화는 사용자가 앱과 더 깊이 연결되도록 도와 참여 및 수익을 잠재적으로 증가시킵니다. 일반적인 예는 메시지에 사람의 이름이나 특정 정보(장바구니 포기 항목과 같은)를 넣는 것이지만 사용 사례는 무한합니다. 목표는 무엇인가요? 메시지에서 무엇을 보내려고 하나요? 예:
  • 이름 또는 ID와 같은 사용자 속성 추가
  • 청구서 또는 OTP 표시
  • CSV에서 동적 콘텐츠 보내기
데이터는 어디에 있나요?
  • 데이터가 속성 또는 태그와 같은 OneSignal에 저장되어 있나요?
  • 데이터가 자체 데이터베이스에 저장되어 있나요?
  • 백엔드에서 OneSignal로 데이터를 전달해야 하나요?
메시지를 어떻게 보내려고 하나요?
  • 일회성 메시지: 서버에서 또는 OneSignal 대시보드를 통해 메시지를 보내나요?
  • 반복 메시지: Journey 또는 기타 자동화된 워크플로를 사용하나요?
예:
  • 목표: 사용자 로그인을 돕기 위해 일회용 비밀번호를 보냅니다.
  • 데이터:
    • 백엔드에 저장된 OTP.
    • OneSignal에 태그로 저장된 사용자 이름.
    • OneSignal에 속성으로 저장된 External ID.
  • 보내기:
    • REST API를 사용하여 서버에서.
    • Journey를 사용하여 자동화된 워크플로에서.
이 예제의 자세한 연습은 확인, 매직 링크 및 OTP 예제 튜토리얼에서 사용할 수 있습니다.아래에서 더 많은 튜토리얼 예제를 참조하세요.

데이터 소스

개인화를 위해 사용 가능한 옵션입니다.

동적 콘텐츠

개인화에 대한 이 현재 가이드는 메시지, 템플릿, Journey 및 Event Stream에 동적 콘텐츠를 추가하는 방법을 설명합니다. OneSignal은 자체 데이터베이스의 데이터를 기반으로 메시지를 사용자 지정하기 위해 CSV 데이터를 업로드하는 방법도 제공합니다. 자세한 내용은 동적 콘텐츠를 참조하세요.

Data Feed

Data Feed는 전송 시 API에서 메시지로 직접 실시간 데이터를 가져오는 방법입니다. 템플릿을 데이터 소스에 연결하기만 하면 서버에서 데이터를 가져와 메시지에 삽입합니다.

Custom Event

Journey에서 사용되는 템플릿 내에서 Custom Event를 참조하세요. Journey 구성에 따라 사용자를 대신하여 하나 이상의 Custom Event를 저장할 수 있습니다. Liquid 구문을 사용하여 이러한 저장된 이벤트의 속성을 표시하거나 이벤트를 기반으로 메시지의 일부를 조건부로 표시할 수 있습니다.
  • Custom Event Properties
  • Example Custom Event Structure
  • Using Events in Templates
journey.first_event
이벤트 트리거 Journey의 경우 이것은 항상 사용자가 Journey에 들어가도록 한 이벤트입니다.Journey의 진입 규칙이 이벤트 트리거가 아닌 경우 이것은 Wait Until 조건과 일치하는 첫 번째 이벤트입니다.
{% assign event = journey.first_event %}
journey.last_event
저장된 가장 최근의 Custom Event입니다. 저장된 Custom Event가 하나뿐인 경우 first_eventlast_event는 동일한 것을 반환합니다.
{% assign event = journey.last_event %}
journey.event.most_recent_event_name
주어진 이름을 가진 가장 최근의 이벤트입니다(참조하려는 이벤트의 이름으로 most_recent_event_name을 교체하세요). 동일한 이벤트가 여러 번 사용되는 경우 가장 최근의 인스턴스를 반환합니다. 예: purchase.
{% assign event = journey.event.purchase %}
특수 문자(예: 공백)의 경우 이벤트 이름에 영숫자가 아닌 문자가 포함되어 있으면 hash notation을 사용하세요. 예를 들어 이벤트 이름이 “order status”인 경우 journey.event["order status"]로 참조할 수 있습니다.
{% assign event = journey.event["order status"] %}
journey.all_events
사용자에 대해 이 Journey에 저장된 모든 이벤트의 배열을 수신된 순서대로 제공합니다. for 루프를 사용하여 반복할 수 있습니다.
{% for event in journey.all_events %}
  {{ event.name }}
{% endfor %}
first_eventlast_event는 각각 all_events[0]all_events[-1]의 축약형입니다.

속성

OneSignal에 저장된 미리 정의된 필드입니다.
속성은 In-App 메시지 또는 Live Activity 내에서 대체할 수 없습니다.

User & Subscription 속성

데이터에 액세스해야 하는 위치에 따라 제공된 단계를 따르세요.
  • Properties available in messages & templates
  • Properties available in Journey Webhooks & Event Streams
메시지 및 템플릿에서 Subscription 수준의 속성에 액세스하려면 subscription 객체를 사용하세요. 태그는 키 이름을 통해 직접 액세스할 수도 있습니다. 예:
Hi {{ first_name | default: "friend" }}!
Congrats on reaching level {{ level | default: "1" }}!
User A에 대해 first_name: Jonlevel: 5 태그가 있고 User B에 대해 first_name: Jefflevel: 100 태그가 있는 경우 각 사용자는 메시지에서 자신의 이름과 레벨을 보게 됩니다. 그렇지 않으면 기본값이 표시됩니다.
subscription.external_id
Subscription과 연결된 External ID입니다.
Your user ID is {{ subscription.external_id }}.
subscription.email
메시지가 전송되는 이메일 Subscription의 이메일 주소입니다.
Thanks for subscribing with email {{ subscription.email }}.
subscription.phone_number
메시지가 전송되는 SMS Subscription의 전화번호입니다.
Thanks for subscribing with phone number {{ subscription.phone_number }}.
subscription.language
사용자의 언어 코드입니다.
Preferred language: {{ subscription.language }}
subscription.unsubscribe_token
Unsubscribe email with token API와 함께 사용되는 토큰입니다.
liquid
Unsubscribe: https://your-domain.com/unsubscribe?token={{ subscription.unsubscribe_token }}

Journey 속성

journey 객체는 Journey 이름을 추적하거나 Journey에서 사용되는 템플릿 내에서 Custom Event를 참조하는 데 유용합니다.
journey.name
Journey의 이름입니다.
JSON
{
  "journey.name": "{{ journey.name }}"
}

Message 속성

message 객체는 백엔드에서 전송된 custom_data에 액세스하거나 Event Stream으로 메시지의 속성을 추적하는 데 유용합니다.
message.id
OneSignal 메시지 ID입니다.
JSON
{
  "message.id": "{{ message.id }}"
}
message.name
메시지의 이름입니다.
JSON
{
  "message.name": "{{ message.name }}"
}
message.template_id
OneSignal 템플릿 ID입니다.
JSON
{
  "message.template_id": "{{ message.template_id }}"
}

Template 속성

template 객체는 메시지를 보내는 데 사용된 템플릿에 대한 세부 정보에 액세스하는 데 유용합니다.
template.id
OneSignal 템플릿 ID입니다.
JSON
{
  "template.id": "{{ template.id }}"
}
template.name
템플릿의 이름입니다.
JSON
{
  "template.name": "{{ template.name }}"
}

OneSignal 속성

apporg 객체는 메시지를 보낸 조직에 대한 세부 정보에 액세스하는 데 유용합니다.
app.id
OneSignal 앱 ID입니다.
JSON
{
  "app.id": "{{ app.id }}"
}
app.name
OneSignal 앱의 이름입니다.
JSON
{
  "app.name": "{{ app.name }}"
}
org.id
OneSignal 조직 ID입니다.
JSON
{
  "org.id": "{{ org.id }}"
}
org.name
OneSignal 조직의 이름입니다.
JSON
{
  "org.name": "{{ org.name }}"
}

API custom_data

custom_dataCreate message API를 사용하여 백엔드에서 직접 개인화를 추가하세요. 단계:
  1. 템플릿 만들기
  2. {{ message.custom_data.key }} 형식으로 Liquid 구문 사용
  3. custom_data 객체와 template_id로 API 요청 보내기

예제: Flat JSON

Template
Your invoice for {{message.custom_data.product_name}} is ready.
URL: https://your-domain.com/invoice={{message.custom_data.invoice_id}}
API Request
{
  "app_id": "YOUR_APP_ID",
  "template_id": "YOUR_TEMPLATE_ID",
  "include_email_tokens": ["THE_USER_EMAIL"],
  "custom_data": {
    "invoice_id": "463246732",
    "product_name": "Widget"
  }
}
고객이 보는 내용:
  • “Your invoice for Widget is ready.”
  • 최종 URL: https://your-domain.com/invoice=463246732

예제: Array 데이터

Template
Your {{message.custom_data.cart_items[0].item_name}} is waiting for you!
Image: {{message.custom_data.cart_items[0].image_url}}
API Request
{
  "app_id": "YOUR_APP_ID",
  "template_id": "YOUR_TEMPLATE_ID",
  "include_email_tokens": ["THE_USER_EMAIL"],
  "custom_data": {
    "cart_items": [
      {
        "item_name": "sweater",
        "img_url": "https://.../sweater.png"
      },{
        "item_name": "socks",
        "img_url": "https://.../socks.png"
      }
    ]
  }
}
고객이 보는 내용:
  • “Your sweater is waiting for you!”
  • 이미지: https://.../sweater.png

예제: 대량 개인화

하나의 요청으로 여러 사용자에 대해 단일 메시지를 개인화하려면:
Template
{% assign eid = message.custom_data.users[subscription.external_id] %}
Hi {{ eid.first_name }}, you have {{ eid.points }} points. Your level is {{ eid.level }}.
API Request
{
  "app_id": "YOUR_APP_ID",
  "template_id": "YOUR_TEMPLATE_ID",
  "include_aliases": {
    "external_id": ["user123", "user456"]
  },
  "custom_data": {
    "users": {
      "user123": { "first_name": "John", "points": "150", "level": "Gold" },
      "user456": { "first_name": "Sarah", "points": "200", "level": "Platinum" }
    }
  }
}
고객이 보는 내용:
  • “Hi John, you have 150 points. Your level is Gold.”
  • “Hi Sarah, you have 200 points. Your level is Platinum.”

튜토리얼