15  슬랙 봇 (Slack Bot)

비즈니스 협업 도구인 슬랙(Slack)을 위한 나만의 봇을 만들어 봅시다. 단순히 메시지를 주고받는 것 이상으로, 업무를 자동화하고 정보를 실시간으로 공유하는 유용한 비서를 만드는 것이 목표입니다.

이 프로젝트는 슬랙 API와 웹훅(Webhook), 그리고 이벤트 기반 프로그래밍(Event-driven Programming)을 이해하는 데 아주 좋습니다. 특히 최근 팀 협업과 업무 효율성을 높여주는 슬랙 봇을 직접 설계해 보세요.

15.1 주요 개발 포인트

  • 슬랙 API 연동: Slack SDK나 Bolt 프레임워크를 사용하여 봇과 채널을 연결합니다.
  • 자동 메시지 게시 (Post Message): 특정 이벤트가 발생할 때 채널로 메시지나 파일을 보냅니다.
  • 슬래시 명령어 (Slash Commands): ‘/상태’, ‘/할일’, ‘/보고’ 등의 명령어를 인식하여 특정 작업을 실행합니다.
  • 이벤트 구독 (Events API): 사용자가 메시지를 남기거나 이모지를 다는 이벤트를 실시간으로 수신합니다.
  • 사용자 인터페이스 (GUI): 봇의 설정 창, 메시지 템플릿, 그리고 봇의 활동 로그를 보여주는 대시보드를 구축합니다.

15.2 Python 구현 예시 (Slack SDK 활용 메시지 전송 시뮬레이션)

# 실제 실행 시 slack_sdk 라이브러리 설치와 API 토큰이 필요합니다.
# from slack_sdk import WebClient

class SlackBot:
    """
    슬랙 채널로 메시지를 보내고 이벤트를 처리합니다.
    """
    def __init__(self, token, channel_name="#general"):
        self.token = token
        self.channel_name = channel_name
        # self.client = WebClient(token=token)
        print(f"'{channel_name}' 채널용 슬랙 봇 시작.")

    def post_message(self, text):
        """
        메시지를 지정된 채널로 보냅니다.
        """
        print(f"'{self.channel_name}' 채널로 메시지 전송 중: {text}")
        
        # 실제 구현 시 API 호출
        # self.client.chat_postMessage(channel=self.channel_name, text=text)
        
        print("전송이 완료되었습니다.")
        return True

    def handle_command(self, command):
        """
        슬래시 명령어를 처리합니다.
        """
        print(f"받은 명령어: {command}")
        
        if "/서버상태" in command:
            return self.post_message("현재 서버는 정상적으로 작동 중입니다. (업타임: 124시간)")
        elif "/할일" in command:
            return self.post_message("오늘의 할 일: [1] 코드 리뷰 [2] 문서 작성 [3] 회의 참석")
        return False

if __name__ == "__main__":
    # 테스트용 API 토큰 (가상의 예시)
    my_token = "xoxb-123456789-abcdefghijk"
    my_bot = SlackBot(my_token, "#dev-team")
    
    # 메시지 및 명령어 처리 시뮬레이션
    my_bot.post_message("안녕하세요! 저는 새로운 팀원 슬랙 봇입니다.")
    my_bot.handle_command("/서버상태")
    
    # 팁: 인입된 멘션을 확인하여 특정 행동을 하게 하려면 Slack Events API를 사용해 보세요.
    print("\n[팁] FastAPI나 Flask를 함께 사용하면 슬랙으로부터 오는 웹훅을 쉽게 받을 수 있습니다.")