앵무새 반환 slack bot

8022 단어 슬랙slackbot
slack에서 @channel 멘션에 소모하고있는 사람을 위해 'at channel police'라는 Bot을 만들었다.


메시지의 전송을 트리거로 한 slack bot를 만드는 것이 의외로 번거로웠기 때문에 정리했다. 타이틀에는 확실히 만든다고 썼지만, 써 보면 전혀 확실히 만들 수 없을 것 같다.

샘플 코드는 rails이지만, slack상의 설정이 압도적으로 가중치가 무겁기 때문에, 거기를 중심으로 정리했다.
덧붙여서 샘플에서는 slack-ruby-client라는 공식의 gem을 사용했다.

Prepare



슬랙 앱 만들기



htps : // 아피. scck. 이 m/아 ps
App name과 team을 입력하여 생성,

https 연결



callback URL이 https가 아니면 안되므로 ngrok을 사용하면 편리합니다.
ref: ngrok을 사용하여 로컬 환경을 외부에 게시

표기에 대해



slack 설정 페이지 URL은
htps : // 아피. scck. 코 m / 아 ps / {아 p_이 D} / 게네라 l
링크가 쓰여지기 쉽기 때문에 사이드 바의 이름을 xx page로 표시하기로 결정합니다.


↑ 이것이라면 Basic Information page 라고 표기

Bot 만들기



Bot Users page에서 Default username 설정 및 추가



callback url 설정, verify



이 링크처로부터 auth용과 Event API용을 각각 설정한다.

(at channel police 에서는 InteractiveMessage 도 사용했으므로 Event Subscriptions 위의 Interactive Messages 로부터도 callback 의 설정을 하지 않으면 안 되었다.)
↑InteractiveMessage는 이런 녀석

Events API 용 callback을 설정할 때 verify가 필요합니다.
{
    "token": "Jhj5dZrVaK7ZwHHjRyZWjbDl",
    "challenge": "3eZbrw1aBm2rZgRNFdxV2595E9CY3gmdALWMmHkvFXO7tYXAYM8P",
    "type": "url_verification"
}

라는 요청이 날아오므로 challenge를 엄마 앵무새 반환해야 한다.

rails로 쓰면 이런 느낌.
class ReportController < ApplicationController
  def callback
    @body = JSON.parse(request.body.read)
    case @body['type']
    when 'url_verification'
      render json: @body
    when 'event_callback'
      # ..
    end
  end
end

ref: url_verification event

이벤트 API



websocket을 사용한 Real Time Messaging API이라는 것이 있었지만, 이번에는 이벤트 API로 충분히 따랐기 때문에 이것을 사용했다.

Subscribe 할 Event는 Event Types을 참조하여 Event Subscriptions page에 설정됩니다. 이번은 유저로부터의 Message 에 반응하고 싶을 뿐이므로, message.channels만으로 좋다.



또한 OAuth & Permissions page에서 Required Scope를 설정합니다. 추가하려면 channels:history와 메시지를 보내는 chat.postMessage이라는 API를 사용하기 위해 chat:write:bot를 추가합니다. (bot는 Bot을 활성화했을 때 자동으로 추가됩니다. channels:write는 사용자를 채널에서 킥할 때 필요한 사람)



ref: OAuth Scopes

필요한 토큰



사용하는 API에 따라 필요한 토큰이 다릅니다. Message post chat.postMessage를 사용하려면 bot, workspaceuser 중 하나의 토큰을 사용하십시오.

bot token을 사용하면 bot가 게시되고 user token을 사용하면 인증 된 사용자가 게시합니다. token은 OAuth & Permissions page에서 모두 볼 수 있습니다. (덧붙여서 멤버를 채널로부터 kick 할 때는 User token 가 필요했기 때문에 at channel police 는 post message 와 함께 1 개의 어플리케이션내에서 2 종류의 token 를 사용하는 구현이 되었다.) 앵무새 반환 이제 앵무새를 반환 할 수 있습니다. def callback @body = JSON.parse(request.body.read) case @body['type'] when 'event_callback' Slack.configure do |config| config.token = ENV['SLACK_BOT_USER_TOKEN'] 끝 client.chat_postMessage ( as_user: 'true', channel: @body['event']['channel'], text: @body['event']['text'] ) 끝 head :ok 끝 끝 후기 단지 앵무새 돌려주는 것만으로 하는 일 많아서 피곤했고, 설정 페이지에서 보고 싶은 자원이 어디에 있는지를 알기 어려워서 일일이 가는데 시간이 걸렸다. slack-ruby-client이라는 공식 gem을 사용했지만 chat_postMessage이라는 이름의 메소드를 보면서 힘들었다.

at channel police를 완성시키는 건강은 없어져 버렸지만 어디 그대로 성과 제로는 싫었기 때문에 지견만 정리했다.

REF



Slack-Ruby-Onboarding-Tutorial

좋은 웹페이지 즐겨찾기