CI CD와 테스트 통합

[슬랙] REST API를 통한 슬랙 앱 개발기

lily.ah 2024. 8. 17. 23:22

슬랙봇

1. 슬랙 앱 생성하기

  1. 슬랙 앱 생성:
    • 슬랙 개발자 페이지로 이동하여 새 앱을 만듭니다.
    • "Create New App"을 클릭하고, 앱 이름과 연결할 워크스페이스를 설정합니다.
  2. 봇 사용자 추가:
    • 앱이 생성된 후, "OAuth & Permissions" 섹션에서 봇 토큰을 발급받기 위해 "OAuth Tokens for Your Workspace"에서 권한을 설정합니다.
    • "Bot User"를 추가하여 슬랙에서 봇으로 사용할 수 있도록 설정합니다.
  3. 권한 설정 (Scopes):
    • "OAuth & Permissions" 섹션에서 봇의 권한을 설정합니다.
    • 예를 들어, 봇이 메시지를 보내거나 읽을 수 있도록 chat:write와 channels:history 같은 스코프를 추가합니다.
    • 스코프 설정이 끝나면 "Install App"을 눌러 앱을 워크스페이스에 설치하고, OAuth 토큰을 받습니다.

2. REST API를 통한 슬랙과의 통신

슬랙 REST API를 사용하면 봇이 메시지를 보내거나 채널 정보를 가져올 수 있습니다. 슬랙은 HTTP를 통한 RESTful API를 제공합니다.

  1. API 호출 준비:
    • 앱을 설치한 후 받은 OAuth 토큰을 사용하여 API에 인증합니다.
    • API 요청 시, 이 토큰을 Authorization 헤더에 추가하여 슬랙 API에 접근할 수 있습니다.
    예시로, 봇이 특정 채널에 메시지를 보내기 위한 API 호출을 살펴보겠습니다.
  2. 메시지 보내기 (Chat.postMessage):
    • 슬랙에서 채널에 메시지를 보내는 기본 API는 chat.postMessage입니다.
    • POST 요청을 보내는 방법은 다음과 같습니다.
POST https://slack.com/api/chat.postMessage Content-type: application/json Authorization: Bearer xoxb-Your-Bot-Token


요청 본문 예시
:Python 예시:이 코드는 슬랙 API에 POST 요청을 보내 특정 채널에 메시지를 전송합니다.

import requests url = 'https://slack.com/api/chat.postMessage' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer xoxb-Your-Bot-Token' } data = { 'channel': '#general', 'text': 'Hello, world!' } response = requests.post(url, headers=headers, json=data) print(response.json())
{ "channel": "#general", // 메시지를 보낼 채널 ID 또는 이름 "text": "Hello, world!" // 보낼 메시지 텍스트 }

 

3. 이벤트 기반 상호작용

슬랙봇은 REST API 외에도 이벤트 기반으로 작동할 수 있습니다. 이를 위해 슬랙은 이벤트 서브스크립션(Event Subscription)을 제공합니다.

  1. 슬랙 이벤트 구독 설정:
    • "Event Subscriptions" 섹션으로 이동하여 슬랙에서 발생하는 이벤트를 봇이 구독할 수 있도록 설정합니다.
    • 요청 URL을 입력하면 슬랙은 해당 URL에 이벤트가 발생할 때마다 데이터를 POST로 전송합니다.
    • 이때, 봇은 서버에서 HTTP 엔드포인트를 통해 이벤트를 처리할 수 있습니다.
  2. 서버 설정:
    • 서버를 설정하여 슬랙에서 오는 이벤트를 처리하는 엔드포인트를 만듭니다.
    • 예를 들어, Python Flask를 사용해 슬랙에서 발생하는 메시지 이벤트를 받아 처리할 수 있습니다.
    python
from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/slack/events', methods=['POST']) def slack_events(): data = request.json # 메시지 이벤트 처리 if 'event' in data: event = data['event'] if event['type'] == 'message' and not event.get('subtype'): channel = event['channel'] text = event['text'] # 여기서 메시지를 처리할 수 있습니다. return jsonify(status="ok") if __name__ == '__main__': app.run(port=3000)

4. 배포 및 운영

  1. 서버 배포:
    • 서버가 슬랙 이벤트를 처리하려면 인터넷에 노출되어야 하므로, Heroku, AWS, Vercel과 같은 클라우드 플랫폼을 사용해 서버를 배포합니다.
    • 배포된 서버의 URL을 슬랙 이벤트 구독에 등록합니다.
  2. 테스트 및 운영:
    • 슬랙봇이 제대로 작동하는지 테스트하고, 채널 내에서 메시지 전송 및 이벤트 수신이 원활히 이루어지는지 확인합니다.