친구에게 기본 템플릿으로 메시지 보내기 관련하여 질문 드립니다

안녕하세요? 여기에 질문을 올려도 되는지… , 모르겠지만
도움을 얻고자 이렇게 질문 올립니다!!!

우선 저는 nodejs 로 만든 빽단에서

  1. 인가 코드 받기
  2. 토큰 받기
  3. 친구 uuid 받기
    까지는 완료 하였고,
  4. 친구에게 메시지 보내기 기능을 테스트 중 입니다.





아래의 코드는 친구 uuid 를 확인한 뒤 >> redirect 시켜 호출되는
메시지 날리기 부분 입니다.


친구 uuid는 편의상 하드코딩하여 박았습니다. (실제 코드에서는 AAAAAA… 로 되어 있지 않음)

app.get("/sendmessage", (req, res) => {
  console.log(token.access_token); // 토큰 확인용 콘솔로그.
  axios
    .post(
      `https://kapi.kakao.com/v1/api/talk/friends/message/default/send`,
      {
        "receiver_uuids": ["AAAAAAAAAAAAAAAAAAAAAA"],
        "template_object": {
          "object_type": "text",
          "text": "[API TEST] 안녕하세요? 카카오 메시지보내기 실습중 입니다.",
          "link": {},
          "button_title": "바로확인"
        },
      },
      {
        Headers: {
          "Content-Type": "application/x-www-form-urlencoded",
          "Authorization": `Bearer ${token.access_token}`,
        },
      }
    )
    .then((result) => {
      console.log(result.data);
    })
    .catch((error) => {
      console.log(error.response.data);
    });
});

콘솔에 찍히는 토큰값과

error.request에서 확인할 수 있는 로그로는
헤더 또한
2) 번 단계에서 받은 토큰값이 제대로 박혀 있습니다 만,


image


'access token should not be null or empty' / -401 에러를 받았습니다.






어떤 부분을 놓치고 있는 것인지
공유해 주시면 감사하겠습니다.
행복한 하루 되십시오.

안녕하세요.

확인을 위해 앱 ID 부탁드립니다.


앱ID
https://developers.kakao.com/ 의 내 애플리케이션>앱 설정>요약 정보 : 기본정보에 있는 앱 ID
숫자로된 ID 입니다
ex) 123456

587185 입니다 선생님
늦은시간에도 답주셔 감사합니다

const qs = require(“qs”); 사용하셔서 request data를 x-www-form-urlencoded 에 맞게
쿼리스트링 형태로 구성해서 처리 해보시겠어요?

async function call(method, uri, param, header){
    try {
        rtn = await axios({
            method: method,
            url: uri,
            headers: header,
            data: param
        })
    } catch (err) {
        rtn = err.response;
    }    
    return rtn.data;
}
app.get('/message', async function (req, res) {
    const uri = api_host + "/v2/api/talk/memo/default/send";
    const param = qs.stringify({
        "template_object": '{'+
                '"object_type": "text",'+
                '"text": "텍스트 영역입니다. 최대 200자 표시 가능합니다.",'+
                '"link": {'+
                '    "web_url": "https://developers.kakao.com",'+
                '    "mobile_web_url": "https://developers.kakao.com"'+
                '},'+
                '"button_title": "바로 확인"'+
            '}'
        });
    const header = {
        'content-Type': 'application/x-www-form-urlencoded',
        'Authorization': 'Bearer ' + req.session.key
    }
    var rtn = await call('POST', uri, param, header);
    res.send(rtn);
})

아차차 싶어 빠르게 적용해 보았습니다.
만,

여전히 동일한 결과 입니다.

변경된 코드와 로그 함께 전달드립니다.



1111


const qs = require("qs");

const param = qs.stringify({
  "receiver_uuids": ["AAAAAAAAAAAAAAAAAAAAAAAAAAA"],
  "template_object": {
    "object_type": "text",
    "text": "[API TEST] 안녕하세요? 카카오 메시지보내기 실습중 입니다.",
    "link": {},
    "button_title": "바로확인"
  }
});

app.get("/sendmessage", (req, res) => {
  console.log('엑세스 토큰 : ', token.access_token); // 토큰 확인용 콘솔로그.
  axios
    .post(
      `https://kapi.kakao.com/v1/api/talk/friends/message/default/send`,
      {
        param
      },
      {
        Headers: {
          "Content-Type": "application/x-www-form-urlencoded",
          "Authorization": `Bearer ${token.access_token}`,
        },
      }
    )
    .then((result) => {
      console.log(result.data);
    })
    .catch((error) => {
      console.log('헤더 정보 : ', error.config.Headers);
      console.log('에러 마사지 : ', error.response.data);
    });
});

:eyes:, TT

안녕하세요?
도움을 이어 받고자 한다면,
어떻게 해야 하는지 몰라
덧글만 하나 더 달아 봅니다

오늘도 행복한 하루 되시고
점심 맛있게 드세요

안녕하세요.
아래와 같이 해보시겠어요?

    const param =
        qs.stringify({
            "receiver_uuids":'["여기에 UUID를 입력하세요.","여기에 UUID를 입력하세요."]',
            "template_object": '{'+
            '"object_type": "text",'+
            '"text": "텍스트 영역입니다. 최대 200자 표시 가능합니다.",'+
            '"link": {'+
            '    "web_url": "https://developers.kakao.com",'+
            '    "mobile_web_url": "https://developers.kakao.com"'+
            '},'+
            '"button_title": "바로 확인"'+
            '}'
    });

안녕하세요?
보내주신 param (대괄호, 중괄호 까지 문자열 꼼꼼히 처리된 버전) 으로 날려 보았지만
여전히 동일한 결과 받고 있습니다.

필요 할만한 에러 로그 함께 전달 드립니다…,
도와 주세요 TT!!!

headers: AxiosHeaders {
      'Content-Type': 'application/json',
      'User-Agent': 'axios/1.1.3',
      'Content-Length': '591',
      'Accept-Encoding': 'gzip, deflate, br',
      [Symbol(defaults)]: [Object]
    },
Headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
      Authorization: 'Bearer _9WoZYsesmbyTev8XXmLaWFjhuQx5p6Ca9m1PY5LCinI2gAAAYR09gl7'
    },
method: 'post',
url: 'https://kapi.kakao.com/v1/api/talk/friends/message/default/send',
data: '{"kakaoParam":"receiver_uuids=AAAAAAAAAA&template_object=%7B%22object_type%22%3A%20%22text%22%2C%22text%22%3A%20%22%ED%85%8D%EC%8A%A4%ED%8A%B8%20%EC%98%81%EC%97%AD%EC%9E%85%EB%8B%88%EB%8B%A4.%20%EC%B5%9C%EB%8C%80%20200%EC%9E%90%20%ED%91%9C%EC%8B%9C%20%EA%B0%80%EB%8A%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%22%2C%22link%22%3A%20%7B%20%20%20%20%22web_url%22%3A%20%22https%3A%2F%2Fdevelopers.kakao.com%22%2C%20%20%20%20%22mobile_web_url%22%3A%20%22https%3A%2F%2Fdevelopers.kakao.com%22%7D%2C%22button_title%22%3A%20%22%EB%B0%94%EB%A1%9C%20%ED%99%95%EC%9D%B8%22%7D"}'
  },

/* ......... */

data: { msg: 'access token should not be null or empty', code: -401 }
  • 에러로그의 친구 uuid 부분은 AAAAAAAAAA 로 변경 하였습니다.

안녕하세요.
구현하신 코드를 다시 공유해 주시겠어요?
카카오 측으로는 header 값이 누락된 상태로 넘어왔고, content-type은 json 형태로 넘어왔습니다.

아래와 같은 모습으로 호출하셨을까요? (대소문자 주의)

var qs = require('querystring');

axios.post("https://kapi.kakao.com/v1/api/talk/friends/message/default/send",
    qs.stringify({
            "receiver_uuids": '["AAAAA"]',
            ...
    }), {
      headers: { 
        "Content-Type": "application/x-www-form-urlencoded",
        "Authorization": "Bearer xxxxxx"
      }
    })
1개의 좋아요

해결 되었습니다…
감사합니다 TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT

우선 이슈로 예상되는 부분 공유 드리겠읍니다.

var qs = require('querystring'); // 1) const qs = require("qs");

app.get("/sendmessage", (req, res) => {
  console.log('엑세스 토큰 : ', token.access_token); // 토큰 확인용 콘솔로그.
  axios
    .post(
      `https://kapi.kakao.com/v1/api/talk/friends/message/default/send`,
      qs.stringify({
        receiver_uuids:
          '["AAAAAAAAAAAAAAAAAAAA"]',
        template_object:
          "{" +
          '"object_type": "text",' +
          '"text": "텍스트 영역입니다. 최대 200자 표시 가능합니다.",' +
          '"link": {' +
          '    "web_url": "https://developers.kakao.com",' +
          '    "mobile_web_url": "https://developers.kakao.com"' +
          "}," +
          '"button_title": "바로 확인"' +
          "}",
      }), // 2) { param },  중괄호 (이걸로 예상 됩니다.)
     {
        headers: { 
          "Content-Type": "application/x-www-form-urlencoded",
          "Authorization": `Bearer ${token.access_token}`
        }
      }
      /*  3) headers / Headers 차이 ;;; 설마.?
      {
        Headers: {
          "Content-Type": "application/x-www-form-urlencoded",
          "Authorization": `Bearer ${token.access_token}`,
        },
      }
      */
    )
    .then((result) => {
      console.log(result.data);
    })
    .catch((error) => {
      console.log('헤더 정보 : ', error.config.Headers);
      console.log('에러 마사지 : ', error.response.data);
    });
});

몇일간 끙끙 거리다가
손 놓고 있었는데
덕분에 해결 되어서 맘이 편합니다…






행복한 하루 마무리 되십시오.
너무 감사합니다. 내공 5000 드립니다.






:+1::+1::+1::+1::+1::+1::+1::+1::+1::+1::+1::+1::+1::+1::+1::+1::+1: