본문 바로가기
공부/Python

[Python] Python to Slack 2 : Slack Bot Message 보내기 + 쉽게 Formatting하기 (Block Kit Builder)

by haejang 2022. 1. 22.
728x90
728x90

 

 

이전 글 : [Python] Python to Slack 1 : Slack Bot 만들고 설정하기

 

 

📌  Slack Python SDK 설치부터!

pip install slack_sdk

* python3 이상이 있어야 하며, 버전이 여러개 있는 경우 pip 대신 pip3를 사용하자

 

📌  MAC SSLCertVerificationError:

slack_sdk를 사용할 때 자꾸 아래 글에서와 동일한 에러가 났었다 (SSLCertVerificationError)

https://blog.minamiland.com/551

 

Python3 - SSL 문제는 Certificates.command 파일로 해결하세요

#2052 Mac에서 책을 따라 하면서 공부 중인데 SSL 문제에 봉착했었습니다. 스크레이핑을 하는 도중에 생겼던 문제입니다. 알게 된 것은 이 문제가 HTTPS가 적용된 웹 페이지에 대해 스크레이핑을 시

blog.minamiland.com

 

첨엔 이게뭐야 했는데 결론적으로 매우 쉬운 해결 방법이 있었다

Python 설치 폴더 > Install Certificates.command 더블클릭

 

 

 

Basic Usage


https://slack.dev/python-slackclient/basic_usage.html

 

Basic Usage — slackclient (Legacy Python Slack SDK)

The Slack Web API allows you to build applications that interact with Slack in more complex ways than the integrations we provide out of the box. Access Slack’s API methods requires an OAuth token – see the Tokens & Authentication section for more on h

slack.dev

 

이걸 나중에 찾게 되었지만,,,,어쨌든 슬랙 기본 API Document가 잘 되어있는듯하다
(API를 다룰 줄 알고 공식 도큐를 잘 읽을 수 있는 사람이면 내 글보단 api.slack.com 을 찬찬히 둘러보는게 나을거다)

 

정말 제일 간단하게, 아래와 같은 코드를 작성해볼 수 있다 (기본 제공 예시)

import logging
logging.basicConfig(level=logging.DEBUG)

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", # Channel ID
        text="Hello from your app! :tada:"
    )
except SlackApiError as e:
    assert e.response["error"]

 

Channel ID는 Slack에서 채널 상단의 이름 클릭 시 아래서 확인할 수 있다

ID 대신 Chnnel 이름으로 써도 상관은 없는데, 아무래도 채널 이름은 바뀔수도 있으니 ID를 쓰는게 여러모로 좋아보인다

 

 

이전 글에서 받은 Bot Token과 Channel ID를 입력해준 후 파이썬을 실행시키면

 

 

우리 봇의 귀여운 첫 메세지가 도착하게 된다

 

참고로 메세지 적을 때 원하는 (기본) 이모티콘의 이름을 ::까지 그대로 넣어주면 같이 보내지게 된다

 

 

기본 준비는 끝났다. 이제 Formatting을 해보자

 

Fomatting...쉽게?


처음엔 아래 링크의 chat.postMessage 를 보며 Sample Code도 보고 Test도 해봤다

https://api.slack.com/methods/chat.postMessage

 

chat.postMessage API method

Sends a message to a channel.

api.slack.com

그러나 API를 잘 모르는 나로써는....너무 이해하기가 어려웠다

(시키는대로 해본다고 해봤는데도 뭔가 생각하는대로 잘 안나옴)

 

도대체 어떤 인수에 어떤 값을 넣어야 하는건지...block은 뭐고 attachment는 뭔지...

 

AWS 도큐만 읽던 나에게 너무 큰 시련이라고 생각하려던 순간 아래와 같이 Block Kit Builder를 찾아버렸다;;

 

 

1. Templates를 누르면 다양한 메세지 포맷이 보인다

 

 

내가 원하는 포맷과 유사한 템플릿을 적용시켜 코드로 볼 수 있다. 난 우선 제일 위의 포맷을 골라봤다.

 

 

섹션별 순서 이동이나 삭제를 GUI로 설정하면 그에 맞게 옆 Code도 자동으로 변한다

반대로 코드를 바꿔도 Preview를 바로바로 확인할 수 있다

 

2. Templates 옆 버튼들을 통해 보기를 여러가지로 바꿀 수 있다

 

 

Attachments로도 쉽게 변경 & 확인이 가능하며, 데스크탑/모바일 또는 Light/Dark테마 변경으로 내 슬랙 환경 맞춤으로 프리뷰를 확인할 수 있다

 

3. 사이드바의 다양한 section들을 쉽게 추가해볼 수 있다

 

text field, image, button 등등...클릭만 하면 자동으로 코드와 프리뷰에 추가되므로 훨씬 쉽게 커스터마이징을 할 수 있다

아랜 위 내용들을 모두 포함해 이것저것 해보는 영상이다

 

 

이후 적용된 프리뷰와 코드를 비교해가면서 각 인수의 의미와 사용성을 익히면 훨씬 쉽다

와! Slack Message Formatting 짱쉽다!

 

Formatting을 원하는대로 마쳤다면, 이제 실제 코드에 적용시켜야 한다

사실 우측에 나타나던 코드는 실제 Python 코드는 아니고 Json 형식의 Payload이다 ㅎㅎ;;

해당 json code는 아래와 같은 형식이다

{
    "blocks": [
        {
            ...
        },
        {
            ...
        }
    ]
}

이를 block=[] 형태로 바꾸고, true > True / false > False 로만 바꿔준 후 기존 chat_postMessage 함수에 text 대신 넣어주면 된다

 

즉, 실제 python code는 아래와 같이 작성한다

response = client.chat_postMessage(
    channel="CXXXXXXXXX",
    blocks=[
        {
            ...
        },
        {
            ...
        }
    ]
)

 

이후 python을 실행해주면?

 

 

Block Kit Builder에서 본 모습 그대로 메세지를 보내준다

 

이만 끝

 

 

 

728x90
728x90

댓글