Rootree - "Collect, conquer"

Node.js로 5분안에 봇 만들기

제목이 조금 자극적이지만 준비만 되어있다면 약간 과장을 섞어 5분이면 봇 하나를 만들 수 있다. 그렇다고 어디가서 5분이면 만들어요! 라고 말하지는 말자

아래의 예제는 messenger-bot의 Readme 예제를 사용하였고 Github에 Example 소스코드를 올려두었다.

준비사항

시작하기 앞서 아래의 것들이 준비되어야만 5분정도 걸린다. 참고로 Mac 터미널 환경에서 작업하였으나 윈도우도 크게 문제가 되지 않을 것이다. 윈도우 시러요

  • Git
  • Node.js (여기서는 v6.2.0을 사용했다) 설치법 참고
  • 무료 서버 사용을 위한 Heroku 세팅 여기 참고
  • 복사 붙여넣기 마인드

Heroku 앱을 만들기

Create Heroku App

먼저 Heroku Dashboard에 가서 앱의 이름을 넣고 Create App을 누른다. 여기서는 bot-5min으로 정했다.

페이스북 세팅하기(1)

facebook setting #1

페이스북에서 우측상단의 화살표를 클릭하여 페이지를 생성한다. 아래 이미지 대로 하면 된다.

facebook setting #2

여기서 messenger옆의 Get started를 누르고 또 같은 버튼을 누른다.

facebook setting #3

Setting에 가서 App secret 아래의 show버튼을 누른 후 어딘가에 복사해둔다.

facebook setting #4

좌측 메뉴의 Messenger 탭 밑에 Setting을 눌러 Page Access Token을 생성하고 어딘가에 저장해둔다.

코드 생성하기

잠깐 페이스북 세팅 페이지를 놔둔채 코드를 짜보도록 하자. 폴더를 하나 만들고 다음과 같은 명령어를 입력한다.

$ mkdir bot-5min
$ cd bot-5min
$ git init
$ heroku git:remote -a <Heroku app 이름>

그 다음 각 파일을 만들고 코드를 복사 붙여넣기하고 약간의 수정을 한다.

app.js

const http = require('http')
const Bot = require('messenger-bot')
const process = require('process')

let bot = new Bot({
  token: '<여기에 아까 저장해둔 Page access token을 넣는다>',
  verify: 'helloworld',
  app_secret: '<아까 저장해둔 App secret token을 넣는다>'
})

bot.on('error', (err) => {
  console.log(err.message)
})

bot.on('message', (payload, reply) => {
  let text = payload.message.text

  bot.getProfile(payload.sender.id, (err, profile) => {
    if (err) throw err

    reply({ text }, (err) => {
      if (err) throw err

      console.log(`${profile.first_name} ${profile.last_name}: ${text}`)
    })
  })
})

http.createServer(bot.middleware()).listen(process.env.PORT)
console.log('서버 뜸')

package.json

{
  "name": "bot-5min",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node app.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "messenger-bot": "^2.3.0"
  },
  "engines": {
    "node": "6.2.0"
  }
}

배포하기

이 부분은 Heroku Dashboard에서 App 선택을 하고 Deploy 메뉴를 누르면 나오는 내용이다. 준비사항에서 Heroku Toolbelt를 설치해두었다는 가정하에 아래를 진행하였다.

$ heroku login

이메일과 비밀번호를 적고 아래의 내용을 진행한다. (당연하게도 bot-5min 대신 당신의 앱 이름을 넣어야한다..)

$ git add .
$ git commit -am "make komerica great!"
$ git push heroku master

잠시 기다린후 자신의 Heroku URL로 접속해보자. {"status": "ok"}라고 나온다면 성공!

https://<Heroku App 이름>.herokuapp.com/_status

페이스북 세팅하기(2)

이제 페이스북을 조금 더 세팅하면 끝난다. 아까전 페이스북 앱설정 페이지로 돌아가서 Messenger setting으로 들어간 후 Webhooks를 아래처럼 자신의 Heroku app url을 넣어 설정하고 아까 만든 페이스북 페이지가 Webhook을 subscribe 하게 한다. 참고로 Verify token은 코드를 복붙했다면 helloworld다.

facebook setting #5

facebook setting #6

세팅이 끝났다면 이제 만들어둔 페이지에 메세지를 보내본다. 참고로 App review를 받기전까지는 개발자로 등록되지 않은 사람들은 페이지에 메세지를 보내도 답변을 받을 수 없다.

Oops

더 발전을 시키고자 하면 messenger-bot 패키지와 Messenger platform 문서를 읽으면 가능하다.

후기

봇 만드는 시간보다 블로그 글을 쓰는 시간이 훨씬 더 오래 걸렸다(..)

리타(RiTa - 나에게 딱 맞는 수학)

지난주 화요일, 우리는 리타(RiTa)의 클로즈 베타를 시작하였다. 왜 우린 이런걸 만들었을까?

리타를 소개합니다 RiTa - 나에게 딱 맞는 수학

리타는 학습 효율의 극대화를 목표로 만들어졌다. 통계청에 의하면 대다수의 고등학생들은 하루에 2시간의 학습시간(학교외 시간)을 가진다고 한다. 2시간은 보는 관점에 따라 값진 시간이 되거나, 그냥 지나가는 시간이 될 수 있다. 가령 축구 경기의 경우, 2시간이면 경기의 승패가 갈린다. 반면 여행에 있어 반드시 거쳐야하는 출입국 심사 대기시간이 2시간이다. 해외여행을 다녀왔다면 이 시간이 얼마나 지루한지 기억할 것이다. 우리는 하루 2시간을 공부해도 10시간 공부한 것 같은 서비스를 만들고자 했다.

축구 경기의 한장면 축구 경기의 한장면

우리는 지난 2년 동안 온라인 모의고사 플랫폼 붐스코어를 운영해오며 오랫동안 학생들을 분석해왔고 다음과 같은 목표를 세웠다. “10문제 푼 것 같은 1문제”.

문제를 많이 풀면 성적이 오른다. 같은 유형의 문제를 일정 횟수 이상 반복해서 푸는 것이 의미가 있을까? 없다. 우린 이에 대해 매우 단호하다. 시험에 어떠한 유형이 나와도 풀고싶다면, “생각하는 방법” 그 자체를 길러야 한다.

미적분2 학습 화면 미적분2 학습 화면

그런데 과연 문제만 던져준다고 학생들이 공부를 열심히 할것인가, 그렇지 않다. 상당수의 학생이 학원에 다니는 이유는, 그 방법을 학원에서 제공해주기 때문이다. 안타깝게도 이제 대다수의 학원은 교육부의 사교육 정책(심야교습 금지)과 학교들의 자체적인 정책(야간자율학습)으로 인하여 예전처럼 학생들을 지도해주지 못한다.

학원이 해주던 방법의 제시; 문제를 주는 것. 의지를 북돋는 것. 학생의 현재 위치를 파악하는 것. 이것을 대체 어떻게 효율적으로 제공할 것인가? 우리는 헬스장의 트레이너들을 보며 이에 대한 해답을 얻었다.

공부는 이렇게 즐겁지 않아 공부는 이렇게 즐겁지 않아

우리는 학생들을 트레이닝 할것이다. 학원들이 해오던 교습법을 시간과 공간의 제약을 받지 않고, 학생들에게 보다 더 과학적인 접근을 통하여 제공하고자 한다. 리타(RiTa)를 통해 전문가가 구성한 문제들을 “개인 맞춤”으로 제공하고 “전투적인 학습 트레이닝”을 제공하고자 한다. 여기까지 읽었다면 약을 한번 맛보기를 권한다. 리타 바로가기