본문 바로가기
카테고리 없음

Python으로 Slack App Bot 만들기(2)_EC2 Ver.

by BTC_SHINN 2023. 7. 28.

베하! 안녕하세요~
BTC_수신자표시제한 입니다 😊
오늘은 EC2에서 Python으로 Slack App Bot을 만들어 보도록 하겠습니다. 

 

로컬PC에서 하는 방법이 궁금하다면 이전 글(Click)을 참고해주세요 😊

 


이전 핸즈온 실습과 동일하게

 

키워드를 이용해 정보를 찾을때에

활용할 수 있는 Slack App Bot을 만들어 보도록 하겠습니다. 

 

Hands-on

 

1. https://api.slack.com/apps 에 접속하여 'Create New App'을 클릭한 후 'From scratch'를 선택합니다.

 

2. App 이름을 입력하고 해당 App을 사용할 workspace를 선택한 후 'Create App' 합니다.

 

3. Basic Information - Add features and functionality - Bots를 지정해줍니다. 

 

4. Features - OAuth & Permissions - Scopes - Add an OAuth Scope 에서 다음과 같이 권한을 추가해줍니다. 

5. OAuth & Permissions - OAuth Tokens for Your Workspace - Install to Workspace - 안내메시지가 뜨면 '허용'을 선택합니다

 

6. 5번을 완료하면 사진과 같이 토큰 값이 뜹니다.

    이 토큰값은 App Bot이 Slack에 메세지 전송시 사용하게 되는 Token 값입니다.

 


여기까지 설정한 후 잠시 AWS로 이동합니다. 

 

7. AWS에서 EC2를 생성합니다.(이 때 EC2는 publicIP를 활성화해줍니다)

 

8. EC2 접속하여  다음과 같이 커맨드 실행해줍니다. 

# Python 버전확인 (Python 버전 3.6이상 필요)
python --version
    ## 설치 안되어있으면 
    sudo yum install python3
    ## python2면 아래와 같이 버전 업그레이드
    sudo yum update
    sudo yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel expat-devel
    wget https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tgz
    tar xzf Python-3.10.12.tgz
    cd Python-3.10.12/
    ./configure --enable-optimizations
    sudo make && make install
     python3 --version

# pip 및 EB CLI 설치 스크립트 다운로드
curl -O https://bootstrap.pypa.io/get-pip.py

# 다운받은 스크립트 실행
python3 get-pip.py --user

# flask랑 slack_sdk 모듈 설치
pip install flask --upgrade --user
pip install slack_sdk --upgrade --user

 

9. 인스턴스에 Slack App Bot 생성을 위한 파이썬 파일을 만들어줍니다.

# vi slackBot.py

import json
from datetime import datetime
from flask import Flask, request, make_response
from slack_sdk import WebClient
import logging

token = "슬랙에서 생성한 토큰값 넣어주기(5번 참고)"
app = Flask(__name__)
client = WebClient(token)

logger = logging.getLogger()

def get_day_of_week():
    weekday = datetime.today().strftime("%A")
    date = datetime.today().strftime("Year %Y %m Month %d Day")
    return f'{date} ({weekday})'

def get_time():
    return datetime.today().strftime("%H hour %M minutes %S seconds")

answer_dict = {
    '안녕': '안녕하세요. 수신자표시제한_EC2 Bot 입니다.',
    '요일': f':calendar: 오늘은 {get_day_of_week()} 입니다',
    '시간': f':clock9: 현재시간은 {get_time()} 입니다',
    '테크블로그' : 'https://btcd.tistory.com/'
}

def get_answer(text):
    trim_text = text.replace(" ", "")
    for key, value in answer_dict.items():
        if trim_text == key or trim_text in value:
            return value
    return f"{text} 는 존재하지 않는 질문입니다."

def set_message(event_type, slack_event):
    channel = slack_event["event"]["channel"]
    user_query = slack_event['event']['blocks'][0]['elements'][0]['elements'][1]['text']
    answer = get_answer(user_query)
    result = client.chat_postMessage(channel=channel, text=answer)
    return make_response("ok", 200)

@app.route('/', methods=['POST'])
def chat_main():
    slack_event = json.loads(request.data)
    bot_id = slack_event.get("event", {}).get("bot_id")
    if bot_id is not None:
        return make_response("Turning retries off", 200, {"X-Slack-No-Retry": 1})

    if "challenge" in slack_event:
        return make_response(slack_event["challenge"], 200, {"content_type": "application/json"})

    if "event" in slack_event:
        event_type = slack_event["event"]["type"]
        return set_message(event_type, slack_event)
    return make_response("Turning retries off", 404, {"X-Slack-No-Retry": 1})

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=8080)

 

10. 생성한 파이썬 파일을 실행시킵니다. 

# 위에 생성한 파이썬파일 실행권한 부여하고 실행
chmod +x slackBot.py
python3 slackBot.py

 


다시 Slack 앱 설정으로 돌아와서

 

11. Event Subscriptions - Enable Events - Request URL 에 http://<EC2 퍼블릭ip>:8080을 입력해줍니다.
      Verified 라고 뜨면 잘 설정된겁니다. 

 

12. Event Subscriptions - Subscribe to bot events에서 다음과 같이 권한을 추가해줍니다

 

13. App Home - Messages Tab에서

     Allow users to send Slash commands and messages from the messages tab을 활성화해줍니다.

 

14. 설정을 완료하셨다면 슬랙 채널 하단의 앱 추가에서 EC2_Answer_Bot을 선택해줍니다.

 

15. 이제 설치된 앱에서 키워드를 물어보면

Python 코드에 입력해둔 데이터를 기반으로 response값을 받아볼수있게됩니다. 


여기까지 EC2 인스턴스에서 Python을 통해 Slack App Bot 생성하는 방법에 대해 알아보았습니다. 

도움이 되셨으면 좋겠습니다.😊

 

다음엔 Slack API를 이용하여 다른 형태의 Slack App Bot을 만들어보도록 하겠습니다.
다음에 또 만나요 👋👋

 

댓글