본문 바로가기
it/sns-notify

slack bot 생성,설정, python 연동

by 타이밍1 2023. 3. 6.

1. ref

  1. slack api app: https://api.slack.com/apps
  2. Web API methods: https://api.slack.com/methods
  3. chat.postMessage 문서: https://api.slack.com/methods/chat.postMessage
  4. slack message block template 생성 사이트: https://app.slack.com/block-kit-builder

2. slack bot 설정

https://api.slack.com/apps
Create New App -> From scratch
App Name: test-bot
// bot이 배포될 workspace명 확인 필요.
Pick a workspace to develop your app in: "workspace 명" 선택
Create App

  1. app 설정
    app 설정화면에서.
    1. Add features and functionality: Bots 선택
      Bots app이 생성되고.
      Feature -> App Home 화면으로 자동 이동함.
    2. bot이 사용할 수 있는 권한을 Scopes에서 부여한다.
      Review Scopes to Add 선택
      OAuth & Permissions 화면 표시됨.
    3. bot이 사용할 수 있는 권한을 Scopes에서 부여한다.
      // OAuth로 로그인 한 경우 사용할 권한.
      Add an OAuth Scope 선택 후 필요한 권한 추가
      chat:write // Send messages as test-bot
    4. OAuth Tokens for Your Workspace
      Install to Workspace 선택
      bot이 동작할 workspace에서 test-bot이 접근하기 위한 권한을 허가할 지 확인하다. -> 허용.
      다시 test-bot app 화면으로 돌아오고
      Bot User OAuth Token: xoxb-XXXXXXX 이 표시된다.
      이 token은 bot 사용자가 bot을 사용할 때 활용된다.
  2. slack에 로그인 하면 생성한 bot(test-bot)이 보인다.
    bot을 선택 후 testbot v를 선택해서 test-bot이 활동할 채널을 추가해 준다.
    해당 채널에 bot 추가 메시지가 표시된다.
    test-bot 앱
    XXX님에 의해 test-channel에 추가되었습니다.

1. python에서 bot을 이용 slack 채널로 단순 메시지 보내기

  1. slack Bot OAuth Token 확인
    https://api.slack.com/ -> Your apps -> bot 선택(test-bot) -> OAuth & Permissions(Features) -> Bot User OAuth Token 확인. xoxb-XXXXXX
  2. channel ID 확인
    slack에서 test-bot이 추가된 channel을 열고 맨 위에 '채널명 v'를 누르면 창이 뜨는데 맨 하단에서 채널 ID 확인. CXXXXXXXXX
  3. python 환경에 slack_sdk 설치
  4. slack sdk를 활용하여 bot을 이용한 channel 메시지 남기기.
pip install slack_sdk
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError

slack_token = "xoxb-XXXXXXXXXXXXXXXXXX" # Bot OAuth Token
client = WebClient(token=slack_token)

try:
    response = client.chat_postMessage(
        channel="CXXXXXXX", 
        text="hello slack world"
    )
except SlackApiError as e:
    assert e.response["error"]

 

1. slack 메시지 가공

from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError

slack_token = "xoxb-XXXXXXXXXXXXXXXXXX" # Bot OAuth Token
client = WebClient(token=slack_token)
block = [
  {
    "type": "section",
    "text": {
        "type": "mrkdwn",
        "text": '내용1',
    }
  },
  {
    "type": "section",
    "text": {
        "type": "mrkdwn",
        "text": "내용2",
    }
  },
]

try:
    response = client.chat_postMessage(
        channel="CXXXXXXX", 
        blocks=block,
    )
except SlackApiError as e:
    assert e.response["error"]

이외에도 https://app.slack.com/block-kit-builder 에서 다양한 template을 생성할 수 있다.