슬랙에 메세지를 보내기 위해서는 슬랙에서 제공하는 api를 이용하는데, 지난번의 기상청 api와 마찬가지로 슬랙 api 를 이용하기 위해서는 인증토큰을 가지고 있어야 한다. 이번에는 인증 토큰을 받는것 부터 python을 이용하여 메세지를 보내는 것까지 해보려고 한다.

기본적인 슬랙 가입 및 채널 생성에 관련한 내용은 패스.

슬랙 api 토큰 받기

https://api.slack.com/

 

Slack은 미래의 업무가 이루어지는 곳입니다

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

slack.com

위 사이트로 들어가 로그인을 하고 Create an app 버튼을 클릭하여 챗봇에 사용될 bot을 만들어준다.

from scrach 를 누르고 다음 화면에서 내가 사용할 bot의 이름과 bot을 사용할 workspace를 선택해준다. 앱을 생성하고 나면 왼쪽 메뉴중 OAuth & Permissions 메뉴를 들어간다.

내리다 보면 Scope 라는 메뉴가 있는데, 이는 메뉴에서 bot 이 가지게 될 권한을 주게 된다.

원래 사용중인 bot의 권한 화면이라 이미 추가되어 있지만, 다른 권한 없이 chat:write 만 주면 메세지를 보내고 챗봇을 만드는데 충분하다.

최상단으로 올라가 install to workspace 를 눌러 진행하면 가장 필요한 bot user token을 얻게 된다. 이 값을 잘 저장해준다.

이제 워크스페이스로 돌아가 방금 만든 봇을 워크스페이스에 추가해준다.

위에서 만들었던 봇을 추가해주면 슬랙에서 설정할 것은 끝난다.

슬랙

슬랙에서 준 토큰은 외부에 노출이 되면 안되기 때문에, git 을 통해 자료가 공유되는 경우를 대비하여 secrets.json 파일로 만들어 관리하기로 한다. secrets.json 파일은 gitignore에 추가하여 공유되지 않도록 주의한다.

#secrets.json

{
    "Token": "xoxb-...."
}
# slack.py

import json
import os

path = os.path.dirname(os.path.abspath(__file__))


def get_token():
    try:
        secret_file = path + "\secrets.json"
        with open(secret_file) as f:
            secrets = json.loads(f.read())
        myToken = secrets["Token"]
        return myToken
    except:
        return False

slack.py 파일을 만들고 secrets.json 파일을 같은 폴더에 두었다. get_token 함수를 통해 json 파일을 읽어 토큰을 가져오게 된다.

slack에 메세지를 보내는 방법은 slack 라이브러리를 이용하거나 slack_sdk 라이브러리를 이용하는 방법 등이 있지만, 따로 라이브러리 없이 requests만 이용해도 메세지를 보내는 것이 충분히 가능하다.

# slack.py

import requests

# 채널명, 내용을 입력받고, 토큰을 파일로부터 획득하여 해당 채널에 내용을 post
def to_slack(text, channel="#일반"):
    myToken = get_token()
    if not myToken:
        return "No secret key! Message Failed."
    response = requests.post(
        "https://slack.com/api/chat.postMessage",
        data={"token": myToken, "channel": channel, "text": text},
    )
    if response.status_code == 200:
        return "Sucessfully Sent!"
    else:
        return "Message Failed while Posting.."

위와 같이 코드를 입력해준다. 아까 작성했던 get_token 함수로 토큰을 받아와주고, 슬랙에 보낼 text와 토큰, 그리고 메세지를 보낼 채널 이름을 data로 하여 post 해주면 메세지 보내기 성공이다.

편의를 위해 메세지가 보내졌는지 그렇지 않은지를 문장으로 return 해주었다.

정리

슬랙에 메세지를 보내는 법을 확인해보았다. 이제 채팅창에 입력되는 메세지를 구독하고, 메세지를 입력받아 적절한 대응을 메세지해주면 기본적인 챗봇 구성이 완료될 것 같다.

내용 관련하여 도움이나 조언 언제든 환영합니다!

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기