AI/Slack Bot

Slack Bolt의 AsyncSocketModeHandler

지노윈 2025. 8. 18. 11:15
반응형

AsyncSocketModeHandler는 Slack Socket Mode를 asyncio 기반으로 돌려주는 핸들러입니다. 

Slack 서버와 WebSocket으로 연결하여 이벤트를 비동기 핸들러로 처리 가능 하도록합니다.

Slack Bolt란?

  • Slack이 제공하는 공식 Python SDK.
  • 봇/앱을 만들 때 이벤트, 액션, 명령어 등을 간단히 처리할 수 있도록 도와줍니다.
  • 크게 두 가지 연결 방식이 있음:
    1. HTTP 방식 (이벤트를 Slack 서버에서 HTTP 요청으로 전달 → Flask/FastAPI 등 웹서버 필요)
    2. Socket Mode 방식 (웹소켓을 통해 Slack 서버와 직접 연결 → 방화벽/공인 도메인 불필요)

예를 들어,

from slack_bolt.adapter.socket_mode.async_handler import AsyncSocketModeHandler

from slack_bolt.adapter.socket_mode.async_handler import AsyncSocketModeHandler

여기서 AsyncSocketModeHandler는 ② Socket Mode + 비동기(asyncio) 환경에서 사용하는 핸들러입니다.

 

 

Socket Mode

  • Slack과 앱이 WebSocket으로 직접 연결됩니다.
  • 앱 서버가 퍼블릭 인터넷에서 접근 가능하지 않아도 Slack 이벤트를 받을 수 있음.
  • Slack은 앱에 이벤트를 WebSocket을 통해 푸시 → 앱이 이벤트를 받고 처리.

AsyncSocketModeHandler 클래스

 
from slack_bolt.adapter.socket_mode.async_handler import AsyncSocketModeHandler
  • AsyncSocketModeHandler는 SocketModeHandler의 비동기 버전입니다.
  • asyncio 기반 코드와 함께 사용할 수 있음.
  • 이벤트 루프 내에서 Slack 이벤트를 처리할 수 있음 → 다른 비동기 작업(FastAPI, aiohttp, DB IO 등)과 자연스럽게 통합 가능.

기본 사용법

import asyncio
from slack_bolt.async_app import AsyncApp
from slack_bolt.adapter.socket_mode.async_handler import AsyncSocketModeHandler

# Slack 앱 초기화 (Bot Token 사용)
app = AsyncApp(token="xoxb-your-bot-token")

# 간단한 이벤트 핸들러
@app.message("hello")
async def handle_hello(message, say):
    await say("Hi there! :wave:")

# 메인 실행부
async def main():
    handler = AsyncSocketModeHandler(app, "xapp-your-socket-mode-app-token")
    await handler.start_async()

if __name__ == "__main__":
    asyncio.run(main())

언제 쓰는가?

  • 서버가 공인 URL 없이도 Slack 이벤트를 받고 싶을 때 (예: 로컬 PC 개발 환경, 사내망 환경)
  • FastAPI, aiohttp 같은 async 프레임워크와 통합하고 싶을 때
  • 고성능/비동기 처리가 필요한 Slack 봇을 개발할 때

 

반응형