Ruby의 FaaS로 slackbot 만들기

최근 내 화제 서비스 FaaStRuby를 사용하여 Slack Bot 만들기
FaaStRuby는 무엇입니까? 는 분은 여기

환경



faastruby : 0.2.1

슬랙 측 설정



webhook 등록



이번에는 Outgoing Webhooks를 사용하여 bot를 만들므로 설정을 수행합니다.

h tps : // 테 m 핥아. scck. 코 m / 아 ps / 마나게 / 쿠 s와 m-in g 라치온 s
여기에서 outgoing webhooks의 integration 만들기



outgoing webhooks가 등록되지 않은 경우 h tps : // 테 m 핥아. scck. 코 m/아 ps의 검색 창에서
'outgoing webhooks'에서 검색 및 생성







작성한 후 Integration Settings의 channel과 URL에 각각 Bot을 넣고 싶은 채널과 faastruby로 만든 엔드포인트를 입력한다
※ 엔드포인트에 대해서는 후술



FaaStRuby 측 설정



이쪽에서는 bot의 내용을 만들어 간다
이번에는 쉽게 사용자 이름과 사용자가 입력한 단어를 반환하는 bot를 만든다

Gem 설치


$ gem install faastruby

작업 공간 만들기



이번에는 slackbot라는 이름으로 작업 공간을 만들었습니다.
아마 겹치지 않으면 원하는 이름의 것을 만들 수 있습니다.
$ faastruby create-workspace slackbot

Function 만들기



이쪽도 slackbot 로 작성하고 있다
$ faastruby new slackbot

위 명령을 실행하면 다음 파일이 자동으로 생성됩니다.
workspace(slackbot)
   ├─ function(slackbot)
       ├─ Gemfile
       ├─ handler.rb 
       ├─ faastruby.yml
       └─ spec
           ├─ handler_spec.rb
           ├─ spec_helper.rb
           └─ helper
               └─ faastruby.rb

이 중 handler.rb 가 function의 내용

bot의 구현은 이런 느낌

handler.rb
require 'json'

def handler event
  data = event.body ? JSON.parse(event.body) : {}
  response = {}
  if data['user_name'] != 'slackbot'
    response['text'] = "#{data['user_name']} : #{data['text']}"
  end
  respond_with response
end

event는 요청 정보를 가지며 event.body에 요청 내용이 문자열로 포함되어 있습니다.
outgoing webhook의 bot에서는 다음과 같은 데이터가 전달됩니다.
token=*********************
team_id=T0001
team_domain=example
channel_id=C2147483705
channel_name=test
timestamp=1355517523.000005
user_id=U2147483697
user_name=Steve
text=googlebot: What is the air-speed velocity of an unladen swallow?
trigger_word=googlebot:
respond_with response 에서 응답 반환
아래의 JSON을 반환하면 bot이 채널에서 텍스트 내용을 중얼거립니다.
{
  "text": "African or European?"
}

배포



마지막으로 FaaStRuby 서버에 배포하지만 그 전에 faastruby.yml를 조금 다시 씁니다.

faastruby.yml
---
name: slackbot  # function名
test_command: rspec    # テストコマンド
abort_build_when_tests_fail: false    # テストが失敗したときにビルドをやめるか
abort_deploy_when_tests_fail: false    # テストが失敗したときにデプロイをやめるか

그렇다면 후반 두 가지 설정을 false로 설정하지 않으면 테스트에서 떨어지고 배포 할 수 없습니다.spec/handler_spec.rb 의 테스트를, 이번용으로 재작성하면 true에서도 배포할 수 있다

배포 명령
$ cd slackbot
$ faastruby deploy-to slackbot

배포가 끝나면 다음과 같은 엔드포인트가 생성됩니다.
https://api.faastruby.io/slackbot/slackbot

workspace와 function의 이름을 동일하게 만든 실패 ...
어느 것이 확실하지 않습니다
엔드포인트는 이런 형태가 된다
https://api.faastruby.io/workspace-name/function-name

이 끝점을 위의 Slack Webhooks 설정에 넣어서 bot를 이동할 수 있습니다.

데모





문제없이 움직였다.

결론



FaaStRuby는 좋다.

참고 URL



Slack의 Outgoing Webhooks를 사용하여 게시물에 반응하는 bot 만들기

좋은 웹페이지 즐겨찾기