0. 사전준비
1. 팀 관리 추가
kakao developers에서 내 애플리케이션에 들어가 좌측 팀관리에서 메세지를 보내고자 하는 친구를 팀원으로 추가한다.
2. 팀원의 동의
나는 팀원(친구)들의 동의를 이미 받았기 때문에 위에 상태=활성, 관리버튼이 활성화되어있는데, 원래는 아닐것이다.
내가 보낸 초대메일을 친구들이 들어가서, 친구들이 카카오 디벨로퍼 사이트까지 가입을 완료하면 활성화된다.
3. 동의항목
저번글을 읽었다면, 미리 체크되었겠지만 안되어 있을 수도 있으니!
내 카카오 디벨로퍼에서 내 애플리케이션->동의항목에서 카카오 서비스 내 친구목록에 이용중 동의를 설정해준다.
4. 친구들의 API 테스트
API테스트가 필수인지는 모르겠으나, 아마 필수인 것 같다.
1. 도구 들어가기
내가 보내고자 하는 즉 방금전 초대메일을 받았고, 카카오톡 디벨로퍼에 가입된 친구들이 사이트에 들어와 맨위 도구를 클릭한다.
2. REST API 테스트
REST API 테스트를 누르고, 아래 인증앱 부분 오른쪽에 메뉴바를 누르고, 내 애플리케이션을 선택한다. (지금은 모두 친구들이 친구들 계정으로 진행하는 과정입니다.)
그리고 토큰발급을 누르면 체크하는 칸이 나오는데, profile_nickname, friends, talk_message 를 체크해준다.
이후 전송을 누르고, 밑에 응답에 아래와 같이 나온다면, 이제 친구들이 할건 끝났다.
3. 실전!
이제 저번 나에게 보내기와 유사한데, 딱 한가지만 추가해주면 된다.
우선 완성코드 이전에 끊어서 가보자.
1. 친구 목록 가져오기
url = "https://kapi.kakao.com/v1/api/talk/friends"
result = json.loads(requests.get(url, headers=kheaders).text)
friends_list = result.get("elements")
위의 코드를 실행하면, 자신의 친구 목록이 나온다. 이때 url파라미터를 수정하면 뭐 친구 목록 시작시점, 친구 최대 수, 정렬순서 등을 설정할 수 있다하니 참고하길 바란다.
2. 친구 id 가져오기
friend_id = friends_list[0].get("uuid")
위는 첫번째 친구의 id를 가져오는 것이다. 우리는 이 uuid를 가지고 메세지를 보내게 된다.
3. 실전!
weather_list=["test","test","test"]
kcreds = {"access_token" : access_token}
kheaders = {"Authorization": "Bearer " + kcreds.get('access_token')}
url ="https://kapi.kakao.com/v1/api/talk/friends/message/default/send"
weather_url = "https://search.naver.com/search.naver?sm=top_hty&fbm=0&ie=utf8&query=용인 동백 날씨"
text = f"""\
# 날씨 정보
기온 : {weather_list[0]}
습도 : {weather_list[1]}
바람 : {weather_list[2]}
"""
template = {"object_type": "text","text": text,
"link": {"web_url": weather_url,"mobile_web_url": weather_url},
"button_title": "날씨 상세보기"}
data= {'receiver_uuids': '["{}"]'.format(friend_id), "template_object" : json.dumps(template)}
res = requests.post(url_friend, data=data, headers=kheaders)
if res.json().get('result_code') == 0: print("친구들에게 전송 성공")
else: print("친구들에게 전송 실패. error: " + str(res.json()))
저번(나에게 보내기)과 유사한데, 살짝 다르니 주의해야한다.
우선 url이 친구에게 보내기이고, template 저번처럼 자신이 원하는데로 수정해도되는데,
data부분에 맨 앞에 새로운 인자가 추가된 것을 볼 수 있다! 저 양식이 중요하니 건들지말자 .
참고로 friend_id는 위에서 구한 친구의 uuid 변수이다.
-->주의할 점이 친구 uuid 를 String 리스트로 전달해야 한다. 한명한테 보낼 때는 오류가 보통 안발생하는데, 여러명한테 보낼 때는 오류가 날 수도 있으니, 위의 양식이 아니라 아래 full code에 있는 것처럼 json 형식으로 보내줘야한다...
이게 예시에 잘 설명이 안되어있어서 '랑 "떄문에 안되기도 하고 아는 문자열 형식을 다 넣어봤다...
암튼 아래 코드처럼 하면, 친구 여러명이든 한명이든 모두 오류가 안나고 제대로 보내질 것이다!!
4. FULL CODE
암튼 이렇게 저번시간 나에게 보내기와 친구에게 보내기를 성공했고,
내가 사용하기 편하도록 함수화 시키고 조금 간단하게 만들었다. 잘 사용하시거나 오류가 있다면 댓글로 남겨주세여!!
import json
import requests
from api_token_list import access_token
def get_friend_info(kheaders):
url = "https://kapi.kakao.com/v1/api/talk/friends?limit=3&order=asc" #친구 목록 가져오기
result = json.loads(requests.get(url, headers=kheaders).text)
friends_list = result.get("elements")
freind_names=[i.get('profile_nickname') for i in friends_list]
friend_ids=[i.get('uuid') for i in friends_list]
return freind_names,friend_ids
weather_list=["test","test","test"]
kcreds = {"access_token" : access_token}
kheaders = {"Authorization": "Bearer " + kcreds.get('access_token')}
url_mine = "https://kapi.kakao.com/v2/api/talk/memo/default/send"
url_friend ="https://kapi.kakao.com/v1/api/talk/friends/message/default/send"
weather_url = "https://search.naver.com/search.naver?sm=top_hty&fbm=0&ie=utf8&query=용인 동백 날씨"
friend_names,friend_ids = get_friend_info(kheaders)
# 메세지 내용
text = f"""\
# 동백 날씨 정보
기온 : {weather_list[0]}
습도 : {weather_list[1]}
바람 : {weather_list[2]}
"""
template = {"object_type": "text","text": text,
"link": {"web_url": weather_url,"mobile_web_url": weather_url},
"button_title": "날씨 상세보기"}
data_mine = {"template_object" : json.dumps(template)}
res = requests.post(url_mine, data=data_mine, headers=kheaders)
if res.json().get('result_code') == 0: print('나에게 전송 성공.')
else: print('나에게 전송 실패. Error : ' + str(res.json()))
data_friend = {'receiver_uuids': json.dumps(friend_ids) , "template_object" : json.dumps(template)}
res2 = requests.post(url_friend, data=data_friend, headers=kheaders)
'알쓸신잡' 카테고리의 다른 글
[Git] 오류 모음 (0) | 2023.11.02 |
---|---|
Repository 하위 폴더를 새로운 repository로 이동 (1) | 2023.11.02 |
카카오톡 api로 나에게 메세지 보내기 (1) | 2023.10.27 |
파이썬 오류 모음 zip (0) | 2023.10.27 |
카카오톡 access token 발급받기 (0) | 2023.10.26 |