Open API

[Python] 카카오 api로 나에게 메시지 보내기 (+ 메시지 템플릿)

Jerry_K 2023. 10. 18. 22:29

카카오 api를 이용해서 나에게 메시지를 보내보자 ^o^

 

https://developers.kakao.com/

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

우선 여기에 접속 하고 로그인을 한다.

 

내 애플리케이션에 들어간다음 애플리케이션 추가하기를 누른다.

 

그럼 이제 이런 화면이 뜨는데 잘 적어준다.

 

앱키들은 내 정보들이니까 잘 보호를 하자.

 

 

이제 access_token을 얻어보자.

https://localhost:3000

메뉴에 보면 카카오 로그인이 있는데 이걸 눌러줘서 이렇게 바꿔줬다.

 

 

카카오 로그인 > 동의항목에가서  카카오 메시지 전송 설정을 해준다. 

이후 이용 중 동의를 누르고 동의 목적을 적어주면 된다.


이제 기본 설정도 다 했으니 access_token을 얻기만 하면된다.  (이게 제일 중요!)

(access_token은 서버에 요청을 해야 얻을 수 있는거 같다...)

 

https://kauth.kakao.com/oauth/authorize?client_id={REST API 키}
&redirect_uri=https://localhost:3000&response_type=code&scope=talk_message

그대로 따라했다면 , 이제 위에 링크를 복붙하면 된다. 

그리고 {REST API 키}라고 되어있는 부분만 본인 REST API키로 적어주면 된다.

 

그러면 이렇게 뜨는데 동의하고 계속하기 눌러주면 된다.(내 code를 요청함)

 

 

그러면 이런 화면이 뜨는데 당황하지 말고 위에 url을 보면된다. 

code= ????? ... 이렇게 뜨는데, 그 코드를 그대로 복사하면 된다.


이제 진짜 거의 다 끝났다... !

jupyter notebook 실행하고 ( 다른 IDE도 당연히 가능) 

import requests
import json

기본 라이브러리 호출한다.

 url = "https://kauth.kakao.com/oauth/token"
data = {
    "grant_type" : "authorization_code",
    "client_id" : "{REST API KEY}",
    "redirect_url" : "https://localhost:3000",
    "code" : "{CODE}"
}
response = requests.post(url, data=data)
tokens = response.json()
print(tokens)

이제 client_id에는 본인의 REST API KEY를 넣고 , code에는 위에 복사한 코드를 그대로 복붙하면된다.

 

이렇게  출력이 되면 잘 된 것이다.

 

with open("kakao_code.json", "w") as fp:
    json.dump(tokens, fp)

그리고 토큰 json 파일로 저장을 해주고 

 

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Bearer ${access_token}',
}

data = {
    'template_object' : json.dumps({
        "object_type": "text",
        "text": "텍스트 영역입니다. 최대 200자 표시 가능합니다.",
        "link": {
        "web_url": "https://www.google.com/",
        "mobile_web_url": "https://www.google.com/"
        },
        "button_title": "바로 확인"
    })
}

requests.post('https://kapi.kakao.com/v2/api/talk/memo/default/send', headers = headers, data = data)

if response.json().get('result_code') == None:
    print('메시지를 성공적으로 보냈습니다.')
else:
    print('메시지를 성공적으로 보내지 못했습니다. 오류메시지 : ' + str(response.json()))

 

Authorization에 access_token만 위에 호출해온 코드로 바꿔주면된다. 

내용은 template_object에서 수정하면된다. 

 

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Bearer ${access_token}',
}
template = {
    "object_type" : "list",
    "header_title" : "Google",
    "header_link" : {
        "web_url" : "www.google.com",
        "mobile_web_url" : "www.google.com"
    },
    "contents" : [
        {
            "title" : "구글",
            "description" : "chrome",
            "image_url" : " ",
            "image_width" : 50, "image_height" : 50,
            "link" : {
                "web_url" : "https://www.google.com/",
                "mobile_web_url" : "https://www.google.com/"
            }
        },
        {
            "title" : "네이버",
            "description" : "naver",
            "image_url" : "",
            "image_width" : 50, "image_height" : 50,
            "link" : {
                "web_url" : "https://www.naver.com",
                "mobile_web_url" : "https://www.naver.com"
            }
        }
    ],
    "buttons" : [
        {
            "title" : "버튼",
            "link" : {
                "web_url" : "www.google.com",
                "mobile_web_url" : "www.google.com"
            }
        }
    ]
}
data = {
    "template_object" : json.dumps(template)
}
requests.post('https://kapi.kakao.com/v2/api/talk/memo/default/send', headers = headers, data = data)

if response.json().get('result_code') == None:
    print('메시지를 성공적으로 보냈습니다.')
else:
    print('메시지를 성공적으로 보내지 못했습니다. 오류메시지 : ' + str(response.json()))

만일 리스트 형식으로 메시지를 보내고 싶으면  object_type을 list를 바꾸고 위와 같은 양식으로 원하는 것을 꾸며주면 된다. 

 

그러면 이런 식으로 나에게 메시지를 보낼 수 있다. 

 

 


(참고)

https://developers.kakao.com/docs/latest/ko/message/rest-api#default-template-msg-me

여기 문서를 꼭 참조하자.  

한번 읽어보면 post 방식으로 위의 url로 post하면 된다.  

그리고 사전 설정은 플랫폼 등록/카카오 로그인 활성화/ 동의 항목으로  위에 다 해놓을 상태이다.

본문에는 template_object가 object 타입으로 꼭 필수라 지정되어 있다.

그리고 마지막에 result_code를 통해 전송 성공 유무를 알 수 있다.

 

밑에 예제가 있는데 curl 형식으로 보여준다. 

 

import os
import requests

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Bearer ' + os.getenv('ACCESS_TOKEN', ''),
}

data = {
    'template_object': '{\n        "object_type": "text",\n 
    "text": "텍스트 영역입니다. 최대 200자 표시 가능합니다.",\n
    "link": {\n            "web_url": "https://developers.kakao.com",\n
    "mobile_web_url": "https://developers.kakao.com"\n        },\n
    "button_title": "바로 확인"\n    }',
}

response = requests.post('https://kapi.kakao.com/v2/api/talk/memo/default/send',
headers=headers, data=data)

이럴 경우 아래의 웹사이트 들어가서 curl 형식을 파이썬으로 바꿔주면된다. (curl은 은근 자주 나온다...)

https://curlconverter.com/


 


-메시지 템플릿으로 작성해보기

위에 내용들은 사실 구글에 치면 엄청 많이 나온다. 

(사실 이 포스터도 이 메시지 템플릿 작성법을 공유하기 위해 쓴 것....)

 

메시지 템플릿으로 작성은 굉장히 쉽다 ㅎㅎ... (이게 뭐라고 나는 그렇게 헤맸던거지!)

 

 

내 어플리케이션 > 해당 어플리케이션 클릭 >  메시지 > 메시지 템플릿 빌더 바로가기 

위에 순서를 그대로 따라오면 위와 같은 화면이 뜬다.  

이후 +템플릿 만들기에 들어간다.

 

 

템플릿은 많은데 아무거나 선택해준다.

여기 템플릿 이용해서 내가 원하는대로 커스텀 할 수 있다.

(약간 블로그 만드는 느낌...?)  그다지 어렵지 않으니 관심있으면 해보자.

 

어차피 테스트용이니 나는 기본 템플릿으로  선택해 나에게 보내 볼 것이다.

그냥 있는 템플릿 그대로 저장 ! 

 

 

그러면 옆에 이 ID가 뜨는데 이 String들을 기억하자.


다시 주피터로 들어간다. 

url = "https://kapi.kakao.com/v2/api/talk/memo/send"
headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    "Authorization": "Bearer " + "{access_token}"
}

data={
        "template_id" : "99719"
}

response = requests.post(url, headers=headers,data=data )
if response.json().get('result_code') == 0:
    print('메시지를 성공적으로 보냈습니다.')
else:
    print('메시지를 성공적으로 보내지 못했습니다. 오류메시지 : ' + str(response.json()))

그러고 url 주소를 바꿔주고 data 딕셔너리에는 template_id만 넣어주면 된다.

 

짜잔 ^6^

 

내가 뻘짓했던거는 url을 기본 템플릿 보내는 url과 같은걸로 했던것 ...

그리고 문서를 잘 안 읽어 기본값이 뭔지도 몰랐다는 점 ㅠㅠ 

 

template_object안에 template_id를 넣고 막 난리나부렸다 ....

(이것 저것 구글링했는데 파이썬으로 template_id로 하는 코드는 없었던거 같다)

그렇기 때문에 문서를 꼭 읽어 보는걸 추천 !!

 

 

(문서)

https://developers.kakao.com/docs/latest/ko/message/rest-api#custom-template-msg-me

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

읽어보면 그다지 어렵지않다.

 

전에꺼랑 비교하면 default가 있고 없고의 차이가 있다.

 

 

헤더는 동일하고,

본문은 template_id와 template_args가 있다.  

template_id는 필수라 되어있으니 꼭 값을 넣어줘야한다.

template_args는 변수를 전달해 메시지를 변수에 따라 다르게 출력해주는 것 같다.

 

나머지는 기본 메시지 보내기랑 똑같다.