brunch

You can make anything
by writing

C.S.Lewis

by 유윤식 Nov 10. 2021

Python & Slack message update

#슬랙 메시지 게시, 변경, 삭제

우선 flask, fastapi 통해서 웹서버를 하나 띄우고,


slack-sdk         3.11.2

해당 라이브러리를 설치!


슬랙 API 홈페이지에서 토큰 & 권한(Scope 라고 명명) 설정 진행!


기본적으로 사용하는 Workspace 를 사용했기 때문에

새롭게 생성하는 작업은 스킵!


간단하게 message 를 하나 보내보면,


...

from slack_sdk import WebClient


app = FastAPI()
client = WebClient(token="xoxp-your-own-token") # 사용자 토큰 사용


@app.post("/slack/message/")
async def slack_msg(msg: str = None):
    res = client.chat_postMessage(channel="YOUR_OWN_CHANNEL_ID", user="YOUR_OWN_USER_ID", text="from fastapi", blocks="YOUR_OWN_BLOCKS", as_user=True)
    print(res)
    return "OK"


토큰은 어디서 확인하나?

이건! 알 수 있다.

Slack API --> OAuth & Permissions 에서 보면 User OAuth Token 이라고 크게 적혀있다.


채널ID는? 사용자 ID는?

이건... 권한 범위에서 벗어나서 알 수 없다.


내가 찾아낸 방법은

Incoming Webhook 에서 "Sample curl request to post to a channel " 이라고 예시를 주는데,

이걸 통해서 채널ID, 지금 당신의 ID를 알 수 있다.


그럼 메시지를 보냈으니까 확인을 해보면,


시간상으로 11:01 분에 메시지를 보내서 슬랙에서 확인을 했다.


이제 Approve 버튼을 눌러서! 해당 메시지를 updated 상태로 바꿔볼껀데,


@app.post("/from_slack/")
async def post_slack(request: Request):
    # slack 에서 응답을 받아서 뭔가 처리를 하고,
    res: Form(...) = await request.form()
    j = json.loads(res['payload'])
    pp(f"action response value is {j['actions'][0]['value']}")
    pp(f"and it is come from {j['container']['channel_id']} at {j['container']['message_ts']}")
    # 그 다음에 해당 메시지를 수정해 주면 되는데,
    res = client.chat_update(channel=j['container']['channel_id'],
                             ts=j['container']['message_ts'],
                             text="updated from fastapi",
                             blocks=blocks2)
    print(res)
    return "OK"


response_url 을 미리 설정해 두었기 때문에, 해당 route로 응답을 받아서 변경된 데이터를 전달 할 수 있다.

이건 Slack 에서 설정하는건데, google 신이 잘 알려준다.


Slack 메시지를 수정하려면 먼저,

해당 채널, 보낸시간, 수정할 내용 등이 필요한데 필수적인 것만 간단하게 테스트로 해보면

짜잔.

승낙을 눌렀으니까 아래 버튼은 없애고, Type 을 updated 로 수정했다.


간단한 테스트였다.


가장 중요한게 이걸 왜 필요한지를 먼저 설명했어야 했는데,


사내에서 중요한 정보를 Slack을 통해서 알렸을 때,

이 정보가 정확이 어떤 카테고리의 정보인지 머신러닝, 딥러닝이 먼저 확인을 하고

알맞은 카테고리 후보군을 알려주면

담당자는 AI가 전달한 값이 맞는지, 아니면 어떤게 정답인지 확인 후

최정 결과(정답)를 서버-사이드로 전달하려는

목적이다.


** Python - Slack API 관련 문서

https://api.slack.com/methods


작가의 이전글 Python을 JS 파일에서?
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari