앵무새 반환 slack bot
@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
, workspace
및 user
중 하나의 토큰을 사용하십시오.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
Reference
이 문제에 관하여(앵무새 반환 slack bot), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takose/items/bc2b63426b9921604599텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)