#슬랙 메시지 게시, 변경, 삭제
우선 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 관련 문서