슬랙봇으로 이미지 전송하기

156·2023년 12월 26일
0

절차

지난 글에서 만들었던 파이썬 프로젝트에 대해 간단히 요약해 봤다. 이 글에선 복습도 할 겸 슬랙봇 생성, 파이썬으로 명령어를 입력받고 다시 이미지전송하는 것까지 해보겠다.

아래 순서에 따라 진행했다. Request URL을 받아주기 위해 ngrok, flask를 사용했다.

  1. 슬랙봇 생성
  2. 슬랙봇 권한 범위 설정
  3. 슬래쉬 커맨드 설정
  4. ngrok Request URL 공유
  5. 워크스페이스에 슬랙봇 설치
  6. flask 활용 이미지 전송

슬랙봇 생성

https://api.slack.com/
위 링크로 이동

Your apps

새로운 앱 만들기

슬랙api 기능으로 만들기 위해 스크래치로

이름과 테스트할 워크스페이스 설정

슬랙봇 권한 범위 설정을 위해 OAuth & Permissions로 이동

메세지와 파일 전송에 필요한 권한 설정

새로운 명령어 만들기

빨간 동그라미 친 두 부분은 필수다. Request URL은 이 명령어 정보를 전송해서 받아주는 곳인데, 나는 로컬 서버를 공개 서버로 공유해주는 ngrok 프로그램을 사용했다.

ngrok


ngrok을 먼저 설치하자.
설치 후 ngrok 터미널에서 아래 명령어를 입력하면 위 화면이 나온다.

ngrok http 5000

5000은 본인이 여는 로컬 서버의 포트로 수정하면 된다.
빨간 줄 친 Forwarding이 Request URL이 된다.

워크스페이스에 앱 설치

메세지를 받을 채널에 슬랙봇 추가 (@'name' 으로 언급해주면 추가할 수 있다)

이 상태에서 명령어를 치려고 하면 자동완성 탭이 나올 것이다. 그러면 잘 따라온 것이다.
지금은 명령어를 입력하면 위 사진처럼 502 Bad Gateway가 나오게 되는데, 로컬 서버를 열어두지 않아서 오류가 발생한 것이지 데이터를 보내는 것 과정까진 완료한 셈.

파이썬 코드

이제 아래의 코드를 참고, 각자의 로컬 서버를 열어서 본인만의 슬랙봇을 만들면 되겠다.
나는 flask를 통해 로컬 서버를 만들었다.

from flask import Flask, request
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
import threading

app = Flask(__name__) # 메인 스레드

# 슬랙 슬래시 커맨드 수신
@app.route('/', methods=['POST'])
def slack_command():
    # 슬랙으로부터 전달된 데이터 처리
    data = request.form
    text = data.get('text')             # /wc [text]
    channel_id = data.get('channel_id')
    img_path = '/~~/~~.png'
    
	# 슬랙 봇 토큰 설정
	slack_token = 'xoxb-00000000000000000000000000000000000000'
	client = WebClient(token=slack_token)

	try:
        # 슬랙봇으로 이미지 전송
        with open(img_path, 'rb') as file:
            response = client.files_upload_v2(
                channels=channel_id,
                file=file,
                title='title',
                initial_comment=f'*{text}*'
            )
            return response

    except SlackApiError as e:
        return f"Fail to send a message: {e.response['error']}"

    except Exception as e:
        return f"Error Occurred!!: {e}"

    return "This str will be shown on Slack"

유의할 점

  1. 슬랙봇 토큰은 위와 같이 xoxb로 시작한다는 점에 유의. (권한 범위 토큰이 아니다!)
  2. ngrok 무료버전의 공개 서버는 8시간만 지속되고 이후에 도메인이 변경된다. 즉, Request URL을 8시간마다 바꿔줘야 한다.

0개의 댓글