본문 바로가기

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

Node.js로 카카오톡 플러스 친구 봇 만들기 02 (Node.js 서버 생성)


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

바이낸스(₿) 수수료 평생 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)


에서 이어진다.




여튼 지난 글에서 우리는 카카오톡 플친을 만들었다.


이제 서버를 만들 차례다.


일단 적당한 프로젝트 폴더를 하나 만들고 해당 폴더에서 터미널 (다른말로는 cmd, powershell, 명령 프롬프트? 등이 있다) 을 실행시키자.




* 터미널 사용법을 잘 모르는 사람을 위해서 설명하자면, 윈도우 기준으로

1. 우선 폴더를 적당히 하나 만든다.

2. 폴더로 들어가서 Shift 버튼을 누른 상태로 마우스 오른쪽 클릭을 한다.

3. 원래는 그냥 새 폴더, 보기, 정렬기준 등의 옵션만 뜨던 창에 powershell 창 열기 혹은 여기에 cmd창 열기 같은 옵션이 뜰 것인데, 그것을 클릭하면 된다.

4. 안되면 끙끙 앓지 말고 현재 폴더에 터미널 여는 방법 (windows , mac 등) 이케 구글링이라도 해보자.



여튼 다 열었다고 생각하고, 다음 진행을 하도록 하겠따.

npm이 다들 깔려있는 상태라고 생각하고 진행한다고 했다.


1. 만약 본인이 nodejs 를 한 적이 별로 없어서 뭐가 뭔지 모르겠다.

2. 난 express-generator 을 설치한 적이 없다.


등에 해당된다면 저 꺼무잡잡한 (혹은 남색)창에 


npm install express-generator -g


라고 치자.




npm으로 install 등 하는 법을 모른다면 설명 해 봐야 입만 아프고,

이 글이 node.js 개발 방법에 대해 설명한 글도 아니므로,

그냥 노드.js의 프로젝트 기본 틀을 개 빠르게 만들어주는 좋은 툴이라고 생각하면 된다.


몰라도 그냥 따라하자.


다 install 되었다면, (혹은 원래 깔려있었다면)


express -v ejs


라고 치자. 

(사실 그냥 express라고 쳐도 되는데 내가 원래 ejs를 쓰다보니까 습관적으로 쳤음 ㅠ_ㅠ... 상관없으니 그냥 생각 하지 말고 따라하자)





그리고 나면 자동으로 프로젝트가 생성되어 있다.


적당한 에디터(visual studio code , atom , sublime text 3 따위의 것을 의미한다.)로 폴더를 열도록 하자.


.... 아무것도 없고 어떻게 하는지 모르겠다면 인터넷에 visual studio code 설치 방법을 치고 ....


저 까 - 만 창을 visual studio code 설치 후에


다시 껏다가 켜고나서  code .  이라고 입력하자. (code . 에서 저 ' . '  까지 다 입력해야한다 ㅠ_ㅠ..)



왼쪽 폴더 구조같이 나왔으면 app.js를 눌러보자.


그러면 뭔 휘황찬란하게 이미 난 짠적도 없는데 만들어진 코드를 볼 수 있을 것이다.


이제 이 서버에서 카카오톡 봇 요청을 처리하면 된다.




지금 설명하는 내용은 카카오톡 플러스 친구 관련한 내용인데


지금 당장 들어가서 확인해 볼 필요는 없지만 여튼 이해를 돕기 위해서 언급을 한번 하고 가겠다.


우리는 카카오톡 에서 제공해주는 API라는 것을 이용해서 서버를 돌릴 것이다.


기본적으로 카카오톡 봇 API는 관리자 메뉴 -> 스마트 채팅 부분에서 세팅하게 된다. 


이 스마트 채팅이 서버가 자동 응답을 해주는 부분이 된다.



플러스친구 관리자 스마트 채팅 부분으로 들어가 



API형 질의응답을 설계할 수 있게 되어있다. 


따라서 우리는 카카오에서 제공하는 형식에 맞게 서버를 구성하면 된다.


걍 뭔소리 하는지 모르겠으면 일단 조용히 따라해보자 :)





일단 대충 읽어봐도 처음 대화창이 열리면 나오는 대화인 것 같다. 그치?


내 주소 (ex, 네이버의 주소 www.naver.com 이다) 뒤에 /keyboard 가 붙은 url을 호출하는 모양이다.


디테일한건 알 필요 없이 기계적으로 한번 움직여보자.






기존 app.js에서 1,2 라고 주석이 달린 부분을 수정하자.

원래는 users뭐시기라고 되어 있던 부분이다.

(8, 23번째 줄이다)


난 꾸준히 말했지만 자세히 이유까지 설명하지는 않을 참이다.

이해하려면 머리가 아프니까.


이해되면 축하하고, 그렇지 못하더라도 그냥 따라해보자.


1번은 routes폴더 안의 keyboard.js 파일의 소스코드를 불러오라는 뜻이고,

2번에 대해서 설명하자면, ~~~/keyboard 로 요청이 들어온 것을 아까 불러온 keyboard.js파일로 처리하라는 뜻이다.





당연하게도 이제 기존의 users.js를 keyboard.js로 바꾸어야 한다.



테스트를 하기 위해서 그냥 노래 추천하는 bot을 만들려고 하고, 이렇게 수정을 해 주면 된다.


일단 첫번째로 menu라는 곳 안에는 두가지 옵션이 있다.

type : buttons

buttons : ["메뉴1" , "메뉴 2" , "메뉴3" , .......]


이 글은 코딩을 잘 못하는 독자를 대상으로 하기 때문에 이 이외의 서버 응답에 대해서는 다루지 않을 것이다.


지금 프로그램 코드에서는 사용자에게 2지선다의 옵션을 준다.

1. "노래 추천해줘."

2. "네 노래로 추천해줘."


일단 여기까지 했으면 절반은 온거니까


오타 나지 않았나 한번 잘 확인해 보자.


* 뽀나쓰 -


app.js


var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var keyboardRouter = require('./routes/keyboard');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/keyboard', keyboardRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};

// render the error page
res.status(err.status || 500);
res.render('error');
});

module.exports = app;



keyboard.js



var express = require('express');
var router = express.Router();

/* 처음 들어왔을 때 */
router.get('/', function(req, res, next) {
const menu = {
type: 'buttons',
buttons: ["노래 추천해줘.", "네 노래로 추천해줘."]
};
res.set({
'content-type': 'application/json'
}).send(JSON.stringify(menu));
});

module.exports = router;



혹시나 오류메시지 나면 못찾고 울까봐 복붙해가라고 줌. ㅅㄱ링~