본문 바로가기
실무/슬랙 봇 만들기

파이썬 슬랙 봇 만들기(2): hello라고 적으면 반응하는 봇 호출하기

by davi_kr 2023. 4. 16.

목차

    반응형

    [볼트란?]

    슬랙 봇을 만들려고 공식 문서를 찾아다니던 중 볼트라는 게 있어서 이걸 활용해보기로 했습니다.

    Slack Bolt는 Slack에서 개발한 프레임워크로, Slack 앱 개발을 보다 쉽고 빠르게 진행할 수 있게 도와줍니다. Bolt 프레임워크는 Python, JavaScript(Node.js), Java 등 다양한 프로그래밍 언어를 지원합니다. Slack 앱은 사용자와 상호작용하거나, 워크스페이스에서 자동화된 작업을 수행하는 데 사용할 수 있습니다.

    Bolt는 다음과 같은 기능을 제공하여 Slack 앱 개발을 쉽게 만들어줍니다:

    1. 이벤트 리스너: Bolt는 Slack API에서 발생하는 이벤트를 감지하고 처리할 수 있는 이벤트 리스너를 제공합니다. 이를 통해 사용자와의 상호작용, 메시지 수신 및 전송, 버튼 클릭 등 다양한 이벤트를 처리할 수 있습니다.
    2. 블록 키트 지원: Bolt는 Slack에서 제공하는 블록 키트(Block Kit)를 사용하여, 간편하게 사용자 인터페이스(UI)를 구성할 수 있습니다. 이를 통해 대화식 메시지, 모달, 메뉴 등 다양한 UI 요소를 효과적으로 사용할 수 있습니다.
    3. 간편한 인증 및 권한 관리: Bolt는 OAuth 2.0을 사용하여 Slack 앱의 인증 및 권한 관리를 쉽게 처리할 수 있습니다. 이를 통해 사용자의 승인을 받아 워크스페이스에 앱을 설치하거나, 워크스페이스에서 필요한 정보에 액세스할 수 있습니다.
    4. 작업 간소화: Bolt 프레임워크는 개발자가 처리해야 할 라우팅, 에러 처리, 페이로드 검증 등의 작업을 대부분 처리해줍니다. 이로 인해 개발자는 앱의 핵심 기능에 집중할 수 있게 됩니다.

    Slack Bolt를 사용하면, 워크스페이스에서 효율적으로 작업을 수행할 수 있는 다양한 Slack 앱을 개발할 수 있습니다. 이를 통해 팀원들과의 협업을 강화하거나, 작업 흐름을 자동화하여 생산성을 높일 수 있습니다.

     

    [특정 단어로 봇 호출하기]

    아래는 예시입니다. hello라는 단어가 들어오면 Hey there <사용자 이름>을 반환하도록 작성했습니다.

     

    1. 앱 생성, 봇 권한 주기 - 이 부분은 이미 적어둔 글이 있어서 참고 부탁드립니다.

    이 글대로 따라하고 봇 토큰을 받아두셔야 합니다.

    2023.04.14 - [파이썬/파이썬 활용] - 파이썬 슬랙 봇 만들기(1): 봇 메세지 보내기

     

    파이썬 슬랙 봇 만들기(1): 봇 메세지 보내기

    [파이썬으로 슬랙에 봇 메세지 보내기] 슬랙 연동하는 방법을 적어보려 합니다.스프레드시트와 마찬가지로 슬랙도 업무 하면서 사용하는 툴인데 파이썬으로 연결해두면 정말 편리합니다. 개인

    develop-davi-kr.tistory.com

     

    2. 앱 레벨 권한 주기, 소켓모드 설정하기

    Basic Information > App-Level Tokens > Generate Token and Scopes 클릭

    Token Name은 마음대로 적으시면 되고 권한은 connections:write으로 주시면 됩니다.

    Socket Mode 에서 소켓모드 토글을 활성화시켜줍니다. (아래 이미지처럼 나오면 됩니다.)

     

    3. 프로젝트 셋팅(폴더 생성, 가상환경 설정, 환경 변수 설정, 슬랙 볼트 설치)

    # bolt_app이라는 폴더(경로)를 생성합니다.
    mkdir bolt_app
    
    # bolt_app 폴더(경로)로 이동합니다.
    cd bolt_app
    
    # 아나콘다를 사용하여 가상 환경을 생성합니다. 여기서 'myenv'는 원하는 가상 환경 이름입니다.
    conda create --name myenv python=3.8
    
    # 생성한 가상 환경을 활성화합니다.
    conda activate myenv
    
    # 사용하는 python3를 검색해봅니다.
    which python3
    # Output: /path/to/bolt_app/.venv/bin/python3
    
    # 봇 토큰, 앱 토큰을 환경 변수로 설정해줌
    export SLACK_BOT_TOKEN=xoxb-<your-bot-token>
    export SLACK_APP_TOKEN=<your-app-level-token>
    
    # 슬랙 볼트를 설치합니다.
    pip3 install slack_bolt

     

    4. 이벤트 셋팅

    Event Subscriptions > Enable Events 토글을 켜줍니다.

    Subscribe to bot events에서 message.channels 권한을 설정해줍니다.

     

    5. 사용하려는 슬랙 채널에 봇 추가해주기

    만드신 봇을 채널에서 호출하고 채널에 추가하기를 눌러줍니다.

    추가해주는 이유는 현재 권한으로 인해, 봇이 추가된 곳에서만 특정 텍스트에 반응할 수 있기 때문입니다.

    01

    6. 실행해보기

    import os
    from slack_bolt import App
    from slack_bolt.adapter.socket_mode import SocketModeHandler
    
    # Initializes your app with your bot token and socket mode handler
    app = App(token=os.environ.get("SLACK_BOT_TOKEN"))
    
    # Listens to incoming messages that contain "hello"
    # To learn available listener arguments,
    # visit https://slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html
    @app.message("hello")
    def message_hello(message, say):
        # say() sends a message to the channel where the event was triggered
        say(f"Hey there <@{message['user']}>!")
    
    # Start your app
    if __name__ == "__main__":
        SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()

    실행해보게 되면 맨 처음에 보셨던 이미지처럼 작동하는 걸 확인할 수 있습니다.

    해석은 아래와 같습니다.

    App 클래스를 사용하여 SLACK_BOT_TOKEN이라는 환경 변수에서 Slack 봇 토큰을 가져와 app 객체를 생성합니다.

    @app.message("hello")는 hello라는 문자열이 포함된 Slack 메시지를 감지하면 message_hello() 함수를 실행합니다. message와 say라는 두 개의 매개 변수가 있습니다. message는 Slack 메시지에 대한 정보를 포함하는 딕셔너리입니다. say는 메시지를 전송하는 데 사용됩니다. 해당 코드에서는 message['user']의 값을 가져와 say()를 사용하여 Slack 채널에 메시지를 보냅니다.

    if __name__ == "__main__":는 이 파일이 다른 파일에서 임포트되지 않았을 때만 코드를 실행한다는 것을 의미합니다. SocketModeHandler 클래스를 사용하여 SLACK_APP_TOKEN 환경 변수에서 Slack 앱 토큰을 가져와 SocketModeHandler 객체를 생성하고, start() 메소드를 호출하여 Slack Socket Mode를 시작합니다.

    반응형

    댓글