메인 콘텐츠로 건너뛰기
Data Feeds를 사용하면 전송 시 API에서 실시간 데이터를 메시지로 직접 가져올 수 있습니다. 이를 통해 OneSignal에 데이터를 미리 로드하지 않고도 고도로 개인화된 콘텐츠를 전달할 수 있습니다. 다음과 같이 데이터가 자주 변경되는 경우 Data Feeds를 사용하세요:
  • 사용자의 현재 보상 잔액
  • 최신 주문 상태
  • 개인화된 제품 추천
다른 개인화 방법(태그 또는 동적 콘텐츠)은 정적 데이터에 적합합니다. Data Feeds는 실시간으로 빠르게 변경되는 값에 가장 적합합니다.
Data Feeds는 현재 Journeys를 통해 전송되는 이메일 메시지에만 사용할 수 있습니다. 다른 채널이 필요하신가요? 이 짧은 설문조사를 작성해 주세요.

Data Feeds 작동 방식

  1. Data Feed 만들기 – OneSignal이 API에 연결하는 방법을 구성합니다.
  2. 메시지 템플릿에 Data Feed 첨부.
  3. Liquid 구문을 사용하여 메시지에 응답 필드 삽입.
  4. 전송 시, OneSignal은 각 수신자에 대해 API 호출을 수행하고 응답을 파싱한 다음 데이터를 메시지에 삽입합니다.

예시: 보상 포인트 표시

각 고객에게 보상 잔액을 표시하려고 한다고 가정해 보겠습니다:
Hi {{ first_name }},

You have {{ data_feed.rewards.points }} points!
Your membership status is {{ data_feed.rewards.status_level }}.

Keep shopping to earn more points!
Sarah가 이 이메일을 받으면 Liquid 변수가 실제 포인트 잔액과 멤버십 상태로 대체됩니다. 다음 섹션에서는 이 예제를 단계별로 설정하는 방법을 안내합니다.

Data Feed 만들기 및 사용

1. Data Feed 구성 설정

사이드바에서 Data > Data Feeds로 이동하여 기존 Data Feeds 목록을 확인하고 새 Data Feed를 만드세요. 각 Data Feed에는 다음이 있어야 합니다:
  • Name: 피드를 구별하는 데 도움이 되는 “Customer Rewards API”와 같은 설명적인 이름. 고유한 이름을 권장하지만 필수는 아닙니다.
  • Alias: Liquid 구문에서 사용할 rewards와 같은 짧은 식별자(예: {{ data_feed.rewards.points }}). 고유해야 하며 소문자 영숫자만 사용하고 공백이나 특수 문자는 사용할 수 없습니다.
  • Method: OneSignal이 API에 연결하는 데 사용하는 HTTP 메서드. 일반적으로 GET이지만 POST도 지원됩니다.
  • URL: API 엔드포인트. Liquid 구문을 지원하므로 OneSignal이 사용자별 데이터를 가져올 수 있습니다.
예를 들어, 보상 엔드포인트는 URL 매개변수로 (OneSignal에 저장된) 사용자의 external_id를 수락할 수 있습니다:
https://acme.com/customers/user_id={{ external_id }}/rewards
  • Headers: API에 필요한 키-값 쌍(예: 인증 토큰). Liquid 구문을 지원합니다.
  • Body: 선택적 JSON 요청 본문. Journey 웹훅과 동일하게 Liquid 구문을 지원합니다.
예를 들어, API가 URL 대신 요청 본문에 사용자 ID를 요구할 수 있습니다:
{
	"customer_id": "{{ subscription.external_id }}"
}
완전한 Data Feed 구성은 다음과 같이 보일 수 있습니다:
Data Feed configuration showing name, alias, method, URL, and headers
프로덕션에서 사용하기 전에 피드를 테스트하세요. Data Feed 테스트는 테스트 구독을 대상으로 실행되므로, 해당 구독의 속성이 API에서 실제 결과를 반환하는지 확인하세요.
마지막으로 새 Data Feed를 활성화하여 사용할 준비를 하세요.

2. 메시지 템플릿에 Data Feed 첨부

OneSignal이 사용할 수 있도록 메시지 템플릿에 Data Feed를 첨부합니다.
  1. Messages > Templates로 이동
  2. Message 섹션에서 Personalization 버튼 선택
Personalization button in the message template editor
  1. Data Feeds를 켜고 피드 선택
Data Feeds toggle and feed selector in the message composer
  1. 템플릿 저장

3. 메시지에서 데이터 사용

Liquid 구문을 사용하여 메시지의 어디에나 응답 데이터를 삽입합니다. 보상 예제를 계속하면, external_ida1-b2c3인 Sarah의 API 응답은 다음과 같을 수 있습니다:
{
	"external_id": "a1-b2c3",
	"points": 193,
	"status_level": "Gold"
}
포인트 수와 상태 레벨을 삽입하려면 점 표기법을 사용하여 Data Feed 별칭과 응답 필드를 참조하세요:
You have {{ data_feed.rewards.points }} points!
Your membership status is {{ data_feed.rewards.status_level }}.
이것은 OneSignal에게 다음을 알려줍니다:
  • Data Feed 사용
  • rewards Data Feed 사용
    • 참고: rewards 피드는 수신자의 external_id로 API를 호출하는 방법을 알고 있습니다
  • 응답에서 points 항목(193)과 status_level 항목(Gold)의 값을 삽입

요구 사항 및 제한 사항

API는 다음을 수행해야 합니다:
  • 헤더의 인증 토큰으로 단일 단계 인증 수락
  • 빠르게 응답. 250ms 미만 권장(전송 속도에 직접 영향을 미침)
  • JSON 반환. 현재 다른 형식은 지원되지 않습니다.
  • 전송 볼륨 처리. API에 낮은 속도 제한이 있으면 메시지 전달이 느려집니다.
  • 적절한 크기의 페이로드 반환. 최상의 성능을 위해 응답을 50KB 미만으로 유지하세요.
현재 제한 사항:
  • 템플릿당 하나의 Data Feed. 단일 API 응답으로 필요한 모든 데이터를 가져오세요.
  • 메시지당 Data Feed당 하나의 API 호출.
  • Journeys만 해당. 아직 다른 전송 방법에는 사용할 수 없습니다.
  • 연쇄 호출 없음. 한 Data Feed의 페이로드를 사용하여 다른 Data Feed를 호출할 수 없습니다.
템플릿당 여러 Data Feed 또는 다른 채널 지원이 필요하신가요? 사용 사례를 공유해 주세요. 기능 우선순위 결정에 도움이 됩니다.

API 설정

Data Feed를 만들기 전에 API가 다음 요구 사항을 처리할 수 있는지 확인하세요:

인증

API는 헤더를 통해 인증을 수락해야 합니다:
Authorization: Bearer YOUR_TOKEN
또는
X-API-Key: YOUR_KEY

JSON 요청 본문

요청에 본문을 포함해야 하는 경우 API는 JSON을 수락해야 합니다. 이는 헤더에 Content-Type: application/json을 포함해야 할 수 있음을 의미합니다.

JSON 응답

API는 JSON 객체를 반환해야 합니다. 일반적으로 이는 헤더에 Accept: application/json이 포함됨을 의미합니다.

개인화 매개변수

일반적으로 다음과 같이 URL에 사용자 식별자를 전달합니다:
https://api.example.com/users/{{external_id}}/data
https://api.example.com/rewards?email={{email | url_encode}}
그리고/또는 본문에서:
{
	"customer_id": "{{ external_id }}",
	"email": "{{ subscription.email }}"
}
이 데이터가 OneSignal에 존재하는지 확인하세요(일반적으로 태그지만 사용자 지정 이벤트 속성과 같은 다른 옵션도 사용할 수 있습니다).

속도 제한

API의 속도 제한을 고려하세요. 10,000명의 사용자에게 전송하면 빠른 연속으로 10,000개의 API 호출이 발생합니다. API가 이 볼륨을 처리할 수 있는지 확인하세요.

오류 처리

API가 오류를 반환하거나 사용자에 대한 데이터가 없는 경우 해당 수신자에게 메시지가 전송되지 않습니다. API가 예상되는 모든 사용자에 대한 데이터를 반환하는지 확인하세요.

시작 체크리스트

Data Feeds를 구현하기 전에 다음 질문에 답하세요:
  • 메시지에 어떤 데이터를 표시하고 싶습니까? API에서 채울 항목이 식별된 간단한 개요에서 역으로 작업하면 생각을 정리하는 데 도움이 됩니다.
  • 이 데이터는 단일 API 엔드포인트를 통해 사용할 수 있습니까?
  • API 요청을 어떻게 인증합니까?
  • 개인화된 데이터를 가져오는 데 어떤 식별자 또는 다른 데이터 항목을 사용합니까?
  • 해당 식별자가 이미 OneSignal에 저장되어 있습니까? 그렇지 않은 경우 어떻게 채워집니까?
  • API가 생성할 요청 볼륨을 처리할 수 있습니까?
  • API에 사용자에 대한 데이터가 없으면 어떻게 됩니까?

예제 및 고급 사용 사례

Data Feeds는 Liquid 구문과 함께 사용하거나 다른 기능과 결합하여 창의적인 방식으로 더 복잡한 개인화를 생성할 수 있습니다.
사용자 장바구니의 항목 배열과 장바구니 총 금액을 반환하는 Data Feed cart가 있다고 가정해 보겠습니다:
{
  "items": [
    {
      "name": "Blue Running Shoes",
      "price": 84.00,
      "image_url": "https://acme.com/blue-running-shoes.png"
    },
    {
      "name": "Protein Bar",
      "price": 5.99,
      "image_url": "https://acme.com/protein-bar.png"
    }
  ],
  "total": 89.99
}
장바구니의 각 항목과 장바구니 총액을 표시하려면 Liquid에서 for 루프를 사용할 수 있습니다:
<ul>
  {% for item in data_feed.cart.items %}
    <li>
      <strong>{{ item.name }}</strong><br>
      ${{ item.price }}<br>
      <img src="{{ item.image_url }}" alt="{{ item.name }}">
    </li>
  {% endfor %}
</ul>

<p>Cart total: ${{ data_feed.cart.total }}</p>

다음과 같은 결과가 나타납니다:
- Blue Running Shoes
- $84.00
- <running shoes image>
- Protein Bar
- $5.99
- <protein bar image>
Cart total: $89.99
이메일 블록 편집기를 사용하는 경우 이러한 종류의 복잡한 Liquid 구문을 삽입할 때, 특히 이미지나 링크를 포함해야 하는 경우 최상의 결과를 얻으려면 사용자 지정 HTML 블록 요소를 사용하세요.
사용자 지정 이벤트를 사용하여 이 장바구니 포기 이메일을 트리거하는 방법이 궁금하신가요? 사용자 지정 이벤트 속성 탭에서 전체 워크플로를 확인하세요.

FAQ

Data Feed 값이 메시지에 표시되지 않습니다. 무엇을 확인해야 하나요?

다음 순서대로 확인하세요:
  1. Data Feed가 템플릿에 첨부되어 있는지 확인합니다(Personalization > Data Feeds 아래).
  2. Liquid 구문이 JSON 응답 구조와 정확히 일치하는지 확인합니다 — {{ data_feed.<alias>.<field> }}.
  3. 동일한 식별자로 수동으로 호출했을 때 API 엔드포인트가 유효한 JSON을 반환하는지 확인합니다.
  4. 수신자가 OneSignal에 필요한 식별자(예: external_id)를 가지고 있는지 확인합니다.

메시지가 천천히 전송되는 이유는 무엇입니까?

Data Feed API 호출은 모든 수신자에 대해 전송 시 실행됩니다. API가 느리게 응답하거나 동시 요청을 처리할 수 없으면 메시지 전달이 비례적으로 느려집니다. 응답 시간 250ms 미만을 목표로 하고 인프라가 전송 볼륨을 처리할 수 있는지 확인하세요.

일부 수신자가 메시지를 받지 못하는 이유는 무엇입니까?

수신자에 대한 Data Feed API 호출이 실패하면(404, 타임아웃 또는 데이터 없음으로 인해) OneSignal은 해당 수신자를 건너뜁니다. Data Feed 구성의 오류 로그와 자체 API 로그에서 실패를 확인하세요. 해당 사용자가 OneSignal에 필요한 식별자를 가지고 있는지 확인하세요.

템플릿에서 하나 이상의 Data Feed를 사용할 수 있나요?

현재는 불가능합니다. 각 템플릿은 하나의 Data Feed를 지원합니다. 단일 API 응답으로 필요한 모든 데이터를 가져오세요. 여러 피드가 필요한 경우 사용 사례를 공유해 주세요.

Data Feeds를 푸시 알림이나 SMS에 사용할 수 있나요?

아니요. Data Feeds는 현재 Journeys를 통해 전송되는 이메일 메시지에만 사용할 수 있습니다. 추가 채널 지원이 계획되어 있습니다 — 우선순위 결정에 도움이 되도록 사용 사례를 공유해 주세요.

메시지 전송 시 API가 다운되면 어떻게 됩니까?

OneSignal은 Data Feed 호출이 실패한 수신자를 건너뜁니다. 해당 수신자에게 메시지가 전송되지 않으며 대체 값도 삽입되지 않습니다. 예약된 전송 중에 API 가동 시간과 오류율을 모니터링하세요.

관련 페이지

Liquid 구문

OneSignal 메시지에서 Liquid 템플릿을 위한 전체 참조입니다.

Journeys

Data Feed 이메일을 트리거하는 자동화된 메시지 워크플로를 구축하세요.

사용자 지정 이벤트

Journey를 트리거하고 Data Feed URL에 이벤트 속성을 전달하세요.

메시지 개인화

태그, Liquid, 동적 콘텐츠, Data Feeds 등 모든 개인화 방법 개요입니다.