Webhook
Webhook이란?
폴링 (Polling)과 웹훅 (Webhook)
웹훅은 응용 프로그램이 실시간으로 이벤트를 수신하여 어떠한 처리를 하기 위한 일반적인 방법입니다.
예를 들어, 유저가 회원가입을 하였을 때 어떠한 처리를 해야할 경우가 있습니다. 이러한 경우 어떠한 독립적인 서비스에서는 유저의 회원가입이 이루어졌는지를 알 수 있는 방법이 없을 수가 있습니다. 이 때, 유저 데이터를 주기적으로 확인하여 데이터가 어떻게 변화하였는지 감지하는 방법이 있습니다. 이 방법을 폴링(Polling)이라고 합니다. 하지만 이 방법은 비효율적이며, 실시간으로 이벤트를 처리할 수 없는 문제가 있습니다. 반면 웹훅을 이용한다면 유저가 회원가입을 하였을 때 실시간으로 이벤트를 수신하여 어떠한 처리를 할 수 있습니다.
Notifly에서의 웹훅
웹훅은 특정 조건이 충족되면 한 시스템에서 다른 시스템으로 어떠한 메시지를 보내는 것입니다. Notifly에서는 이 조건이 일반적으로 다음과 같습니다.
- 유저의 이벤트 발송
- 예약 발송 (주기 발송) 시 예약된 시점 도달
이러한 조건이 충족되면, Notifly에서는 HTTP 요청을 통해 명시된 URL, HTTP method, HTTP 헤더, HTTP 본문을 전송합니다.
Prerequisites
웹훅을 수신하기 위해서는 다음과 같은 준비가 필요합니다.
- 웹훅을 수신할 수 있는 환경
- 웹훅을 수신하기 위해서는 웹훅을 수신할 수 있는 서버가 필요하고, 이 서버는 public 네트워크에 연결되어 HTTP 요청을 수신할 수 있어야 합니다.
- 알맞은 DNS 설정을 통해, 명시된 URL으로 Notifly 서버가 해당 서버에 도달할 수 있어야 합니다.
- 노티플라이 IP Whitelist 설정
- Notifly 서버의 IP 주소로부터의 Inbound Traffic을 네트워크 정책에서 꼭 허용하도록 설정해주세요. Notifly 웹훅 발송 서버의 IP 주소의 목록은 다음과 같습니다.
3.38.74.151
43.201.228.103
43.200.138.23
- Notifly 서버의 IP 주소로부터의 Inbound Traffic을 네트워크 정책에서 꼭 허용하도록 설정해주세요. Notifly 웹훅 발송 서버의 IP 주소의 목록은 다음과 같습니다.
웹훅 캠페인 생성 및 메시지 개인화
웹훅 캠페인 생성
웹훅 캠페인은 개인화와 함께 사용하셔야 더욱 의미있는 결과를 얻을 수 있습니다. 웹훅 캠페인을 생성하기 위해서는 다음과 같은 정보를 입력해야 합니다. 메시지 개인화에 대한 자세한 정보는 메시지 개인화 섹션을 참고해주세요.
- 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를 사용하는 것도 간편하고 효과적입니다.
{%- 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
}
메시지 개인화 테스트
- Liquid 템플릿 테스트
- Liquid JS Playground 를 이용하여 템플릿 테스트 후 캠페인을 집행하시길 권장드립니다.
- Webhook 발송 테스트
- URL, HTTP Method, HTTP Headers, HTTP Body를 입력한 후 '테스트 발송'을 클릭해주세요.
- 발송할 유저 아이디를 입력하신 후, '테스트 발송'을 클릭해주세요.
- 발송 결과를 탭하시면, 더 자세한 정보를 확인하실 수 있습니다.
Note
- 요청 응답 지연 시간이 5초 이상인 경우, 발송 실패로 처리됩니다.
- 응답 상태 코드가 2XX 인 경우, 발송 성공으로 처리되며 그 외의 경우는 발송 실패로 처리됩니다.