"주문이 들어오면 카톡으로 알려 주세요" 같은 요청은 생각보다 자주 받습니다. 그런데 카카오톡으로 알림을 보낸다는 말 안에는 서로 전혀 다른 두 가지가 섞여 있어서, 무엇을 원하는지부터 갈라야 합니다. 하나는 우리 앱 사용자 폰에 뜨는 앱 푸시이고, 다른 하나는 카카오톡 채팅방으로 도착하는 알림톡입니다. 준비 과정도, 비용 구조도, 호출하는 API도 다릅니다.
앱 푸시 - 카카오 푸시 알림 REST API
직접 만든 모바일 앱이 있고, 그 앱 사용자에게 푸시를 보내고 싶을 때 쓰는 방식입니다. 카카오 개발자 사이트에 앱을 등록해 관리자(Admin) 키를 받고, 안드로이드는 FCM, iOS는 APNs 설정이 되어 있어야 합니다. 카카오가 FCM·APNs 앞에서 중계해 주는 구조라고 보면 이해가 쉽습니다.
순서는 이렇습니다. 앱이 실행될 때 기기의 푸시 토큰(FCM/APNs 토큰)을 얻어 서버로 보내고, 서버는 그 토큰을 사용자 식별값(uuid)과 함께 카카오에 등록합니다. 이후 알림을 보낼 때는 uuid만 지정해서 전송 API를 호출합니다.
푸시 토큰 등록 요청은 이런 형태입니다.
POST https://kapi.kakao.com/v2/push/register
Authorization: KakaoAK {ADMIN_KEY}
Content-Type: application/x-www-form-urlencoded;charset=utf-8
uuid=USER_UUID
device_id=DEVICE_ID
push_token=PUSH_TOKEN
푸시 전송 요청입니다. push_message 안에 FCM용 알림 내용을 JSON으로 넣습니다.
POST https://kapi.kakao.com/v2/push/send
Authorization: KakaoAK {ADMIN_KEY}
Content-Type: application/x-www-form-urlencoded;charset=utf-8
uuids=["USER_UUID_1","USER_UUID_2"]
push_message={"for_fcm":{"notification":{"title":"알림","body":"서버에서 보낸 푸시!"}}}
Admin 키는 모든 권한을 가진 키라서 절대 앱이나 자바스크립트 쪽에 넣으면 안 되고, 서버에서만 써야 합니다. 그리고 이건 어디까지나 앱 푸시라서, 앱을 설치하지 않은 사람에게는 보낼 수 없고 카카오톡 채팅창에도 나타나지 않습니다.
알림톡 - 카카오톡 채팅으로 오는 정보성 메시지
택배 발송, 예약 확인, 결제 완료처럼 카카오톡 채팅방에 "알림톡"으로 오는 메시지가 이쪽입니다. 앱이 없어도 전화번호만으로 보낼 수 있다는 게 가장 큰 차이입니다. 대신 바로 쓸 수는 없고 비즈니스용 카카오톡 채널을 만들고, 보낼 문구를 템플릿으로 등록해서 심사를 통과해야 합니다. 템플릿에 없는 내용은 보낼 수 없고, 광고성 문구는 심사에서 걸립니다.
보통은 발송 대행사를 통해 API를 받아 쓰게 되고, 대행사마다 주소와 필드 이름이 조금씩 다릅니다. 아래는 그런 API의 한 예입니다.
POST https://{base_url}/v2/send/kakao
Authorization: Bearer {ACCESS_TOKEN}
Content-Type: application/json
{
"message_type":"AT",
"sender_key":"{senderKey}",
"cid":"YOUR_CHANNEL_ID",
"template_code":"YOUR_TEMPLATE_CODE",
"phone_number":"RECEIVER_PHONE",
"sender_no":"SENDER_NO",
"message":"알림톡 내용"
}
message 는 등록한 템플릿과 글자 하나까지 맞아야 합니다. 템플릿의 변수 자리(#{이름} 같은 부분)만 실제 값으로 바뀌고 나머지가 다르면 발송이 실패하니, 처음 연동할 때 가장 많이 막히는 부분이 여기입니다.
어느 쪽을 골라야 하나
자체 앱이 있고 앱 사용자에게만 알리면 되면 앱 푸시, 앱이 없거나 고객 전화번호로 보내야 하면 알림톡입니다. 관리자 본인에게 주문 알림 정도만 받으려는 거라면 이 둘 다 준비가 꽤 무겁습니다. 그럴 땐 텔레그램 봇처럼 토큰 하나로 바로 보낼 수 있는 방법이 훨씬 간단하니 같이 검토해 보세요.