반응형

자동으로 응답이 가능한 Slack App(Bot)을 만들기 위해서는 Slack App(Bot)과 통신할 수 있는 서버가 필요합니다. 하지만 우리가 개발한 PC의 경우는 외부에서 접속가능한 상용 서버가 아니기때문에 도메인을 구입하고 서버를 호스팅 받아 연결해야 합니다. 

ngrok 과 Flask를 이용하여 외부에서도 접속 가능한 네트워크 환경을 구축하고 Slack App에서 호출 할 수 있도록 하겠습니다.


1. 먼저 ngrok 계정을 만들고 설치가 필요합니다. ngrok 설치 안내를 참고하시어 설치하시기 바랍니다.

2. Flask 설치가 필요합니다. Flask 설치 안내를 참고하시어 설치하시기 바랍니다.

3. 먼저 간단한 Flask Server를 python을 이용하여 만들도록 하겠습니다. 아래 코드를 작성하고 flask_server.py 파일을 만듭니다.

import json
from flask import Flask, request, make_response

app = Flask(__name__)

@app.route('/', methods=['POST'])
def hello_there():
    slack_event = json.loads(request.data)
    if "challenge" in slack_event:
        return make_response(slack_event["challenge"], 200, {"content_type": "application/json"})
    return make_response("There are no slack request events", 404, {"X-Slack-No-Retry": 1})


if __name__ == '__main__':
    app.run(debug=True, port=5002)

 4. 그런 다음 flask_server.py 파일이 있는 경로 터미널에서 다음과 같이 실행합니다. --port=5002 입력하는 이유는 Flask의 Default port는 5000 인데, Mac OS의 AirPlay 수신기와 충돌이 있는 경우가 있어서 5002 port로 변경하기 위함입니다.

export FLASK_APP=flask_server.py
flask run --port=5002

이 코드를 실행한 다음 http://127.0.0.1:5002/ 에 접속하면 웹 브라우저에 ‘Hello World’가 출력됩니다.

5. ngrok http 5002 를 입력하고 외부에서 접속 가능한 URL을 생성합니다.

ngrok http 5002

http 또는 https 로 생성된 URL을 복사합니다.

 

6. Slack api 로 이동하여 만든 App(Bot)을 선택합니다.

7. Event Subscriptions 메뉴를 클릭하고 OFF -> ON 으로 변경합니다. 그리고 조금 전 ngrok에서 복사한 URL을 Request URL에 붙여넣기 합니다. Verified가 나와야 정상적으로 작동하는 것입니다. 만약 "Your URL didn't respond with the value of the challenge parameter" 에러가 나온다면 위에서 생성한 flask_server.py 가 실행중이지 않거나 ngrok 이 실행중이지 않을 수 있습니다. 둘 다 모두 실행중이여야 하고 만약 ngrok을 재실행 했다면 URL이 변경되었으니 확인하시기 바랍니다. [Save Chages] 를 눌러서 적용합니다.

더보기

Flask Server도 실행 중이고 ngrok 도 정상적으로 실행이고 응답도 200 OK 인데 "Your URL didn't respond with the value of the challenge parameter" 가 계속 나온다면 challenge 에 대한 응답을 dictionary 형태로 Return 하도록 수정하면 정상적으로 Verified 될 것입니다.

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

 


자동응답을 하는 Slack App(Bot)을 위한 환경구성은 끝났습니다. 다음에는 Slack 창에 명령어를 입력하면 답을 하는 간단한 챗봇을 구현하도록 하겠습니다.

Python으로 Slack App(Bot) 만들기 (3)- 챗봇

반응형