Class: Sendgo::KakaoSenderService

Inherits:
Object
  • Object
show all
Defined in:
lib/sendgo/management.rb

Overview

카카오 발신프로필(채널) 관리 — 등록 · 동기화 · 브랜드메시지 타겟팅 신청.

v2 전용이며 기업(Team) 소유 애플리케이션만 사용할 수 있다.

채널 등록은 두 단계다. 카카오가 인증번호를 채널 관리자 휴대폰으로 SMS 발송하므로 완전 무인 자동화는 불가능하다 — 사람이 문자를 받아 create 에 넣어야 한다.

Examples:

# 1단계 — 관리자 휴대폰으로 인증번호 발송 (응답에 번호는 없다)
client.kakao_senders.request_token("@my-channel", "01012345678")

# 2단계 — 사람이 받은 인증번호로 발신프로필 생성
created = client.kakao_senders.create(
  token: "123456",
  yellow_id: "@my-channel",
  phone_number: "01012345678",
  category_code: "001001"
)

kakao_sender_key = created.dig("data", "sender", "kakaoSenderKey")

Constant Summary collapse

RESOURCE =
"kakao-senders"

Instance Method Summary collapse

Constructor Details

#initialize(http:) ⇒ KakaoSenderService

Returns a new instance of KakaoSenderService.



31
32
33
# File 'lib/sendgo/management.rb', line 31

def initialize(http:)
  @http = http
end

Instance Method Details

#apply_brand_message_targeting(kakao_sender_key, target_type) ⇒ Object

브랜드메시지 +M+(마케팅) / +N+(정보성) 사용 신청.

결과는 즉시 확정되지 않는다. 발신프로필의 brandMessageStatus 로 확인한다.



94
95
96
97
98
99
# File 'lib/sendgo/management.rb', line 94

def apply_brand_message_targeting(kakao_sender_key, target_type)
  @http.post(
    "#{RESOURCE}/#{CGI.escape(kakao_sender_key)}/brand-message/apply",
    { targetType: target_type }
  )
end

#categories(category_code = nil) ⇒ Object

카테고리 조회. 등록 시 category_code 로 넣을 값이다.



66
67
68
# File 'lib/sendgo/management.rb', line 66

def categories(category_code = nil)
  @http.get("#{RESOURCE}/categories", { categoryCode: category_code })
end

#create(token:, yellow_id:, phone_number:, category_code:) ⇒ Object

2단계 — 발신프로필 등록.

이미 등록된 채널을 다시 등록해도 오류가 아니다. 카카오가 같은 senderKey 를 돌려주고 서버가 기존 행을 갱신한다.



46
47
48
49
50
51
52
53
# File 'lib/sendgo/management.rb', line 46

def create(token:, yellow_id:, phone_number:, category_code:)
  @http.post(RESOURCE, {
               token: token,
               yellowId: yellow_id,
               phoneNumber: phone_number,
               categoryCode: category_code
             })
end

#listObject

목록 조회.



56
57
58
# File 'lib/sendgo/management.rb', line 56

def list
  @http.get(RESOURCE)
end

#request_token(yellow_id, phone_number) ⇒ Object

1단계 — 채널 인증번호 발송.

응답에 인증번호는 들어있지 않다. 카카오가 phone_number 로 SMS 를 보낸다.



38
39
40
# File 'lib/sendgo/management.rb', line 38

def request_token(yellow_id, phone_number)
  @http.post("#{RESOURCE}/token", { yellowId: yellow_id, phoneNumber: phone_number })
end

#show(kakao_sender_key) ⇒ Object

상세 조회.



61
62
63
# File 'lib/sendgo/management.rb', line 61

def show(kakao_sender_key)
  @http.get("#{RESOURCE}/#{CGI.escape(kakao_sender_key)}")
end

#sync(kakao_sender_key = nil) ⇒ Object

상태 동기화. 키를 주면 단건, 없으면 팀 전체.

채널이 카카오 쪽에서 차단·휴면되면 발송이 조용히 실패하기 시작한다. 그 사실을 먼저 알 방법은 이 호출뿐이므로 하루 한 번 정도 돌리는 게 좋다.



74
75
76
77
# File 'lib/sendgo/management.rb', line 74

def sync(kakao_sender_key = nil)
  path = kakao_sender_key ? "#{RESOURCE}/#{CGI.escape(kakao_sender_key)}/sync" : "#{RESOURCE}/sync"
  @http.post(path, {})
end

#upload_brand_message_evidence(kakao_sender_key, evidence) ⇒ Object

브랜드메시지 M 신청에 필요한 광고성 정보 수신동의 증적자료 업로드. jpg/png, 5MB 이하.

Parameters:

  • evidence (Array, IO)

    ["proof.png", io, "image/png"] 또는 열린 파일



83
84
85
86
87
88
89
# File 'lib/sendgo/management.rb', line 83

def upload_brand_message_evidence(kakao_sender_key, evidence)
  @http.post_multipart(
    "#{RESOURCE}/#{CGI.escape(kakao_sender_key)}/brand-message/evidence",
    {},
    { evidence: evidence }
  )
end