카카오톡으로 메세지를 전송하는 프로그램을 작성해 볼려고 이것저것 구글링을 해서 시도해봤다.
카카오톡의 경우 "나에게 메세지 보내기" API가 있다.
이를 이용해 보기로 했다.
1. 메세지를 전송할 앱 생성
https://developers.kakao.com/ 들어가서 앱을 생성한다. 앱 종류는 모바일앱이 아닌 웹으로 한다.
앱이 생성이 되면 내 어플리케이션아래 앱이름을 선택해 보면 앱정보애 앱키표시를 누르면 앱키가 나온다.
앱키들 중에 REST API 키를 사용한다.
2. REST API 키를 이용해서 REFRESH TOKEN얻기
카카오톡에 메세지를 보낼려면 API사용에 대한 ACCESS TOKEN이 필요하다. ACCESS TOKEN은 한번 발급 받으면 일정 시간 지나면 쓸 수 없기에 메세지 보낼때 마다 REFRESH TOKEN을 이용해서 다시 ACCESS TOKEN을 받아서 이용하는 것이 안전하다.
REFRESH TOKEN을 받을려면 간단하게 Web Server 를 하나 돌려사 카카오톡쪽 서버의 메세지를 받을 사용자 카카오 계정 로그인 페이지로 리다이렉트 하도록 하면,로그인이 완료되면 응답으로 세션 code값을 돌려준다. 이 code값을 이용해서 다시 REST API를 통해 ACCESS TOKEN과 REFRESH TOKEN을 발급 받을 수 있다.
응답을 받을 PAGE URL을 아래와 같이 설정해두어야 한다.
사이트 도메인을 http://localhost:5000 로 하고,
Redirect Path를 /oauth 로 하면
http://localhost:5000/oauth 로 REFRESH TOKEN이 온다.
아래는 REFRESH TOKEN을 얻을 낼 웹페이지 이다.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>index</title>
</head>
<body>
<a href="https://kauth.kakao.com/oauth/authorize?client_id=YOUR_REST_API_KEY&redirect_uri=http://localhost:5000/oauth&response_type=code&scope=talk_message">
Kakao login
</a>
</body>
</head>
</html>
위의 서버 실행후 동일 컴에서 브라우저로 http://localhost:5000 을 브라우징 하면
Kakao login 가 보인다. 이중 Kakao login 을 해본다.
그럼 아래와 같이 브라우징 된다.
아래에서 ZZZZZZZZZZZZZZZZZZZ 에 해당하는 문자열이 REFRESH TOKEN이 된다.
code=XXXXXXXXXXXXXXXXXXXXXX
response for token={u'access_token': u'YYYYYYYYYYYYYYYY', u'refresh_token_expires_in': 2591999, u'expires_in': 21599, u'token_type': u'bearer', u'scope': u'talk_message profile', u'refresh_token': u'ZZZZZZZZZZZZZZZZZZZZZ'}
그리고, 위에 index.html 코드를 보면 Kakao login 요청시 ACCESS TOKEN과 REFRESH TOKEN을 요청할 뿐 아니라,
scope=talk_message 로 "나에게 메세지 보내기" 에 대한 허가 요청도 하였다. 이 허가 요청이 없으면 "나에게 메세지 보내기"시 에러가 난다.
3. 카카오톡으로 메세지 보내기
아래 Python 프로그램은 카카오톡으로 메세지를 보내는 예제이다.
메세지 받을 사람의 REFRESH TOKEN을 위의 설명을 이용해서 얻어내면 해당 사람에게 메세지를 보낼 수 있다.
카카오톡 개발자 사이트에서 REST API 설명 페이지들을 보면 나에게 보내기 API로 보낼 수 있는 메세지 유형이 있는데,
아래는 이중 제일 단순한 유형이다.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import urllib
import json
def getAccessToken(refreshToken) :
url = "https://kauth.kakao.com/oauth/token"
payload = "grant_type=refresh_token&client_id=YOUR_REST_API_KEY&refresh_token=" + refreshToken
headers = {
'Content-Type' : "application/x-www-form-urlencoded",
'Cache-Control' : "no-cache",
}
reponse = requests.request("POST",url,data=payload, headers=headers)
access_token = json.loads(((reponse.text).encode('utf-8')))
return access_token
def sendText(accessToken) :
url = 'https://kapi.kakao.com/v2/api/talk/memo/default/send'
payloadDict = dict({
"object_type" : "text",
"text" :u"이것은 테스트".encode("utf-8"),
"link" : {
"web_url" : "http://yourwebsite.for.pc",
"mobile_web_url" : "http://yourwebsite.for.mobile"
},
"button_title" : u"방문".encode("utf-8"),
})
payload = 'template_object=' + str(json.dumps(payloadDict))
print payload
headers = {
'Content-Type' : "application/x-www-form-urlencoded",
'Cache-Control' : "no-cache",
'Authorization' : "Bearer " + accessToken,
}
reponse = requests.request("POST",url,data=payload, headers=headers)
access_token = json.loads(((reponse.text).encode('utf-8')))
return access_token
result = getAccessToken("RECEIVER_REFRESH_KEY") # 메세지 받을 사람의 REFRESH TOKEN 이용
print result['access_token']
print sendText(result['access_token'])
이렇게해서 메세지를 보낼수는 있는데,아쉽게도 폰에서 알림이 뜨지 않는다.
카카오 정책상 나에게 보내는 메세지는 알림이 뜨지 않는다고 한다. ㅠㅠ
https://devtalk.kakao.com/t/api/28495
정작 필요했던 것은 알림이었는데, 이럴수가... OTL