대외활동/SK Shieldus rookies

[인프라 활용을 위한 파이썬] #5 슬랙 API 활용 및 자동화

승요나라 2024. 3. 22. 00:01

Slack API를 활용하면 Slack 워크스페이스와 연동하여 다양한 기능을 수행할 수 있다.

이 글에서는 Slack API 중 Incoming Webhooks을 사용하여 Python으로 Slack 채널에 메시지를 보내는 방법을 간단하게 소개하겠다.

 

 

 

1. Slack에서 Incoming Webhook URL 생성하기

먼저, Slack에서 Incoming Webhook URL을 생성해야 한다.

  1. Slack 워크스페이스에 로그인: Slack에 로그인한 후 Slack API 페이지로 이동한다.
  2. 앱 생성: "Create New App" 버튼을 클릭하여 새로운 앱을 만든다.
  3. Incoming Webhooks 활성화: 앱을 만든 후 "Incoming Webhooks" 기능을 활성화한다.
  4. Webhook URL 생성: "Add New Webhook to Workspace" 버튼을 클릭하고 메시지를 보낼 채널을 선택한다. 그러면 Slack이 생성해주는 Webhook URL을 얻을 수 있다.

 

이 Webhook URL은 https://hooks.slack.com/services/XXXX/YYYY/ZZZZ 형태로 제공되며, 이 URL을 통해 Python 코드로 Slack 채널에 메시지를 보낼 수 있다.

 

 

2. Python 코드로 Slack에 메시지 보내기

import requests
import json

# api.slack.com 에서 Incoming Webhooks 에서 생성한 Webhook URL (자기꺼)
slack_url = "https://hooks.slack.com/services/~~~/!!!/@@@"

headers = {"Content-type":"application/json"}
data = {"text":"파이썬 테스트입니다."}

response = requests.post(slack_url, headers=headers, data=json.dumps(data))

# 상태코드가 200이면 성공
if response.status_code == 200 :
    print("잘 보냈습니다.")
else:
    print("오류 발생")

slack01.py

슬랙 워크스페이스에 자동으로 메시지 전달하는 코드이다.

 

슬랙 webhook을 함수로 정의하게 되면 다음과 같다.

import requests
import json

slack_url = "https://hooks.slack.com/services/~~~/!!!/@@@"

def sendSlackWebhook(strText):
    headers = {"Content-type":"application/json"}
    data = {"text":strText}

    response = requests.post(slack_url, headers=headers, data=json.dumps(data))
    if response.status_code == 200:
        return "잘 보냈습니다."
    else:
        return "오류 발생"

print(sendSlackWebhook("테스트입니다.!!"))

slack02.py

 

from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError

# Slack channel to send the message to
SLACK_API_TOKEN = "https://hooks.slack.com/services/~~~/!!!/@@@"

def sendSlackWebhook(file_path):
    client = WebClient(token=SLACK_API_TOKEN)
    try:
        response = client.files_upload(
            channels="#python_test01",
            file=file_path,
            title=f"테스트입니다."
        )
        print(f"정상적으로 보냄")
    except SlackApiError as e:
        print(f"오류 발생 {e}")

output_path = "result.xlsx"
sendSlackWebhook(output_path)

slack03.py

Slack API를 사용하여 #python_test01이라는 Slack 채널에 result.xlsx 파일을 업로드하는 코드이다.

slack_sdk 라이브러리를 사용하여 Slack과 통신하며, SlackApiError 라이브러리는 Slack API 요청 중 발생하는 예외를 처리하기 위해 사용된다.

 

  • client = WebClient(token=SLACK_API_TOKEN) : Slack API 클라이언트를 초기화한다.
  • client.files_upload() : 지정된 Slack 채널(channels)에 파일을 업로드한다. 여기서 file은 업로드할 파일 경로, title은 파일의 제목이다.