[ChatBot] 카카오 챗봇 따라하기 봇 - 2

2018. 4. 6. 10:48공부 자료

[ChatBot] 카카오 챗봇 따라하기 봇 - 2


    지난번 포스팅에서는 카카오 챗봇을 설정하는 방법을 진행했었다. 이번 시간에는 카카오 챗봇의 핵심인 서버를 만들어 보도록 하겠다. 지난 시간에 설정한 왼쪽 메뉴에 보면 스마트 채팅이라는 메뉴가 있다. 

[ 사진 1 - 카카오 스마트 채팅 설정 ]


   우리는 당연하게도 정해진 답변만 말하고 싶은 것이 아니니 오른쪽 API 형을 들어가도록 하자.


[ 사진 2 - API 형 설정, 개인정보는 가렸다. ]


    설정 칸에 대해서 간단하게 말하자면, 카카오톡은 기본적으로 RESTful API 를 사용하여 Query를 날린다. 우리가 http://naver.com/blog 를 치면 http://naver.com 의 blog 디렉토리 혹은 blog 위치에 있는 데이터를 요구하는 것인데, 카카오톡도 우리의 서버에 그러한 검색을 한다고 생각하면 된다. 

    앱 url은 따라서 우리의 서버 domain( 이름 ) 혹은 그저 간단하게 https://외부 IP:접속 port를 써도 된다. 외부 IP나 포트에 관한 내용은 여기 에서 확인 가능하다. 앱 이름은 아무거나 써도 된다. 앱 구분을 위한 것이라고 생각하면 된다. 앱 설명도 그저 설명일 뿐이니 아무렇게나 써도, 생략해도 좋다. 알림 받을 전화번호는 만약 이 서버를 돌리는 와중 서버가 터지거나, 특정 오류로 서버에서 응답이 잘 안올 시 연락이 오는 번호이다. 자기 번호를 쓰도록 하자. ( 보통 카톡으로 응답이 온다. )

    이제 서버에서 챗봇 서버를 돌리도록 해야한다. 보통 노드 / 파이썬으로 많이 구현하는데, 노드를 한 번도 써본적이 없어서, 또한 노드가 설명된 자료가 많아서 노드로 진행했었다. 진행 하기 전, 자신의 서버에 node / npm 이 설치되어 있는지 확인하자. 각각 

node --help

npm --help

로 설치가 되어있는지 확인 가능하다. 만약 설치가 안되어 있다면,

sudo apt-get install node npm

으로 설치 가능하다.


    우리는 우리의 따라하기 서버에서 express와 body-parser 라는 모듈을 사용 할 것인데, 노드에서는 이런 모듈을 npm으로 받을 수 있다. 마치 Python의 pip와 비슷한 프로세스이다. 먼저 따라하기 디렉토리를 만들고 그 디렉토리로 들어가도록 하자. 

mkdir repeater

cd repeater

그 이후, shell 창에 

sudo npm install body-parser

sudo npm install express

를 쳐서 npm에서 모듈을 다운 받도록 하자.


모듈을 다운 받았다면 서버에서 다음과 같은 코드를 입력하자.



    자세한 코드 리뷰가 필요할진 모르겠지만, 일단 진행하도록 하겠다. 카카오톡 API에 대한 설명은 여기 에 잘 나와있다. 소스 코드에 대한 질문은 받지 않는다고 하니 참고하도록 하자. ( port는 개인 정보이므로 가렸다. 자신의 포트를 입력하도록 하자. )


    먼저 app 에 express() 서버를 만들게 var app = express()를 진행했다. 또한 app에서 bodyParser로 json 형태를 자르기 위해서 ( 카카오톡은 json 형태로 데이터를 주고 받는다. ) app.use 를 사용하였다. get, post 등의 질의는 app.get, app.post 메소드로 처리 가능하고, 그 뒤에 '/keyboard', '/message' 등의 질의를 처리하게 하기 위해 첫번째 인자로 각각을 입력하였다. 또한 서버가 처음에 잘 살아있는지 확인을 위해 "Hello world!"를 입력 하였다.


    카카오 톡에서는 처음 사용자가 플러스 친구 홈에 들어가면 /keyboard 를 get으로 질의하게 되어있다. 그에 대한 답변으로 아무거나 적은 list를 보내주며, 카카오톡으로 메시지를 보내면 /message 를 post로 질의한다. 그에 대한 답변으로 message의 content를 그대로 복사해서 보내주는 코드이다.


    서버 코드를 작성한 뒤, shell 창에서 node repeater.js ( 내 경우의 소스 이름이다. ) 로 작성한 소스를 실행 시켜 주자. 인터넷 창에 자신의 "https://IP:port" 를 입력하여 hello world! 가 뜨는지 확인 해 보자. 또한 API 형 설정 창에서 API 테스트를 눌러 API가 통과하는 것을 확인하자. 다 통과하였다면, 축하한다. 이제 챗봇이 완성 된 것이다. 카카오톡 홈에서 플러스 친구 링크를 공유 할 수 있으므로 참고 바란다.


[ 사진 3 - 따라한다. 에러가 생기면 위처럼 카톡이 온다. ]


ps ) 후에 알게된 사실인데 node express 개발용 서버, 즉 우리가 돌리는 서버는 자동으로 잘 꺼진다고 한다. 실제로 필자도 자꾸 꺼지는 서버때문에 계속해서 연락을 받았다.


ps2 ) 참고로 이런 챗봇을 만들면 꼭 욕을 하는 사람들이 있는데, 하필 그때가 서버가 꺼진 상태라 나한테 욕이 오는 경우가 있다. 마음 쓰지 말도록 하자.


ps3 ) 메시지에 대한 응답의 답변은 요즘 이슈가 되는 공짜 메시지 1000건과 관련이 없으며, 이는 개인에게 플러스 친구가 먼저 보내는 메시지가 1000건으로 제한된다는 의미이다.