안녕하세요? 여기에 질문을 올려도 되는지… , 모르겠지만
도움을 얻고자 이렇게 질문 올립니다!!!
우선 저는 nodejs 로 만든 빽단에서
- 인가 코드 받기
- 토큰 받기
- 친구 uuid 받기
까지는 완료 하였고,
- 친구에게 메시지 보내기 기능을 테스트 중 입니다.
아래의 코드는 친구 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) 번 단계에서 받은 토큰값이 제대로 박혀 있습니다 만,
'access token should not be null or empty' / -401 에러를 받았습니다.
어떤 부분을 놓치고 있는 것인지
공유해 주시면 감사하겠습니다.
행복한 하루 되십시오.
tim.l
2
안녕하세요.
확인을 위해 앱 ID 부탁드립니다.
앱ID
https://developers.kakao.com/ 의 내 애플리케이션>앱 설정>요약 정보 : 기본정보에 있는 앱 ID
숫자로된 ID 입니다
ex) 123456
587185 입니다 선생님
늦은시간에도 답주셔 감사합니다
tim.l
4
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);
})
아차차 싶어 빠르게 적용해 보았습니다.
만,
여전히 동일한 결과 입니다.
변경된 코드와 로그 함께 전달드립니다.
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);
});
});
, TT
안녕하세요?
도움을 이어 받고자 한다면,
어떻게 해야 하는지 몰라
덧글만 하나 더 달아 봅니다
오늘도 행복한 하루 되시고
점심 맛있게 드세요
tim.l
7
안녕하세요.
아래와 같이 해보시겠어요?
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 드립니다.