Etcs

slack_sdk를 활용해 에러로그를 보내는 슬랙봇 만들기

makeitworth 2022. 3. 28. 21:54

nlp 과제를 하다보니 cv 과제를 할 때 보다 특정 사이트에서 데이터를 가져오는 작업을 하는 일이 많아졌다.

그런데 수천개 페이지 이상의 자료를 크롤링하다보니 처음에 예상하지 못했던 에러가 발생하는 일이 잦았다.

밤새 수천 개쯤 걸어둔 작업이 완료되었을거라 기대하고 아침에 확인했을 때, 열 개쯤 돌아가다 멈춘 걸 보고 좌절 ㅠㅠ.

을 반복해서 겪다보니 에러 발생시 폰으로 알림을 받고 싶어졌다.

슬랙봇이 비교적 쉽게 이런 일을 해준다고 해서 검색.

 

준비물 : 슬랙 아이디와 슬랙 워크스페이스

 

https://api.slack.com/messaging/webhooks

 

1. 슬랙앱 만들기 : 이전에 만든 적이 없다면, 아래 주소에 가서 새로운 슬랙 앱을 만든다. from scratch (처음부터 만들기)를 선택해서 앱 네임 만들고, 알림 오기 원하는 워크 스페이스를 선택해서 앱을 만들어준다.

https://api.slack.com/apps?new_app=1 

 

2. 내가 만든 슬랙앱으로 들어가서 인증 토큰 복사 & 권한 영역(OAuth Scope) 선택

 

권한선택에서 incoming-webhook과 chat:write 설정 (알림만 받으면 되므로) 

 

3. 워크스페이스에서 채널 ID (채널에 메시징할 거라면) 또는 유저 ID 확인하기 (나만 DM으로 알림 받을 거라면)

 

채널 ID 는 원하는 채널 이름에서 우클릭> 채널 세부정보 열기 선택하면 보이고,

유저 ID는 유저 프로필에서 더보기클릭> 멤버ID 복사 를 하면 된다.

 

4. slack_sdk를 활용해 메세지를 보내는 함수를 만든다.

from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError


def send_message_to_channel(slack_token, channel, message):
	'''
    parameters:
    
   	slack_token = ''
	channel = '' #채널ID, 유저ID모두 channerl 파라미터
	message = '' #내가 보내고 싶은 에러메시지
	'''

    client = WebClient(token=slack_token)

    try:
        response = client.chat_postMessage(channel=channel, text=message)
        assert response["message"]["text"] == message
    except SlackApiError as e:
        assert e.response["ok"] is False
        assert e.response["error"]
        print(f"Got an error: {e.response['error']}")

5. 에러가 발생하면 알람이 오길 원하는 곳에 만든 함수를 호출한다.

 

참고:

https://cosmosproject.tistory.com/394

https://github.com/taptorestart/python-examples/blob/main/packages/slack_sdk/message.py