티스토리 뷰

반응형

왜 Slack bot ?

회사, 개발 프로젝트를 진행하다보면 협업 툴로서 Slack을 많이 사용한다.

 

 

Slack을 사용하다보니 여러 회사의 slack 활용법을 볼 수 있었는데, 그 중 스포카 기술 블로그에서 언급한 사례들이 정말 흥미로웠고 만들어보고 싶다는 마음이 생겼다.

 

슬랙봇, 어디까지 만들어봤니?

스포카의 슬랙봇 활용법 엿보기

spoqa.github.io

 

그래서 알아보니, Slack 자체에서도 많은 슬랙봇을 지원하기도 하고, 스포카 블로그에서 말하듯 지원하는 외부 어플리케이션들도 많았다.

하지만 단순히 이런 것들을 활용하기보다, 직접 코드로 만들 수 있는 방법은 없을까 하던 중 python으로 slack bot을 만들 수 있는 slacker 라이브러리를 찾았다.

 

os/slacker

Full-featured Python interface for the Slack API. Contribute to os/slacker development by creating an account on GitHub.

github.com

slacker는 개인 repository로 공식적인 sdk는 아니다. 원래는 공식 sdk가 없어, slacker를 활용해 개발되었으나 slack에서 python용 공식 sdk를 내보이며 slacker는 archived되어 업데이트가 종료되었다. slack에 대한 python 공식 sdk는 여기를 참조바란다.

 

그래서 이번 포스팅에서는 slacker를 이용한 slack bot 만들기를 해볼까한다.

 


Slack bot 만들기

slacker를 사용하기 위해서는 먼저 slack bot을 만들어야한다.

 

아래 주소로 들어가자.

 

작업이 이루어지는 공간

Slack은 여러분의 팀과 소통할 새로운 방법입니다. 이메일보다 빠르고, 더 조직적이며, 훨씬 안전합니다.

slack.com

'Start Building'을 클릭.

 

 

 

이제 원하는 slack bot 이름과 어느 워크스페이스에 만들지 작성한다.

여기서 App name이 slack bot이 메시지를 보냈을 때 보이는 이름이다.

 

 

 

 

다 만들면, 다음 페이지로 이동하게 된다. 

여기서 'OAuth & Permission'으로 이동 !

 

App (Slack bot)을 workspace에 추가하기 이전에 권한 스코프를 먼저 설정해줘야한다.

아래로 내려가면 Scope 섹션이 존재하는데, 여기서 'Add an OAuth Scope'를 눌러 스코프 설정을 해준다.

여기에는 여러가지 옵션이 존재하는데, 메시지를 읽는가? 메시지를 보내는가? 등 역할에 따라 여러 스코프를 설정할 수 있다. 

Scope와 그 역할을 공식 문서를 참조바란다.

 

나는 단순 메시지를 전송하는 slack bot으로 사용하기에 'chat:write' 스코프로 설정했다.

 

 

 

스코프 설정을 마치고,

그 페이지에서 위로 올라가면 'Install App to Workspace' 버튼이 활성화 된 것이 보인다. 클릭 !

 

 

 

 

스코프에 따른 권한이 명시되면, 'Allow' 버튼을 통해 활성화시키자.

 

그러면 OAuth Access Token을 받을 수 있다.

이를 활용해 이제 해당 Slack bot을 통해 메시지를 보낼 수 있게 된다 !

 

 

이제 슬랙의 해당 bot을 추가한 workspace로 이동하자.

slackbot이 활동하길 바라는 channel로 이동하고, 'Add an app'을 통해 위 과정을 통해 만든 bot을 추가하자.


Slacker 활용하기

 

이제 얻은 OAuth Access Token을 활용해 메시지를 전송해보자.

이는 앞서 Slack bot을 만드는 과정보다 쉬우니, 걱정말아도 된다 !

 

먼저 slacker 라이브러리를 설치하자.

pip install slacker
# OR
pip3 install slacker

 

다음, 코드를 작성해보자.

Slacker 생성자로 Token을 넣어 slack 객체를 만들고, chat.post_message를 통해 메시지를 전송할 수 있다.

from slacker import Slacker
slack = Slacker('token')

slack.chat.post_message("#your_channel", "your_message")

 

다음은 message에 '안녕'을 넣어 실행시켜본 결과이다.

 

파일 업로드 및 여러 다른 메시지도 지원한다. 아래 예제를 참조하자.

from slacker import Slacker

slack = Slacker('<your-slack-api-token-goes-here>')

# Send a message to #general channel
slack.chat.post_message('#general', 'Hello fellow slackers!')

# Get users list
response = slack.users.list()
users = response.body['members']

# Upload a file
slack.files.upload('hello.txt')

# If you need to proxy the requests
proxy_endpoint = 'http://myproxy:3128'
slack = Slacker('<your-slack-api-token-goes-here>',
                http_proxy=proxy_endpoint,
                https_proxy=proxy_endpoint)

# Advanced: Use `request.Session` for connection pooling (reuse)
from requests.sessions import Session
with Session() as session:
    slack = Slacker(token, session=session)
    slack.chat.post_message('#general', 'All these requests')
    slack.chat.post_message('#general', 'go through')
    slack.chat.post_message('#general', 'a single https connection')

EOF

 

이렇게 간단하게 Slack message를 보내는 slack bot을 만들어보았다.

사실 메시지를 보내기만 하는 slack bot을 만들었는데,

어떠한 메시지를 인식하고 반응하는 slack bot, 대화형 slack bot 등 만들 수 있는 것은 다양하다.

 

나는 slacker를 이용해 '뉴스를 아침마다 보내주는 slack bot'과 '23시 59분이 되면 DAU (Daily Active Users)를 알려주는 slack bot'을 만들었다.

- requests, BeautifulSoup, sqlalchemy 등을 활용하였고, AWS ec2에서 crontab을 통해 주기적으로 실행되고 있다.

- 이 둘은 현재 개발 및 배포 되고 있는 프로젝트의 workspace에 추가되어 팀원들과 같이 활용하고 있다.

 

더 많은 흥미로운 slack bot들이 만들어지길 기대하며, 화이팅 !

 

 

320x100
반응형
댓글
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함