웹서버에서 카카오톡 API로 친구에게 메시지 보내기

김정현

#python #카카오톡 #메시지

웹서버에서 발생하는 상황을 받기 위해서 가장 일반적으로 사용하는 방법은 이메일을 사용하는 것이다. 단점은 메일 도착 알람을 실시간으로 받기 어렵다는 것이다. 그래서 대안으로 slack이나 다른 메시지 앱을 사용하기도 한다.

필자의 경우 카카오톡으로 알림을 받으면 좋겠다는 생각이 들었다. 자주 이용하는 앱이라 메시지 앱을 여러개 설치할 필요 없기 때문이다.

처음 시도한 방법은 카카오톡의 ‘나에게 메시지 보내기’다. 하지만, 단점이 있었다. 나에게 메시지를 보내도 알람음이 울리지 않는다. 그냥 메모 수준이어서 일부러 찾아가 확인하기 전에는 메시지 수신 여부를 알 수 없다.

대안으로 선택한 방법은 ‘친구에게 메시지 보내기’다. 카카오 계정을 두 개 가지고 있기 때문에 시도해 보았다. 참고로 휴대폰 요금제 중 전화 통화는 안 되지만 데이타 통신이 가능한 전화번호를 추가로 주는 상품이 있다. 이 전화번호를 이용하면 카카오계정을 하나 더 만들 수 있다.

개발을 위해 카카오 개발자 문서와 구글링을 하면서 느낀 점은 꽤 까다롭다는 것이다. 어렵다기 보다는 몰라서 이것저것 살펴봐야 할 것이 많다.

어쨌든, 구현 하면서 알게 된 핵심 내용을 아래에 적었고, 짧지만 Python 코드도 공개하니 필요한 분은 힌트를 얻기 바란다. 아래 내용은 카카오 개발자 문서를 조금 이해 한다고 전제하고  작성했다.

 

카카오톡 친구 메시지 보내기 요약

  • 메시지를 주고 받을 카카오 계정이 같은 웹서비스 내에서 카카오 로그인을 통해 회원가입 되어 있어야 한다.
  • 메시지 받을 상대가 친구 리스트 허용, 메시지 수신 허용에 동의 되어 있어야 한다.
  • 발송자는 AccessToken을 보유해야 한다.
  • 수신할 사람의 uuid를 알아야 한다.
  • 수신자 uuid는 친구 목록 Api를 통해 알 수 있다.
  • 자세한 내용은 카카오 개발자 문서 참조

카카오톡 친구 메시지 보내기 샘플 코드

import json
import logging
import requests
from django.conf import settings

# kakao 친구에게 메시지 보내기
# 참고: https://developers.kakao.com/docs/latest/ko/message/rest-api#default-template-msg-friend
def send_message_to_kakao_friends(receiver_uuids, ret_url, message):
   """ 친구에게 메시지 보내기
   :param receiver_uuids(String[]): 받을 친구 uuid 목록. None 이면 기본 설정된 친구에게 보냄
   :param ret_url: 메시지에 포함될 버튼 링크 주소
   :param message: 메시지 내용
   """

   # None가 전달되면 기본 설정된 친구에게 보내기
   receiver_uuids = receiver_uuids or settings.KAKAO_MESSAGE_RECEIVER_UUIDS

   api_url = "https://kapi.kakao.com/v1/api/talk/friends/message/default/send"
   headers = {
       "Content-Type": "application/x-www-form-urlencoded",
       "Authorization": "Bearer " + settings.KAKAO_ACCESS_TOKEN
   }
   data = {
       "receiver_uuids": json.dumps(receiver_uuids),
       "template_object": json.dumps({
           "object_type": "text",
           "text": message,
           "link": {
               "web_url": ret_url,
               "mobile_web_url": ret_url
           },
       })
   }
   response = requests.post(api_url, headers=headers, data=data)
   return response.status_code

 

기업 홍보를 위한 확실한 방법
협회 홈페이지에 회사정보를 보강해 보세요.