메인 콘텐츠로 건너뛰기
이벤트 스트림을 사용하면 OneSignal에서 선택한 대상으로 메시지 데이터를 실시간으로 전송할 수 있습니다. 이벤트 스트림은 OneSignal을 마케팅 생태계 내의 다른 제품에 연결하는 훌륭한 방법입니다. 팀이 해당 메시징을 트리거하고 기록을 유지하는 등 다양한 작업을 수행할 수 있습니다.

일반적인 사용 사례

  1. 고객 여정 매핑 및 개인화: CRM 또는 고객 데이터 플랫폼(CDP)으로 이벤트를 스트리밍하여 포괄적인 고객 프로필을 구축하고 다양한 접점에서 캠페인을 맞춤화합니다.
  2. 분석 및 보고: 메시지 이벤트(예: 전송, 열람, 클릭)를 데이터 웨어하우스로 전송하여 채널 전반의 참여 패턴 또는 장기 추세를 분석합니다.
  3. 규정 준수 및 규제 보고: 감사 및 규정 준수 목적으로 모든 메시지 전송 데이터를 데이터 웨어하우스로 스트리밍합니다.
  4. AI 및 예측 모델: 메시지 이벤트 데이터를 사내 AI 또는 예측 모델로 전송하여 포괄적인 고객 코호트를 생성하고 이탈 위험을 파악합니다. 예를 들어 이메일 구독 취소 또는 메시지 해제는 잠재적 이탈을 나타낼 수 있습니다.
  5. 마케팅 자동화: 참여 이벤트(메시지 열람 또는 클릭 등)를 다른 도구로 전송하여 사용자 여정의 다음 단계를 자동으로 트리거하거나 고객 프로필 및 최근 활동을 업데이트합니다.
  6. 데이터 분산: 중요한 고객 데이터는 종종 별도의 도구(고객 참여 플랫폼, CRM, 분석 도구 및 데이터 웨어하우스 등)에 있습니다. 이벤트 스트리밍은 이 데이터를 중앙 집중화하여 귀중한 퍼스트 파티 데이터에 대한 가시성을 높이고 더 빠른 수익 결과를 얻을 수 있습니다.
  7. 시스템 간 느린 통신: 다른 시스템으로 실시간 참여 이벤트를 전송하면 일괄 업데이트를 몇 시간 또는 며칠 기다리는 대신 이벤트가 발생한 직후 작업을 트리거할 수 있습니다. 이렇게 하면 수동 가져오기 또는 데이터 동기화에 대한 의존성이 제거됩니다.
  8. 지출 증가 및 기술 부채: 여러 중간 도구를 관리하는 대신 OneSignal을 데이터 웨어하우스에 직접 연결할 수 있습니다. 이렇게 하면 여러 통합 또는 사용자 지정 데이터 파이프라인 관리의 비용이 많이 드는 오버헤드가 줄어들고 기술 부채가 줄어들며 제품 및 마케팅을 위한 귀중한 기술 리소스가 보존됩니다.

기술 팀과 협력하는 방법

이벤트 스트림 설정은 기술 팀과의 협업이 필요합니다. 다음은 대화를 촉진하기 위한 몇 가지 팁입니다:
  1. 이점 설명: 이 데이터를 사용하기 위한 전략과 마케팅 캠페인을 강화하고 사용자 경험을 개인화하며 데이터를 통합하고 기술 부채를 줄일 수 있는 방법을 공유하세요.
  2. 범위 정의: 데이터를 전송할 위치, 추적할 이벤트, 예상 데이터 볼륨을 식별하세요. 이는 적절한 엔드포인트 설정을 구성하는 데 도움이 됩니다.
  3. 기술 문서 제공: OneSignal의 기술 문서 및 설정 지침을 공유하세요. 개발 팀은 수신자 엔드포인트와 OneSignal의 이벤트 스트림을 구성하여 데이터가 올바르게 라우팅되도록 해야 합니다.
  4. 데이터 볼륨 및 관리 논의: 시스템이 실시간 데이터 흐름을 처리할 수 있는지 확인하세요. 낮은 응답 시간을 유지하기 위해 API 핸들러가 추가 온라인 처리 없이 이벤트를 기록하는 것이 권장됩니다.
  5. 테스트 및 문제 해결: 실제 환경에 적용하기 전에 모든 것이 원활하게 작동하는지 확인하기 위해 테스트를 수행하세요.
기술 팀과 긴밀히 협력하면 이벤트 스트리밍의 힘을 활용하여 성장 전략을 강화할 수 있습니다.

설정

Data > Event Streams에서 OneSignal 애플리케이션에 대한 새 이벤트 스트림을 구성할 수 있습니다.

요구 사항

다음 요구 사항이 충족되지 않으면 이벤트를 전송할 수 없습니다:
  • 서버 HTTP(S) 서버를 가리키는 유효한 URL 또는 IP 주소
  • URL 및 IP 주소는 공개적으로 라우팅 가능해야 합니다
  • 도메인에는 인식된 최상위 도메인(예: “.com”, “.net”)이 포함되어야 합니다

이벤트 선택

이벤트 스트림을 트리거할 이벤트를 선택하려면 “Select Events”를 클릭하세요.

웹훅 트리거

이러한 이벤트와 함께 전송될 수 있는 데이터는 모두 충분히 유사하므로 동일한 이벤트 스트림을 통해 여러 채널에서 트리거된 이벤트를 전송할 수 있습니다. 다른 접근 방식은 보다 세밀한 제어 또는 전송되는 데이터 규모를 줄이기 위해 단일 채널 또는 이벤트에 대해 각각 여러 이벤트 스트림을 정의하는 것입니다.

이벤트 선택

이벤트 스트림 필터

하나 이상의 메시지 또는 템플릿의 식별자를 지정하여 이벤트를 추가로 세분화할 수 있으며, 이를 통해 앱 내의 특정 메시지와 관련된 이벤트만 받을 수 있습니다. 이벤트 스트림 필터링을 활성화하려면 아래 지침을 참조하세요.

템플릿별 이벤트 필터링

메시지 및 템플릿 식별자는 _Messages > Push, Emal, SMS 또는 Teamlates_로 이동하여 원하는 메시지 또는 템플릿의 작업 버튼을 클릭하고 작업 메뉴에서 Copy Message ID 또는 _Copy Template ID_를 선택하여 복사할 수 있습니다.

템플릿의 템플릿 ID 복사

또는 URL에서 직접 보고 있는 메시지/템플릿 식별자를 복사할 수 있습니다:
  • Template – https://dashboard.onesignal.com/apps/{APP_ID}/templates/{TEMPLATE_ID}
  • Push – https://dashboard.onesignal.com/apps/{APP_ID}/notifications/{MESSAGE_ID}
  • Email – https://dashboard.onesignal.com/apps/{APP_ID}/email/{MESSAGE_ID}
  • SMS – https://dashboard.onesignal.com/apps/{APP_ID}/sms/{MESSAGE_ID}

이벤트 스트림 구성

이벤트 스트림에 대한 HTTP 메서드, URL을 선택하고 헤더를 추가하세요. 여기에서 OneSignal과 시스템 간의 안전한 통신을 보장하기 위해 인증을 구성해야 합니다. URI 및 헤더에는 사용자 속성과 이벤트 스트림의 속성에서 가져온 Liquid 구문이 포함될 수 있습니다.

인증 헤더

엔드포인트에 대한 요청이 실제로 OneSignal에서 온 것인지 확인하기 위해 인증 헤더를 추가할 수 있습니다. 일반적인 인증 방법은 다음과 같습니다:
  • Authorization 헤더: Authorization 헤더를 추가하세요. 여기서 YOUR_TOKEN은 시스템 또는 타사에서 제공합니다:
    • Basic {{YOUR_TOKEN}}
    • Bearer {{YOUR_TOKEN}}
    • ApiKey {{YOUR_API_KEY}}
  • 사용자 지정 헤더: 다음과 같은 사용자 지정 헤더를 추가할 수도 있습니다:
    • X-API-Key: {{YOUR_API_KEY}}
참고: OneSignal은 암호화 서비스를 제공하지 않습니다

구성 테스트

테스트할 수 있는 쉬운 방법을 찾고 있다면 webhook.site를 사용하세요. 페이지 중앙에서 “Your unique URL”을 찾으세요. 해당 URL을 복사하여 이벤트 스트림 구성의 URL 필드에 사용하세요.

웹훅 구성

허용되지 않는 헤더

다음 헤더는 제한되어 있으며 설정할 수 없습니다.
  • content-length
  • referer
  • metadata-flavor
  • x-google-metadata-request
  • host
  • x-onesignal*

본문

이벤트 스트림의 본문은 JSON입니다. 본문 JSON은 개별 키/값 쌍 또는 편집 가능한 코드 블록으로 정의할 수 있습니다. 입력 방법을 변경하려면 본문 제목 아래의 첫 번째 드롭다운을 사용하고 사용자 지정 본문을 선택하세요.

이벤트 스트림 본문 옵션

오른쪽에서 이벤트 스트림 설정 중에 입력한 내용으로 작성된 cURL 요청 예시를 볼 수 있습니다

이벤트 스트림의 cURL 미리보기

개인화

사전 정의된 이벤트 스트림 데이터를 사용하여 이벤트 스트림의 모든 필드를 개인화할 수 있습니다. 이 데이터는 Liquid 구문을 사용하여 추가할 수 있습니다. 이를 통해 거의 모든 사용 사례에 이벤트 스트림을 사용할 수 있는 유연성을 얻을 수 있습니다.
개인화에 사용할 수 있는 모든 이벤트, 메시지 및 사용자 이벤트 데이터 목록은 이벤트 스트림 데이터를 참조하세요.

본문 예시

드롭다운에서 “Custom Body”를 선택하세요:
{
  "Event Data": {
    "event.kind": "{{ event.kind }}",
    "event.id": "{{ event.id }}",
    "event.timestamp": "{{ event.timestamp }}",
    "event.datetime": "{{ event.datetime }}",
    "event.app_id": "{{ event.app_id }}",
    "event.subscription_device_type": "{{ event.subscription_device_type }}",
    "event.subscription_id": "{{ event.subscription_id }}",
    "event.onesignal_id": "{{ event.onesignal_id }}",
    "event.external_id": "{{ event.external_id }}"
  },
  "Message Data": {
    "message.id": "{{ message.id }}",
    "message.name": "{{ message.name }}",
    "message.title": "{{ message.title.en }}",
    "message.contents": "{{ message.contents.en }}",
    "template_id": "{{ message.template_id }}",
    "message.template_id": "{{ message.template_id }}",
    "message.url": "{{ message.url }}",
    "message.app_url": "{{ message.app_url }}",
    "message.web_url": "{{ message.web_url }}"
  }
}

사용자 지정 본문

JSON에서 Liquid 구문 사용

JSON 내에서 Liquid 구문을 사용할 때 적절한 인용 방법은 데이터 유형에 따라 다릅니다: JSON 형식 지침
  • 문자열 → 따옴표로 감싸야 합니다.
  • 숫자 → 따옴표로 감싸지 않습니다.
  • 객체 → 따옴표로 감싸지 않아야 합니다.
예시

문자열

✅ 올바름
// Wrap string values in quotes
{
  "user_id": "{{ user.onesignal_id }}"
}
❌ 잘못됨
{
  "user_id": {{ user.onesignal_id }}
}

숫자 및 불리언

✅ 올바름
// Don't wrap numbers or booleans in quotes
{
  "user_score": {{ user.tags.score }}
}
❌ 잘못됨
{
  "user_score": "{{ user.tags.score }}"
}

객체

✅ 올바름
// Don't wrap objects in quotes.
{
  "user_data": {{ user.tags }}
}
❌ 잘못됨
{
  "user_data": "{{ user.tags }}"
}
Liquid 구문에서 다국어 조건부 처리에 대한 모범 사례 언어 기반 조건부와 관련된 문제를 방지하려면
  1. 직접 언어 확인 사용: 더 나은 호환성을 위해 userLang과 같은 변수가 아닌 조건부에서 항상 user.language를 직접 확인하세요.
  2. 간단하게 시작: 기본 구문으로 시작한 다음 점진적으로 복잡성을 추가하세요.
  3. 과도한 중첩 방지: 구문 분석 문제를 방지하기 위해 조건부를 평평하게 유지하세요.
  4. 먼저 기본 구두점 테스트: 특수 문자를 사용하기 전에 간단한 문장과 구두점으로 시작하세요.
  5. 대체 사용: 번역이 누락된 경우에 대비하여 기본 언어(예: 영어)를 확보하세요.
  6. 표준 키 사용: 신뢰성을 위해 content/title/en과 같은 표준 OneSignal 키를 사용하세요.
이 접근 방식은 구문 분석 오류를 최소화하고 시스템과의 호환성을 보장합니다.
Liquid 구문을 사용하여 메시지를 개인화하는 방법에 대한 세부 정보 및 옵션은 Liquid 구문 사용 가이드를 확인하세요.

결과 및 디버깅

Report 탭 아래의 이벤트 스트림 리포트 페이지에서 일정 기간 동안 이벤트 스트림의 성능을 확인할 수 있습니다. 여기에는 전체 기간 수치, 이벤트 스트림의 현재 상태, 훅이 받은 응답 유형을 보여주는 시계열 데이터가 포함됩니다. 200 범위의 HTTP 응답은 이벤트가 성공적으로 수신되었음을 나타내고 400 및 500 범위의 응답은 오류를 나타냅니다. 시간 초과는 반대쪽 서버가 합리적인 시간 내에 응답하지 못했기 때문에 OneSignal이 연결을 닫고 실패로 간주했음을 의미합니다. Logs 탭에서 최근 요청 샘플을 확인하여 더 자세한 정보를 볼 수 있습니다. 여기에는 실제 요청과 반대쪽의 응답(해당하는 경우)이 표시됩니다. 이벤트 스트림에 문제가 있는 경우 먼저 확인해야 할 좋은 장소입니다. 이벤트 스트림을 변경/업데이트해야 하는 경우 양식 페이지에서 편집하고 테스트 요청을 전송하여 올바르게 작동할 때까지 필요한 전체 세부 정보를 확인할 수 있습니다.

이벤트 스트림 로그 및 메트릭

재시도 / 비활성화

복구 가능한 이유(예: 상태 코드 429)로 이벤트 스트림 요청이 실패하면 OneSignal은 짧은 지연 후 이벤트를 다시 전송하려고 시도합니다. 이는 요청 사이의 지연이 증가하면서 몇 번 발생합니다. 충분한 재시도가 연속으로 실패하면 훅은 ‘영구적으로 실패’로 표시되고 더 이상 재시도되지 않습니다. 너무 많은 개별 요청이 연속으로 실패하면 수신 측의 문제 때문일 가능성이 높습니다. 수신 측에 오류가 있거나 무언가를 변경/비활성화했을 수 있습니다. OneSignal은 특정 지점까지 요청을 계속 전송하지만 요청이 계속 실패하면 OneSignal에서 이벤트 스트림을 비활성화할 수 있습니다. 이런 일이 발생하면 다시 활성화하기 전에 이벤트 스트림을 문제 해결, 수정 및 테스트하는 데 시간을 할애하세요. 성능이 낮은 API는 이벤트 스트림 비활성화로 이어질 수 있습니다. 이벤트 스트림을 수집하는 API가 메시지 전송에 의해 생성되는 이벤트의 볼륨을 처리할 수 있어야 합니다. 앱에서 생성되는 메시지 전송 볼륨을 검토하면 API에 필요한 성능이 반영됩니다. 다른 온라인 처리 없이 이벤트를 기록하도록 이벤트 스트림을 수신하는 API를 권장합니다. 이렇게 하면 응답 시간이 낮게 유지되고 지연 관련 문제가 방지됩니다. API의 느린 응답 시간 또는 상태 코드 429 응답은 이벤트 백로그를 발생시킬 수 있습니다. 일관된 이벤트 백로그는 OneSignal이 이벤트 스트림을 비활성화하도록 하여 필요한 처리량을 처리하도록 API를 업데이트할 수 있습니다. OneSignal은 이벤트 스트림이 상당한 양의 실패한 이벤트를 경험하기 시작할 때(아직 비활성화되지 않음) 앱 관리자 및 조직 관리자에게 이메일을 보내고 너무 많은 이벤트 전송에 실패하여 이벤트 스트림이 비활성화될 때 이메일을 보냅니다. 이벤트 스트림 색인 페이지에 OneSignal 사용자에게 이벤트 스트림 중 하나의 문제를 알리는 배너도 표시됩니다. 각 이벤트 스트림에는 각 이벤트에 대한 고유한 event.id가 있습니다. 이것은 헤더 또는 메시지 본문에서 사용하여 동일한 요청이 들어오는 경우 확인하고 잠재적으로 중복 제거할 수 있습니다.

성공을 위한 팁

  • 일반적으로 이벤트 스트림을 타사 서비스가 아닌 자체 서버에 연결하려고 합니다.
    • 타사에 직접 연결하는 것은 잘못된 것이 아니지만 다음은 관리하기가 더 어려울 수 있습니다: 구성/디버그가 더 어려울 것입니다
  • 요청 볼륨은 OneSignal에서 관리되지 않습니다.
    • 이벤트 스트림 이벤트는 사용자가 여정의 단계를 거치는 속도만큼 빠르게 전송되며 이는 다른 서비스를 압도하거나 속도 제한에 도달하거나 예기치 않게 청구서를 발생시킬 수 있습니다. 이는 SMS와 같은 다른 메시징 채널을 사용하려고 할 때 특히 일반적입니다. 이벤트 스트림의 유연성은 OneSignal이 이벤트 스트림으로 무엇을 달성하려고 하는지 알지 못한다는 것을 의미하므로 이벤트 스트림 요청을 수락한 다음 타사 연결 제한, 속도 제한 및 큐를 올바르게 처리하는 간단한 서비스를 만들고 싶을 수 있습니다.
  • 많은 서비스에는 공개 HTTP API가 있으므로 이벤트 스트림으로 연결할 수 있습니다. API 문서와 HTTP 요청을 만드는 방법의 예를 찾아 시작할 올바른 위치를 찾으세요.

메시지 이벤트 데이터 제한

Journeys 또는 API를 통해 전송된 메시지에 대한 데이터는 시스템에서 30일 동안만 사용할 수 있습니다. 즉, Journey 또는 API 메시지가 전송된 후 30일 이상 경과한 메시지 이벤트(클릭, 열람, 구독 취소 등)는 이벤트 스트림에서 사용할 수 없습니다. 이는 분석에서 빈 데이터 또는 누락된 데이터로 나타날 수 있습니다. 이 제한을 해결하려면 클릭/열람/구독 취소 이벤트의 message_id를 동일한 message_id를 가진 원래 전송 이벤트와 연관시킬 수 있습니다. 원래 sent 이벤트에는 관련 메시지 데이터(제목, 템플릿 등)가 있어야 합니다.

테스트

https://webhook.site/와 같은 도구를 사용하고 POST 메서드를 사용하여 이벤트 스트림의 URL 매개변수에 제공된 Your unique URL을 설정하세요.

URL이 webhook.site의 "Your unique URL"과 일치합니다

추적하려는 이벤트를 설정하세요. 이 예에서는 푸시 이벤트를 사용하지만 테스트에는 모두 작동합니다.

푸시 메시지 이벤트가 선택되었지만 테스트에는 모두 사용할 수 있습니다.

이 예에서는 위의 본문 예시를 사용합니다. 이벤트를 저장하고 실제 환경으로 설정하세요. 이벤트를 트리거하는 메시지를 보내세요. webhook.site에서 다음 데이터와 함께 이벤트를 볼 수 있습니다:

webhook.site 사용 예시

다음을 보여줍니다:
  • Host: 요청이 온 IP 주소입니다. 가능한 IP 목록은 REST API 개요를 참조하세요.
  • Request Content 이벤트 스트림의 본문 내에서 전송된 데이터입니다.