본문으로 건너뛰기

Webhook

Webhook이란?

폴링 (Polling)과 웹훅 (Webhook)

웹훅은 응용 프로그램이 실시간으로 이벤트를 수신하여 어떠한 처리를 하기 위한 일반적인 방법입니다.

예를 들어, 유저가 회원가입을 하였을 때 어떠한 처리를 해야할 경우가 있습니다. 이러한 경우 어떠한 독립적인 서비스에서는 유저의 회원가입이 이루어졌는지를 알 수 있는 방법이 없을 수가 있습니다. 이 때, 유저 데이터를 주기적으로 확인하여 데이터가 어떻게 변화하였는지 감지하는 방법이 있습니다. 이 방법을 폴링(Polling)이라고 합니다. 하지만 이 방법은 비효율적이며, 실시간으로 이벤트를 처리할 수 없는 문제가 있습니다. 반면 웹훅을 이용한다면 유저가 회원가입을 하였을 때 실시간으로 이벤트를 수신하여 어떠한 처리를 할 수 있습니다.

Notifly에서의 웹훅

웹훅은 특정 조건이 충족되면 한 시스템에서 다른 시스템으로 어떠한 메시지를 보내는 것입니다. Notifly에서는 이 조건이 일반적으로 다음과 같습니다.

  • 유저의 이벤트 발송
  • 예약 발송 (주기 발송) 시 예약된 시점 도달

이러한 조건이 충족되면, Notifly에서는 HTTP 요청을 통해 명시된 URL, HTTP method, HTTP 헤더, HTTP 본문을 전송합니다.

Prerequisites

웹훅을 수신하기 위해서는 다음과 같은 준비가 필요합니다.

  1. 웹훅을 수신할 수 있는 환경
    • 웹훅을 수신하기 위해서는 웹훅을 수신할 수 있는 서버가 필요하고, 이 서버는 public 네트워크에 연결되어 HTTP 요청을 수신할 수 있어야 합니다.
    • 알맞은 DNS 설정을 통해, 명시된 URL으로 Notifly 서버가 해당 서버에 도달할 수 있어야 합니다.
  2. 노티플라이 IP Whitelist 설정
    • Notifly 서버의 IP 주소로부터의 Inbound Traffic을 네트워크 정책에서 꼭 허용하도록 설정해주세요. Notifly 웹훅 발송 서버의 IP 주소의 목록은 다음과 같습니다.
      • 3.38.74.151
      • 43.201.228.103
      • 43.200.138.23

웹훅 캠페인 생성 및 메시지 개인화

웹훅 캠페인 생성

웹훅 캠페인은 개인화와 함께 사용하셔야 더욱 의미있는 결과를 얻을 수 있습니다. 웹훅 캠페인을 생성하기 위해서는 다음과 같은 정보를 입력해야 합니다. 메시지 개인화에 대한 자세한 정보는 메시지 개인화 섹션을 참고해주세요.

Build Webhook Campaign - 1
  • URL (필수) - 웹훅을 수신할 URL입니다. 필수로 입력해야 합니다.
  • HTTP Method - 웹훅을 수신할 때 사용할 HTTP Method입니다. 현재 GET, POST, PUT, DELETE를 지원합니다.
  • HTTP Headers - 웹훅을 수신할 때 함께 전송할 HTTP Header입니다. Key-Value 형태로 입력해야 합니다.
  • HTTP Body - 웹훅을 수신할 때 함께 전송할 HTTP Body입니다. GET 요청의 경우 body를 사용하실 수 없습니다.
디바이스 정보를 이용한 메시지 개인화

웹훅 채널은 디바이스 정보를 이용한 메시지 개인화가 불가능합니다.

메시지 개인화

노티플라이는 메시지 개인화를 위해 Liquid Template 언어를 사용합니다. 아래 웹훅 Body 예시에서는 유저의 프로퍼티를 이용하여 메시지를 개인화합니다.

{
"name": "{{ user['name'] }}",
"email": "{{ user['email'] }}"
}

위 경우, 만약 유저 프로퍼티에 name 또는 email이 없는 경우 해당 부분을 빈 문자열로 대체합니다.

JSON 형식의 Body를 사용하실 때에는, 반드시 유효한 JSON 형식으로 렌더링 되도록 개인화를 진행해주세요. Liquid 템플릿 언어에서 지원하는 JSON Tag를 사용하는 것도 간편하고 효과적입니다.

JSON Tag 사용 예시
{%- assign additional_properties = user["properties"] -%}
{%- if additional_properties -%}
{
"name": {{ user["name"] | default: "" | json }},
"email": {{ user["properties"] | json }}
}
{%- else -%}
{
"name": {{ user["name"] | default: "" | json }},
"properties": null
}
{%- endif -%}

유저의 데이터가

{
"name": "John Doe",
"properties": {
"age": 30
}
}

와 같을 때, 위 템플릿은 다음과 같이 렌더링됩니다.

{
"name": "John Doe",
"properties": {
"age": 30
}
}

만약 properties 가 비어있는 경우, 다음과 같이 렌더링됩니다.

{
"name": "John Doe",
"properties": null
}

메시지 개인화 테스트

  1. Liquid 템플릿 테스트
  • Liquid JS Playground 를 이용하여 템플릿 테스트 후 캠페인을 집행하시길 권장드립니다.
  1. Webhook 발송 테스트
  • URL, HTTP Method, HTTP Headers, HTTP Body를 입력한 후 '테스트 발송'을 클릭해주세요.
Test Webhook Campaign - 1
  • 발송할 유저 아이디를 입력하신 후, '테스트 발송'을 클릭해주세요.
Test Webhook Campaign - 2
  • 발송 결과를 탭하시면, 더 자세한 정보를 확인하실 수 있습니다.
Test Webhook Campaign - 3

Note

  1. 요청 응답 지연 시간이 5초 이상인 경우, 발송 실패로 처리됩니다.
  2. 응답 상태 코드가 2XX 인 경우, 발송 성공으로 처리되며 그 외의 경우는 발송 실패로 처리됩니다.