SW개발/python

[python] slack bot 메시지 보내는 법

코대장 2021. 10. 6. 06:00
반응형

slack은 클라우드 기반 팀 커뮤니케이션과 협업을 위한 툴입니다. 오늘은 slack bot 을 하나 만들고 python을 활용해 간단한 메시지 보내는 법에 대해서 알아보려고 합니다.

 

1. slack 가입 및 워크스페이스 만들기

우선 회원가입부터 해야겠죠? 구글 계정이 있다면 연동해서 사용할 수 있습니다. 저도 새로운 워크스페이스를 생성해 볼게요. 회사 또는 팀 이름을 입력 -> 진행하는 프로젝트 -> 소통을 위한 대상자 추가하는 과정을 거치게 됩니다.

워크스페이스 생성

저는 MySpace 라는 이름으로 워크스페이스를 생성했습니다. 자, 이제 워크스페이스 생성은 마쳤고, 메시지 전송을 위한 단계로 넘어가 보죠.

워크스페이스 생성화면

2. slack api 

이번에는 slack api 사이트로 이동합니다. 아래 보이는 화면에서 "Create an app"으로 이동할게요.

slack api 메인 화면

녹색 버튼 "Create an app" 클릭!

Create an app

"From scratch" 클릭!

Create an app-2

이제 App Name 과 아까 생성해둔 워크스페이스로 선택하고 앱 생성을 마무리 하시죠. "Create App" 클릭!

Name app & choose workspace

3. 메시지 전송을 위한 설정

1. Incoming Webhooks 활성화

Basic Information 화면

Off(디폴트) -> On 으로 변경해줍니다. 변경 후 화면 맨 아래 보이는 "Add New Webhook to Workspace" 클릭!

지금 만들고 있는 App은 처음에 생성해둔 autobot 채널로 게시하기 위한 연결 작업을 해줍니다. "허용" 클릭!

채널 연결

2. OAuth & Permission

아래 생성된 토큰(Token) 값을 확인 할 수 있습니다.

화면을 조금 스크롤 해서 내려보면, Scopes 라고 있는데요. 메시지를 보내기 위해서는 "Add an OAuth Scope"를 눌러 "chat:write"를 추가해줍니다.

permission scope 변경 후 reinstall app 을 해줍니다. 화면 상단으로 스크롤 이동해 "Reinstall to Workspace" 클릭!

Scope 설정 변경 완료

"허용" 클릭하면 이제 워크스페이스와 app 에 대한 설정이 모두 완료 되었습니다.

Scope 변경 후 reinstall workspace

 

3. app 설정

이제 간단한 app 설정만 해주면 끝납니다. 워크스페이스 화면으로 이동해보죠. 빨간색 땡땡이 네모 박스를 클릭하면 

워크스페이스 앱으로 이동

"이 앱을 채널에 추가" 버튼 클릭 후 채널 선택해줍니다.

app 설정 화면

"허용" 클릭!

채널에 app 추가

4. 채널 app 추가 확인

위 과정을 거친 후 채널로 이동하면 아래와 같이 App 이 정상적으로 추가 되었다는 메시지가 찍혀 있을거에요.

 

4. 메시지 전송 코드

이제 Python을 활용해서 slack 워크스페이스 채널로 메시지를 날려봐요.

import requests
import json


def post_message(channel, text):
    # 본인이 발급받은 토큰값으로 대체
    SLACK_BOT_TOKEN = "xoxb-????????????-?????????????-????????????????????????"
    headers = {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer ' + SLACK_BOT_TOKEN
    }
    payload = {
        'channel': channel,
        'text': text
    }
    r = requests.post('https://slack.com/api/chat.postMessage',
                      headers=headers,
                      data=json.dumps(payload)
                      )


if __name__ == '__main__':
    #첫번째 param : 채널명 / 두번째 param : 메시지
    post_message("#autobot", "Hello World!")

 

5. 메시지 전송 결과

Hello World! 가 성공적으로 전송이 되었네요!