Slack의 Bot(hubot)을 만들어 보자

8934 단어 슬랙Hubot

소개



최근 이거를 읽고 무성하게 ChatBot을 만들고 싶어졌다.
Software Design 2016년 1월호 | 기술평론사
Slack으로 손쉽게 공수 관리 «Server Works 엔지니어 블로그

그래서, 시작에 Slack의 bot 만들기를 해 보려고 생각한다.

bot의 종류



재밌게 slack bot 에서 구구 해 보았더니, hubot 되는 것이 일반적인 것 같다.
그 밖에도 WebHooks를 사용하는 것도 있는 것 같지만, 다음 단계로 하려고 한다.

hubot 추가



여기에서 Integration할 App을 선택할 수 있다.
App Directory | Slack

hubot 에서 검색하면 앱이 나오므로 도입할 팀을 선택한다.
Hubot | Slack


API 토큰이나 Bot의 이름이나 여러가지 설정할 수 있는 화면에 날기 때문에, 적당히 이름을 붙여 아이콘을 설정하면, 우선 bot 사용자가 추가되었다.


bot의 내용 만들기



bot의 자코는 할 수 있었기 때문에, 다음에 내용을 만든다.
우선은 수중의 Macbook으로 조립한다.
분명히 Node.js가 움직이는 환경과 npm이 필요하다.
수중의 환경은 이미 도입이 끝났으므로 도입 방법은 생략한다.
$ node -v
v0.12.7
$ npm -v
2.11.3

우선 개발에 필요한 모듈을 npm 경유로 인스톨 한다.
다음 네 가지가 필요하다.
  • hubot -> Hubot 본체
  • yo -> Yeoman이라는 병아리 작성 도구
  • generator-hubot -> Yeoman의 Hubot 병아리 생성기
  • coffee-script -> Hubot은 CoffeeScript로 작성된 것 같습니다
  • $ npm install -g hubot yo generator-hubot coffee-script
    

    오랫동안 도중 경과가 흐르지만 무사 설치 완료.
    조속히 제너레이터를 두드려 본다.
    $ mkdir hubot-sushi
    $ cd hubot-sushi
    $ yo hubot
    ? ==========================================================================
    We're constantly looking for ways to make yo better!
    May we anonymously report usage statistics to improve the tool over time?
    More info: https://github.com/yeoman/insight & http://yeoman.io
    ========================================================================== (Y/n)
                          _____________________________
                        /                             \
       //\              |      Extracting input for    |
      ////\    _____    |   self-replication process   |
     //////\  /_____\   \                             /
     ======= |[^_/\_]|   /----------------------------
      |   | _|___@@__|__
      +===+/  ///     \_\
       | |_\ /// HUBOT/\\
       |___/\//      /  \\
             \      /   +---+
              \____/    |   |
               | //|    +===+
                \//      |xx|
    
    ? Owner 適当な名前 <適当なメールアドレス>
    ? Bot name sushi
    ? Description We Love sushi!!!
    ? Bot adapter (campfire) slackgot back false
    ? Bot adapter slack
       create bin/hubot
       create bin/hubot.cmd
       create Procfile
       create README.md
       create external-scripts.json
       create hubot-scripts.json
       create .gitignore
       create package.json
       create scripts/example.coffee             
       create .editorconfig
                         _____________________________
     _____              /                             \
     \    \             |   Self-replication process   |
     |    |    _____    |          complete...         |
     |__\\|   /_____\   \     Good luck with that.    /
       |//+  |[^_/\_]|   /----------------------------
      |   | _|___@@__|__
      +===+/  ///     \_\
       | |_\ /// HUBOT/\\
       |___/\//      /  \\
             \      /   +---+
              \____/    |   |
               | //|    +===+
                \//      |xx|
    
    (以下略)
    

    도중 몇몇 bot의 이름 등을 들을 수 있지만, 좋은 느낌에 응답한다.
    설치가 완료되면, 우선 Hubot를 움직여 보자.
    heroku 얽힌 오류가 나오는 것 같지만, 일단 무시하고 좋을 것 같은 느낌.
    $ ./bin/hubot
    hubot-sushi> [Thu Jan 28 2016 01:10:58 GMT+0900 (JST)] ERROR hubot-heroku-alive included, but missing HUBOT_HEROKU_KEEPALIVE_URL. `heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s  | grep web-url | cut -d= -f2)`
    [Thu Jan 28 2016 01:10:58 GMT+0900 (JST)] INFO hubot-redis-brain: Using default redis on localhost:6379
    
    sushi>
    sushi> ping
    sushi> sushi ping
    sushi> PONG
    sushi> exit
    
    ping 라고 치면 PONG 라고 돌려주었다.
    덧붙여 이름을 잘못하면 상대로 해주지 않는 모양.

    자코와 내용물을 연결



    아무래도 일반적으로는 heroku에 돌진하는 것이 많은 것 같지만, 요금 개정에 의해 무료 테두리로 24시간 가동 확실히 할 수 없게 된 것 같다.
    Heroku의 새로운 요금에 대해

    그래서 일단 수중의 환경(Macbook)을 Slack을 연결해 본다.
    Slack의 Hubot 설정 화면에서 API 토큰을 확인하고 환경 변수로 설정합니다.


    $ export HUBOT_SLACK_TOKEN=<API Token>
    

    Slack 어댑터를 지정하고 Hubot을 시작합니다.
    $ ./bin/hubot --adapter slack
    [Thu Jan 28 2016 01:34:15 GMT+0900 (JST)] INFO Connecting...
    [Thu Jan 28 2016 01:34:17 GMT+0900 (JST)] INFO Logged in as sushi of bdig, but not yet connected
    [Thu Jan 28 2016 01:34:19 GMT+0900 (JST)] INFO Slack client now connected
    [Thu Jan 28 2016 01:34:19 GMT+0900 (JST)] ERROR hubot-heroku-alive included, but missing HUBOT_HEROKU_KEEPALIVE_URL. `heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s  | grep web-url | cut -d= -f2)`
    [Thu Jan 28 2016 01:34:20 GMT+0900 (JST)] INFO hubot-redis-brain: Using default redis on localhost:6379
    

    아무래도 무사히 연결된 것 같다. 여전히 heroku의 에러는 일단 무시하고 좋을 것 같다.
    조속히 Hubot과 DirectMessage를 해보자.



    제대로 응답 해 주었다!
    DM의 경우는 명령을 던지는 것만으로 좋은 것 같다.

    Channel내라면 어떻게 될까.
    시험에 Hubot과 두 명의 Channel을 만들고 명령을 던져 보았다.



    커맨드 단체로는 응답하지 않는 것 같다.
    mention 되어, Hubot의 이름을 최초로 붙이는 것으로 호출할 수 있는 것 같다.

    다음 번



    우선은 Hubot의 만드는 방법, Slack와의 제휴 방법까지를 해 보았다.
    이대로라면 수중의 Mac을 연결 없이 할 필요가 나오기 때문에, 다음 번은 어딘가의 클라우드상에 배포해 보려고 생각한다.

    참고



    이런 나라도 30분만에 Slack의 bot를 만들 수 있었다. - 알라타나 엔지니어 블로그
    Slack에서 Hubot 사용하기 - Qiita
    Hubot 설치 - Qiita
    Software Design 2016년 1월호 | 기술평론사

    좋은 웹페이지 즐겨찾기