카카오 메세지 에러 {‘msg’: ‘this user does not have any scope.’, ‘code’: -402}

메시지를 성공적으로 보내지 못했습니다. 오류메시지 : {‘msg’: ‘this user does not have any scope.’, ‘code’: -402}

자기에게 메세지 보내기 하면 위와 같은 에러가 계속 나는데 못찾겠네요 ㅜㅜ/

동의항목 설정을 안하신 경우 위와같은 에러가 나게됩니다.
[내 애플리케이션] > [동의항목] 메뉴에서 [접근권한 관리항목]에 ‘카카오톡 메시지 전송’ 항목을 ‘선택 동의’ 또는 '이용 중 동의’로 설정하시면 됩니다.

참고: 메시지 가이드의 사용 권한 받기

좋아요 1

저도 똑같이 자기에게 메세지 보내기를 하고 있습니다.
말씀해주신 것과 같이 내어플리케이션->동의항목->접근 권한관리항목-> 카카오톡 메세지 전송에 이용중 동의로 설정을 하였으나,
계속적으로
{‘msg’: ‘this user does not have any scope.’, ‘code’: -402} 동일한 오류가 나고 있습니다… 혹시 자기에게 메세지 보내기 또한 '카카오메세지 API 사용 권한’을 받아야 가능한 것인지 여쭤보고자 합니다

위 가이드가 조금 부실하게 작성되었네요

 {'msg': 'this user does not have any scope.', 'code': -402}

정확히는 위 문제는 해당 유저에게 아무런 동의항목이 없을때 발생합니다.
이 상황은 위에서 말한것처럼 애플리케이션의 동의항목 설정에서 아무런 항목을 설정하지 않으면 발생할 수 있습니다.
다만, 이용중 동의를 하시면, 필수나 선택과 달리 로그인과정에서 자동으로 동의를 받지 않기때문에 추가 동의를 받아야합니다.

추가 동의를 받는 과정은 로그인하는 과정과 유사하며 필요한 동의항목(이 경우에는 talk_message)를 scope에 설정하시면됩니다.
자세한 설명은 추가 항목 동의 받기 가이드를 참고해주시기 바랍니다.

친구/메시지 api 사용시 FAQ도 참고바랍니다.
(기존 faq글에는 해당 에러메시지가 없었습니다. 이 가이드를 작성하며 추가되었습니다.)

좋아요 1

이 질문에 대해서는 '나에게 보내기’api는 '카카오 메시지 api 사용 권한’의 검수 없이도 별도의 제한없이 사용가능합니다.
카카오 메시지 api 사용권한의 검수는 무분별한 메시지 전송을 막기위해 메시지를 보내는 대상을 확인된 애플리케이션에 대해서만으로 제한하기 위한 것입니다.
'나에게 보내기 api’는 보내는 대상이 ‘나’ 즉, 로그인한 계정뿐이기 때문에 메시지 api 검수의 대상이 아닙니다.

좋아요 1

친절하고 빠른 답변 정말 감사합니다 관리자님

추가적으로 답변해주신 모든 사항을 확인해보고 적용해 보았으나, 계속적으로 오류가 나기에 코드와 제 어플리케이션을 포함해 다시한번 더 여쭤보고자 답글을 남깁니다.

말씀해주신 사항중에서 '이용중 동의’를 할경우 추가 동의를 받아야 하기에 “내어플리케이션->동의항목->접근 권한관리항목-> 카카오톡 메세지 전송” 경로에서 '선택 동의’를 설정 후 다음의 코드로 프로그램을 실행시켜 보았습니다.
(Access token 값은 가려 놓겠습니다.)

connect_kakao.py

import json
import requests

url = "https://kapi.kakao.com/v2/api/talk/memo/default/send"

# 사용자 토큰
headers = {
   "Authorization": "Bearer " + "token"}
data = {
  "template_object": json.dumps({
                          "object_type": "text",
                                 "text": "Hello, my friend",
                                 "link":
                                  {
                                     "web_url": "www.naver.com"
                                  }
                       })
}
response = requests.post(url, headers=headers, data=data)
if response.json().get('result_code') == 0:
    print('메시지를 성공적으로 보냈습니다.')
else:
    print('메시지를 성공적으로 보내지 못했습니다. 오류메시지 : ' + 
str(response.json()))

하지만 '선택동의’와 '다음의 코드’로 실행을 하였지만 지속적으로 403오류와 함께

 {'msg': 'this user does not have any scope.', 'code': -402}

이 오류가 출력되기에 질문을 남깁니다.

추가적으로 혹시 redirect URI가 현재 https://localhost.com 로 설정이 되어있는데 이 부분 때문에 지속적으로 오류가 나는지도 여쭤보고자 합니다.
상세한 답변 정말 감사드립니다.

로그인과정에서 무언가 잘못된 것으로 보입니다.
혹시 access token을 가져오는 소스도 보여주실수 있나요?

로그인쪽이 담당부분이 아니라 정확하진 않지만, 문의주신대로 https://localhost.com 으로 설정하면 정상적으로 동의를 할수 없습니다.
해당 주소로 리다이렉팅 하는 과정이 동의를 받는 과정입니다.
하지만 둥의를 못받는것 뿐만아니라 access token 또한 못받을것입니다.

좋아요 2

감사합니다 관리자님

말씀해주신 내용 적어드립니다.

Access token을 받기위해서 다음과 같은 절차를 수행했었습니다.

  1. 내어플리케이션-> 어플리케이션 추가하기->앱키획득(REST API Key 획득)

  2. 주소창에 다음의 주소 입력
    https://kauth.kakao.com/oauth/authorize?client_id={REST_API_KEY}&redirect_uri={REDIRECT_URI}&response_type=code
    를 통해 code 획득(이때 REDIECT_URL을 https://localhost.com 으로 설정했었습니다.)

  3. 다음의 파이썬 코드로 1번과 2번에서 얻게된 'code’와 'REST API KEY’로 Accesstoken 얻기

    import requests
    import json

    url = "https://kauth.kakao.com/oauth/token"
    data = {
    “grant_type”: “authorization_code”,
    “client_id”: “1번에서 얻은 RESTAPI KEY입력”,
    “redirect_uri”: “https://localhost.com”,
    “code”: “2번에서 획득한 code입력”
    }
    response = requests.post(url, data=data)
    tokens = response.json()
    print(tokens)

이후 출력되는 access token을 갖고 실행하였습니다.

추가적으로 Redirect URL을 작성한 위치가 “내 애플리케이션>제품 설정>카카오 로그인>Redirect URI” 와 "내 애플리케이션>앱 설정>Web"의 사이트 도메인을 동일하게 https://localhost.com로 적용하였습니다.

일반적으로 사용하는 Redirect URI가 따로 있는지도 여쭤보고자 합니다.

지속된 질문에 답변 정말 감사드립니다.

일단 이 스레드에서의 문제였던 {‘msg’: ‘this user does not have any scope.’, ‘code’: -402}가 출력되는 원인은
위에서 말씀드린데로 이용중 사용으로 설정된 talk_message에대한 동의를 받지 않아서 발생한 것입니다.
추가 항목 동의 받기 가이드에 나온대로 코드 받기(authorize)요청시 talk_message 스콥을 요청하셔야 합니다.
간단하게는 2번의 주소 마지막에 &scope=talk_message를 추가하셔도 됩니다.

그리고 적어주신 1,2,3 동작을 코드로 작성해서 처리해주시기 바랍니다.
해당 동작이 로그인을 위한 서버의 동작이며, 물어보신 일반적으로 사용하는 redirect uri가 이 서버의 인증처리 요청 주소가 됩니다.
즉, 카카오 로그인(을 포함한 oauth스펙에 따른 대부분의 소셜 로그인)은 카카오 인증 서버와 구현하신 서버간에 1,2,3의 동작을 주고 받음으로써 처리됩니다.
카카오 로그인 가이드 중 시작하기전에… 항목의 설명이 이 내용을 담고 있으며,
첫 그림의 application이 처리하는 일을 손으로 직접 처리하신거라고 보시면됩니다.

좋아요 2

수정 후 성공하였습니다.
정말 감사합니다.

안녕하십니까 관리자님

추가적으로 “나에게 메세지 보내기 이후에”

현재 “친구에게 기본 메세지 보내기” 과정을 수행중에 있습니다.

나에게 메세지 보내기와 달리 "친구 목록가져오기 API"를 통해 uuid를 찾고자 하고 있습니다.

그렇기에

내어플리케이션>앱설정>팀 관리>팀원 초대 이후

GET /v1/api/talk/friends HTTP/1.1
Host: kapi.kakao.com Authorization: Bearer {USER_ACCESS_TOKEN}

이방식을 통해 수행을 하기위해 python으로

import requests
url = "https://kapi.kakao.com/v1/api/talk/friends"
headers = {
        "Authorization": "Bearer " + "Access_token"
}
response = requests.get(url, headers=headers)
friend_list = response.json()
print(friend_list)

다음과 같은 코드를 수행하였습니다.(Access_token은 가렸습니다)

하지만 출력되는 결과가

{'elements': [], 'total_count': 0, 'after_url': None, 'result_id': '-', 'favorite_count': 0}

라는 출력이 나왔습니다. (result_id는 가렸습니다)

팀원 uuid가 나오지 않기에 제가 놓친 부분이 있는지 여쭤보고자 합니다.

추가적으로 의심되는 부분이 두가지 있어 같이 말씀드립니다.

  1. 내어플리케이션>앱설정>팀 관리 에서 팀원들의 상태가 "활성"인 사람이 한명이고 "초대 메일 발송됨"이 2명 입니다. (권한은 EDITOR입니다.)

  2. Access_token을 받는 과정에서 scope를 talk_message와 friends 두개만 설정하였고 내 애플리케이션>제품 설정>카카오 로그인>동의항목에서 카카오 서비스 내 친구목록은 이용 중 동의로, 카카오톡 메세지 전송 부분은 선택 동의로 설정되어 있습니다.

editor로 되어있으면 충분합니다.

권한 문제라면, 권한이 없다는 응답을 받았을 것입니다. 요청 자체는 잘 되었으나 조건에 맞는 친구 목록에 아무것도 없는 상황이라 이 문제는 아닙니다.

예상되는 문제로는, 친구 목록에서 조회되기 위해서는
같은 앱의 사용자만 허용되는 조건이 있습니다.

editor로 설정된 친구 계정으로 개발중이신 앱으로 로그인한 후 다시 조회해보시기 바랍니다.

좋아요 1

감사합니다!! 친구계정으로 개발 중인 앱 로그인 후 완료하였습니다!