본문 바로가기

Programming Project/Node로 카톡-페메봇 만들기

Node.js로 카톡플친 / 페이스북 메시지 봇 만들기 08 (페북 앱 만들기, 라이브 설정)


투명한 기부를 하고싶다면 이 링크로 와보세요! 🥰 (클릭!)

바이낸스(₿) 수수료 평생 20% 할인받는 링크로 가입하기! 🔥 (클릭!)

이 글은 


Node.js로 카카오톡 플러스 친구 봇 만들기 01 (https://wingnim.tistory.com/entry/Nodejs%EB%A1%9C-%EC%B9%B4%EC%B9%B4%EC%98%A4%ED%86%A1-%ED%94%8C%EB%9F%AC%EC%8A%A4-%EC%B9%9C%EA%B5%AC-%EB%B4%87-%EB%A7%8C%EB%93%A4%EA%B8%B0-01)


로 부터 읽으면 되고


Node.js로 카카오톡 플러스 친구 봇 만들기 07 (https://wingnim.tistory.com/entry/Nodejs%EB%A1%9C-%EC%B9%B4%ED%86%A1%ED%94%8C%EC%B9%9C-%ED%8E%98%EC%9D%B4%EC%8A%A4%EB%B6%81-%EB%A9%94%EC%8B%9C%EC%A7%80-%EB%B4%87-%EB%A7%8C%EB%93%A4%EA%B8%B0-07-%ED%8E%98%EB%A9%94-%EB%B4%87-%EC%B6%94%EA%B0%80)



ㅎㅇ 아 진짜 페이스북 거지같은 새1끼덜...ㅠㅠ


페이스북 봇 만들기 겁나 까다로움


정확히 말하자면 '답장을 보내기'에 너무 까다로운 조건들이 많아서 좀 짜증났음



일단 한번 쭉 해보자.


router.get('/webhook', function(req, res) {
if (req.query['hub.verify_token'] == '설정 확인할 수 있는 토큰임') {
return res.send(req.query['hub.challenge']);
}
return res.send('Error, wrong validation token');
});

var Bot = require('messenger-bot');
var bot = new Bot({
token: '페이지 식별할 수 있는 토큰임 저번 글에 나와있음', // 페이지 토큰
verify: '설정 확인할 수 있는 토큰임', // 설정한 확인 토큰
app_secret: '앱 시크릿 토큰임. 저번 글에 나와있음' // 앱 시크릿 토큰
});

var fb_button=[{ // 1
"type": 'postback',
"title": '오늘 급식',
"payload": 'Today'
},{
"type": 'postback',
"title": '내일 급식',
"payload": 'Tomrrow'
},{
"type": 'postback',
"title": '모레 급식',
"payload": 'DATomrrow'
}];

bot.on('error', function(err) {
console.log(err.message);
});

bot.on('message', function(payload, reply) { // 2
var text = payload.message.text;
bot.getProfile(payload.sender.id, function(err, profile) {
if (err) throw err;
// 배열 형태로 여러 버튼들을 전달할 수 있어요
reply( //user에게 답장하는 text 내용
{
"attachment": {
"type": 'template',
"payload": {
"template_type": 'button',
"text":"언제 먹을 급식을 알고싶어요?", //user에게 답장하는 text 내용
"buttons": fb_button
}
}
}
, function(err) {
if (err) throw err;
});
});
});
bot.on('postback', (payload, reply, actions) => { // 3
var reply_str="",user_res=payload.postback.payload;
console.log(payload.postback);
if(user_res=="Today"){
reply_str=makeText(nd);
}
else if(user_res=="Tomrrow"){
var temp = new Date(utc + (3600000*offset));
temp.setMonth(nd.getMonth(),nd.getDate()+1);
reply_str=makeText(temp);
}
else if(user_res=="DATomrrow"){
var temp = new Date(utc + (3600000*offset));
temp.setMonth(nd.getMonth(),nd.getDate()+2);
reply_str=makeText(temp);
}
bot.getProfile(payload.sender.id, function(err, profile) {
if (err) throw err;
reply(
{
"attachment": {
"type": 'template',
"payload": {
"template_type": 'button',
"text":reply_str,
"buttons": fb_button
}
}
}
, function(err) {
if (err) throw err;
});
});
})

// 페이스북 메세지는 모두 POST 요청으로 이를 다시 messenger-bot에게 패스
router.post('/webhook', function(req, res) {// 4
bot._handleMessage(req.body);
res.status(200).jsonp({
message: 'ok'
});
});



예전 소스에서 고친 부분들이 조금 있는데, 여튼 카톡 봇 만든 기준으로

hanmin.js에 해당 내용이 추가 되었다.


귀찮으면 복붙하고 내용 분석해서 수정해서 적용만 하도록 하자.


토큰 설정해야하는 4곳만 고치면 바로 돌아갈 거다.



수정한 부분+ 소스에 대해서 설명을 하도록 하겠다.


일단 1번 주석 같은 경우에는

저렇게 하면 사용자에게 답장을 보낼 때 버튼 형태로 사용자에게 물어볼 수 있게 된다.





이런식으로 뜬다.


이 때, 최대 3개까지밖에 선택지를 못 준다. (ㅅㅂ 이것때문에 몇시간 헤멤)


왜 그런지는 모르겠지만 여튼 페메 봇 만들기는 기능 제공이 좀 구린듯.


그리고 일주일 급식에서 모레 급식으로 버튼이 바뀐건


답장도 640글자 까지밖에 안되더라? ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ


그래서 1주일 급식 다 보내니까 글자 수 제한이 초과돼서 어쩔수없이 모레 급식으로 바꿈 ㅋㅋㅋㅋㅋ


2번 주석은 사용자가 나한테 그냥 문장을 적어서 뭐라고뭐라고 보냈을 때 답장하는 부분이다.


우리는 상냥하게 뭐 이것 저것 대답해줄 심심이가 아니기 때문에 그냥 뭐라고 사용자가 말하던지 세개 버튼 선택지와 함께


언제 먹을 급식을 알고싶어요?


라고 답장을 한다.



3번 주석 같은 경우에는 사용자가 버튼을 눌러서 답장 했을 경우에 실행되는 부분이다.


reply_str 이라는 변수를 만들어서 저번 카카오 때 처럼 답장할 텍스트를 미리 넣어주고 보냈다.



reply 부분 안에 들어가는 답장을 조금 더 자세히 보자



"attachment": {
"type": 'template',
"payload": {
"template_type": 'button',
"text":reply_str,
"buttons": fb_button
}
}


일단 template 라고 해놓은 후에 답장을 하면

그냥 문장을 전송하는 대신에 이렇게 버튼이라던지 링크라던지 하는 복잡한 것을 전송할 수 있다.


payload안에는 그게 어떤 종류의 복잡한건지 정해주면 되는데 우리는 버튼이라고 썼다.


그리고 버튼 위에 뜰 텍스트를 적고,

buttons에는 미리 만들어놓은 버튼 템플릿을 보내줬다.


4번 주석 같은 경우에는 별건 없는데 그냥 한번 언급하고 싶어서..


페메에서 이제 사용자가 뭐라고 할 경우에 post로 /hanmin/webhook 주소로 우리에게 요청을 다시 보내준다.


그럼 그 요청을 받아서 bot._handleMessage(req.body)라는 코드에서 우리가 아까 위에 주구장창 써놓은 bot.on 메시지 , 포스트백


등등 이런곳으로 노나주는 것이다.






아 그림 극혐 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ




여튼 bot이 뭐냐면 우리가 messenger-bot 이라는거 다운받은 그 모듈인데,


req.body 라는 , 우리가 페이스북으로부터 받은 정보를 bot 소스에 보내면 거기에서 처리를 해주는 것이다.


ㅁㅇㄴㅀㅁㄴㅇㄻㄴㅇㄹ


여튼 이렇게 해서 





이렇게 됐다.



ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ근데 여기서 끝인줄 알았지? 짜잔~~~~ 아닙니다~~~


지금까지 우리가 만든 앱은 개발용이어서, 테스트용으로만 사용 가능했던 앱이다.


그래서 내 페북 아이디로 메시지를 전송 해야만 답장을 보낸다는 치명적인 문제점이 있다.




그럼 모두가 사용하려면 어떻게 해야 하냐!!! 겁나 귀찮은디


https://sonet.kr/461 


나는 이 포스팅을 참고해서 진행했고


http://jinyokakao.herokuapp.com/


여기다가 제가 뭔가 끄적여놨거든요?


알아서 줏어다가 복사하시던지 (대충 몇개만 수정하면 됨)


https://www.privacy.go.kr/a3sc/per/inf/perInfStep01.do


여기서 대충 이것저것 그럴듯하게 만들어주니까 여기서 다시 만들던지 해서


사이트에서 볼 수 있게 서버에 올려놓고





요기 우리 앱의 개인정보처리방침URL을 적어 줘야 한다.





즉.


1. 우리 사이트에서 개인정보처리방침을 볼 수 있게 한다.

2. 그 URL을 등록한 후에야 앱 상태를 라이브로 볼 수 있다.



는 것인데




구찮아서 그냥 index.ejs에다가 개인정보처리방침을 복붙했다.


index.ejs


<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
1. 개인정보의 처리 목적 &lt;jinyo>(‘jinyokakao.herokuapp.com’이하 ‘jinyokakao.herokuapp.com’) 은(는) 다음의 목적을 위하여 개인정보를 처리하고 있으며, 다음의 목적 이외의 용도로는 이용하지 않습니다.
- 고객 가입의사 확인, 고객에 대한 서비스 제공에 따른 본인 식별.인증, 회원자격 유지.관리, 물품 또는 서비스 공급에 따른 금액 결제, 물품 또는 서비스의 공급.배송 등


2. 개인정보의 처리 및 보유 기간

&lt;jinyo>(‘jinyokakao.herokuapp.com’이하 ‘jinyokakao.herokuapp.com’) 은(는) 정보주체로부터 개인정보를 수집할 때 동의 받은 개인정보 보유․이용기간 또는 법령에 따른 개인정보 보유․이용기간 내에서 개인정보를 처리․보유합니다.

② 구체적인 개인정보 처리 및 보유 기간은 다음과 같습니다.
☞ 아래 예시를 참고하여 개인정보 처리업무와 개인정보 처리업무에 대한 보유기간 및 관련 법령, 근거 등을 기재합니다.
(예시)- 고객 가입 및 관리 : 서비스 이용계약 또는 회원가입 해지시까지, 다만 채권․채무관계 잔존시에는 해당 채권․채무관계 정산시까지
- 전자상거래에서의 계약․청약철회, 대금결제, 재화 등 공급기록 : 5년




3. 개인정보의 제3자 제공에 관한 사항

&lt;jinyo>('jinyokakao.herokuapp.com'이하 'jinyokakao.herokuapp.com')은(는) 정보주체의 동의, 법률의 특별한 규정 등 개인정보 보호법 제17조 및 제18조에 해당하는 경우에만 개인정보를 제3자에게 제공합니다.

&lt;jinyo>('jinyokakao.herokuapp.com')은(는) 다음과 같이 개인정보를 제3자에게 제공하고 있습니다.


1.
- 개인정보를 제공받는 자 :
- 제공받는 자의 개인정보 이용목적 :
- 제공받는 자의 보유.이용기간:



4. 개인정보처리 위탁

&lt;jinyo>('jinyokakao.herokuapp.com')은(는) 원활한 개인정보 업무처리를 위하여 다음과 같이 개인정보 처리업무를 위탁하고 있습니다.

1.
- 위탁받는 자 (수탁자) :
- 위탁하는 업무의 내용 :
- 위탁기간 :



&lt;jinyo>('jinyokakao.herokuapp.com'이하 'jinyokakao.herokuapp.com')은(는) 위탁계약 체결시 개인정보 보호법 제25조에 따라 위탁업무 수행목적 외 개인정보 처리금지, 기술적․관리적 보호조치, 재위탁 제한, 수탁자에 대한 관리․감독, 손해배상 등 책임에 관한 사항을 계약서 등 문서에 명시하고, 수탁자가 개인정보를 안전하게 처리하는지를 감독하고 있습니다.

③ 위탁업무의 내용이나 수탁자가 변경될 경우에는 지체없이 본 개인정보 처리방침을 통하여 공개하도록 하겠습니다.
5. 정보주체와 법정대리인의 권리·의무 및 그 행사방법 이용자는 개인정보주체로써 다음과 같은 권리를 행사할 수 있습니다.

① 정보주체는 jinyo(‘jinyokakao.herokuapp.com’이하 ‘jinyokakao.herokuapp.com) 에 대해 언제든지 다음 각 호의 개인정보 보호 관련 권리를 행사할 수 있습니다.
1. 개인정보 열람요구
2. 오류 등이 있을 경우 정정 요구
3. 삭제요구
4. 처리정지 요구



6. 처리하는 개인정보의 항목 작성

&lt;jinyo>('jinyokakao.herokuapp.com'이하 'jinyokakao.herokuapp.com')은(는) 다음의 개인정보 항목을 처리하고 있습니다.

1&lt;앱을 만들기 위해서만 사용합니다>
- 필수항목 : 이메일
- 선택항목 :




7. 개인정보의 파기 &lt;jinyo>('jinyokakao.herokuapp.com')은(는) 원칙적으로 개인정보 처리목적이 달성된 경우에는 지체없이 해당 개인정보를 파기합니다. 파기의 절차, 기한 및 방법은 다음과 같습니다.

-파기절차
이용자가 입력한 정보는 목적 달성 후 별도의 DB에 옮겨져(종이의 경우 별도의 서류) 내부 방침 및 기타 관련 법령에 따라 일정기간 저장된 후 혹은 즉시 파기됩니다. 이 때, DB로 옮겨진 개인정보는 법률에 의한 경우가 아니고서는 다른 목적으로 이용되지 않습니다.

-파기기한
이용자의 개인정보는 개인정보의 보유기간이 경과된 경우에는 보유기간의 종료일로부터 5일 이내에, 개인정보의 처리 목적 달성, 해당 서비스의 폐지, 사업의 종료 등 그 개인정보가 불필요하게 되었을 때에는 개인정보의 처리가 불필요한 것으로 인정되는 날로부터 5일 이내에 그 개인정보를 파기합니다.



8. 개인정보 자동 수집 장치의 설치•운영 및 거부에 관한 사항

jinyo 은 정보주체의 이용정보를 저장하고 수시로 불러오는 ‘쿠키’를 사용하지 않습니다.


9. 개인정보 보호책임자 작성


① jinyo(‘jinyokakao.herokuapp.com’이하 ‘jinyokakao.herokuapp.com) 은(는) 개인정보 처리에 관한 업무를 총괄해서 책임지고, 개인정보 처리와 관련한 정보주체의 불만처리 및 피해구제 등을 위하여 아래와 같이 개인정보 보호책임자를 지정하고 있습니다.

▶ 개인정보 보호책임자
성명 :jinyo
직책 :프로그래머
직급 :대표
연락처 :010-7736-0000, solomoj94@naver.com,
※ 개인정보 보호 담당부서로 연결됩니다.

▶ 개인정보 보호 담당부서
부서명 :
담당자 :
연락처 :, ,
② 정보주체께서는 jinyo(‘jinyokakao.herokuapp.com’이하 ‘jinyokakao.herokuapp.com) 의 서비스(또는 사업)을 이용하시면서 발생한 모든 개인정보 보호 관련 문의, 불만처리, 피해구제 등에 관한 사항을 개인정보 보호책임자 및 담당부서로 문의하실 수 있습니다. jinyo(‘jinyokakao.herokuapp.com’이하 ‘jinyokakao.herokuapp.com) 은(는) 정보주체의 문의에 대해 지체 없이 답변 및 처리해드릴 것입니다.



10. 개인정보 처리방침 변경

①이 개인정보처리방침은 시행일로부터 적용되며, 법령 및 방침에 따른 변경내용의 추가, 삭제 및 정정이 있는 경우에는 변경사항의 시행 7일 전부터 공지사항을 통하여 고지할 것입니다.



11. 개인정보의 안전성 확보 조치 &lt;jinyo>('jinyokakao.herokuapp.com')은(는) 개인정보보호법 제29조에 따라 다음과 같이 안전성 확보에 필요한 기술적/관리적 및 물리적 조치를 하고 있습니다.

1. 개인정보에 대한 접근 제한
개인정보를 처리하는 데이터베이스시스템에 대한 접근권한의 부여,변경,말소를 통하여 개인정보에 대한 접근통제를 위하여 필요한 조치를 하고 있으며 침입차단시스템을 이용하여 외부로부터의 무단 접근을 통제하고 있습니다.

</body>
</html>

알아서 잘 복사해서 쓰시던지 말던지 헤헷...


index.ejs는 그냥 우리 사이트 바로 접속하면 뜨는 페이지인데


넘 귀찮은 나머지 이렇게 쓰게 되어부렸다...



여튼 그래서 저렇게 링크 걸고 난 후에 



여기 상태를 개발중인걸 라이브로 바꿔서


앱을 라이브 상태로 바꾸기까지 성공했다.


+ 더해서



이제 우리는 라이브니까 이거 메신저쪽 들어가서 우리 이제 메시지좀 자동으로 보낼게요~ 해야하는데



아래쪽에 보면 여기 페이지스 메시징을 활성화 해야 한다.


그러려면 기본적으로 아이콘과 비즈니스 사용 등의 기본 정보를 업데이트 한 이후여야 한다.



ㅇㅋ 그렇게 하고 나서 보내기 받기 api 봇 있는 내용에 대해서 검토하시는 분들께 대충 알아들으시라고 이케 적어서 제출하고



그러면 여기 이케 제출할 수 있게 되어서 검수를 위해 제출을 클릭하면 딱 - 제출이 된다.




검수중임! 이럼 됐다.



ㅅㄱ링...


하앜...하앜...힘들었다....


ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ진짜 개쫄리는게



메신저 리뷰 팀에서 이케 리얼로 페메를 보낸다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ




글을 너무 대충쓴거 나도 알고있는데


이해가 안가도 그냥 따라하기만 하면 되니까..


따라하기에 문제가 있는 부분은 댓글을 남겨달라!


+ ) 메시지 전송할 권리에 대해 최종승인 받으려면 비즈니스 인증을 해야하는데

난 사업자도 없고 해서;;; 결국 안될 것 같다.



비즈니스 인증을 받아야 한다고 한다...




광광 우럭다... 다른 사람들은 쓸 수 없다니