IT

★카카오톡 메시지 API를 이용하여 친구에게 메시지 보내기

유병혁 2021. 7. 27. 02:01

안녕하세요? 이번 글은 카카오 API를 이용해서 친구에게 메시지 보내는 방법을 정리해 보겠습니다. 메시지를 보내는 방법은 크게 두 가지로, 카카오링크 API를 사용하는 방법과 카카오톡 메시지 API를 사용하는 방법이 있습니다. 여기서는 카카오톡 메시지 API를 이용한 메시지 전송 방법을 실습해 봅니다.

 

카카오링크 API와 카카오톡 메시지 API의 차이점은 아래 와 같습니다.

그럼 메시지 보내는 과정을 실습해볼까요?! 일단, 필요한 라이브러리를 호출합니다.

# 라이브러리 호출
import requests
import json

카카오 API 사용은 '엑세스 토큰'을 필요로 합니다. 엑세스 토큰은 {REST API 키}와 {코드} 값을 통해 확인할 수 있습니다. 이와 관련해서는 아래 글을 참고해보시면 됩니다. 

 

★카카오 API를 이용하여 나에게 메시지 보내기

안녕하세요? 이번 글은 카카오 API를 이용하여 나에게 메시지 보내는 과정을 정리해 보겠습니다. 일단 'Kakao Developers' 홈페이지에 접속합니다. Kakao Developers 카카오 API를 활용하여 다양한 어플리케

blog.daum.net

{코드} 값은 아래 주소를 통해 확인 가능하며, 나에게 메시지 보내기와 차이는 'scope=talk_message,friends'에 있습니다.

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

아래 {REST API}와 {코드} 부분에 실제값을 반영해 카카오톡 메시지 API용 '엑세스 토큰'과 '리프레시 토큰'을 확인합니다.

# 카카오톡 메시지 API
url = "https://kauth.kakao.com/oauth/token"
data = {
    "grant_type" : "authorization_code",
    "client_id" : "{REST API}",
    "redirect_url" : "https://localhost:3000",
    "code" : "{코드}"
}
response = requests.post(url, data=data)
tokens = response.json()
print(tokens)

'리프레시 토큰'을 기준으로 '엑세스 토큰'을 갱신한 후, kakao_code.json 파일에 저장합니다.

# 카카오톡 메시지 API
url = "https://kauth.kakao.com/oauth/token"
data = {
    "grant_type": "refresh_token",
    "client_id": "{REST API}",
    "refresh_token": "{refresh_token}"
}
response = requests.post(url, data=data)
tokens = response.json()
# kakao_code.json 파일 저장
with open("kakao_code.json", "w") as fp:
    json.dump(tokens, fp)

kakao_code.json을 통해 카카오 API '엑세스 토큰'을 로드합니다.

# 카카오 API 엑세스 토큰
with open("kakao_code.json", "r") as fp:
    tokens = json.load(fp)    
print(tokens["access_token"])

'내 애플리케이션 > 앱 설정 > 팀 관리'에서 메시지를 보낼 친구를 팀원으로 초대합니다.

'내 애플리케이션 > 제품 설정 > 카카오 로그인 > 동의항목'에서 '카카오 서비스 내 친구목록(즐겨찾기 친구포함)'을 '이용 중 동의' 상태로 변경합니다. *팀원은 동의항목과 함께 REST API 테스트를 실행해 주시면 됩니다.

이제 '친구 목록' 가져오기를 실행해봅니다.

 

Kakao Developers

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

developers.kakao.com

url = "https://kapi.kakao.com/v1/api/talk/friends" #친구 목록 가져오기
header = {"Authorization": 'Bearer ' + tokens["access_token"]}
result = json.loads(requests.get(url, headers=header).text)
friends_list = result.get("elements")
print(friends_list)

아래와 같이 친구 목록 중 0번째 리스트의 친구 'uuid'를 읽어들여 봅니다.

friend_id = friends_list[0].get("uuid")
print(friend_id)

아래 링크는 '카카오톡 메시지: REST API' 페이지입니다.

 

Kakao Developers

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

developers.kakao.com

자, 이제 0번째 친구에게 메시지를 전송해 봅니다!

# 카카오톡 메시지
url= "https://kapi.kakao.com/v1/api/talk/friends/message/default/send"
header = {"Authorization": 'Bearer ' + tokens["access_token"]}
data={
    'receiver_uuids': '["{}"]'.format(friend_id),
    "template_object": json.dumps({
        "object_type":"text",
        "text":"딥러닝 뉴스",
        "link":{
            "web_url" : "https://www.google.co.kr/search?q=deep+learning&source=lnms&tbm=nws",
            "mobile_web_url" : "https://www.google.co.kr/search?q=deep+learning&source=lnms&tbm=nws"
        },
        "button_title": "뉴스 보기"
    })
}
response = requests.post(url, headers=header, data=data)
response.status_code

'Kakao Developers' 페이지는 주로 'curl' 예제를 제공하고 있는데요, 아래 curl-to-py 웹페이지에서 curl 소스코드를 파이썬 소스코드로  자동 변환해 줍니다.

 

curl-to-py: Convert curl commands to py code

 

zhexuany.github.io

아래 소스는 curl-to-py웹페이지를 사용하여 curl을 파이썬으로 변환한 결과입니다.

여기까지 카카오 API를 이용하여 친구에게 메시지 보내는 방법을 정리해 봤습니다.

curl -v -X POST "https://kapi.kakao.com/v1/api/talk/friends/message/default/send" \
    -H "Authorization: Bearer {ACCESS_TOKEN}" \
    -d 'receiver_uuids=["abcdefg0001","abcdefg0002","abcdefg0003"]' \
    -d 'template_object={
        "object_type": "text",
        "text": "텍스트 영역입니다. 최대 200자 표시 가능합니다.",
        "link": {
            "web_url": "https://developers.kakao.com",
            "mobile_web_url": "https://developers.kakao.com"
        },
        "button_title": "바로 확인"
    }'
// Generated by curl-to-py: https://zhexuany.github.io/curl-to-py
import requests
headers = {
    'Authorization': 'Bearer {ACCESS_TOKEN}',
}
data = [
  ('receiver_uuids', '["abcdefg0001","abcdefg0002","abcdefg0003"]'),
  ('template_object', '{
        "object_type": "text",
        "text": "텍스트 영역입니다. 최대 200자 표시 가능합니다.",
        "link": {
            "web_url": "https://developers.kakao.com",
            "mobile_web_url": "https://developers.kakao.com"
        },
        "button_title": "바로 확인"
    }'),
]
requests.post('https://kapi.kakao.com/v1/api/talk/friends/message/default/send', headers = headers, data = data)