Completion over Perfection

파이썬 Python - 슬랙 api로 슬랙봇 slackbot 만들기 <2편 환경세팅> 본문

파이썬 (Python)

파이썬 Python - 슬랙 api로 슬랙봇 slackbot 만들기 <2편 환경세팅>

난차차 2020. 12. 30. 00:54
반응형

파이썬 Python - 슬랙 api로 슬랙봇 slackbot 만들기 <2편 환경세팅>

지난 포스팅에 이어서 작성합니다.

1편 포스팅은 아래 링크를 통해 확인해주세요~

 

1편 보러 가기 (nanchachaa.tistory.com/44)

 

1. Event Subscription 설정을 통해 봇과 대화 주고 받을 수 있도록 세팅하기

 

이번에는 slack api 메뉴에서 event subscription 부분을 세팅해주어야 하는데, 

아래 스샷에서 빨간색 박스처리한 메뉴입니다. 

클릭해서 들어가줍시다.

 

클릭해서 들어가자

 

클릭해서 들어가면 아래와 같은 화면이 나옵니다. 

스위치를 켜줍시다. 

 

스위치를 눌러 켜주자

 

그럼 아래와 같이 뭔가 복잡한게 나오는데, 

신경써야 하는 부분은 Request URL 부분입니다. 

2021년 2월 24일부터 인증방법이 간편해지는 것 같다.

 

위에 언급한 URL 입력란은

슬랙봇 Slack bot의 Event Subscription 기능을 사용하려면 필수적으로 채워넣어야 하는 부분입니다.

 

내용인즉,

봇과 우리가 이제 곧 띄울 서버가 정상적으로 통신을 할 수 있는 상태인지 체크하는 것이죠. 

 

그말인 즉슨 서버를 하나 띄워야한다는 겁니다. 

단순히 파이썬으로 스크립트 정도만 짤 줄 아는 저에게는

이부분이 가장 큰 난관이었습니다. 

 

전세계에서 접속할 수 있는 서버를 띄우려면

간단한 서버라도 서버에 대한 구조부터 공부해야되었기 때문이죠. 

 

서버는 나중에 천천히 공부하셔도 되니

아래 절차에 따라 진행하시면 됩니다. 

서버를 띄우려면 두 가지 항목이 충족되어야 합니다. 

바로 1) ngrok 2) 서버를 띄울 파이썬 코드입니다.

 

2. 내 PC로 서버를 만들어서 전세계에서 접속 가능하도록 만들어보자!

 

우리는 당장 운영할 것이 아니라 테스트만 할 것이기 때문에

임시라도 서버를 띄울 수 있으면 OK입니다.

그러기 위해서 필요한 것이 ngrok입니다.

 

ngrok은 내 로컬 PC를 잠시나마(8시간동안) 전세계에서 접속 가능한 서버로 만들어주는 

프로그램입니다. 

ngrok에 대해서는 자세히 설명한 웹페이지들이 많으니

시간 나실 때 둘러보시길 권해드립니다. 

 

먼저 설치를 해야겠죠?

 

맥북이라면 터미널에서 homebrew를 통해 인스톨해주시면 되고, 

윈도우라면 ngrok 홈페이지에서 프로그램을 다운받으시면 됩니다.

맥북도 홈페이지에서 받으셔도 돼요. 상관없습니다.

 

이미 설치되어있어서 다시 인스톨하라고 안내가 뜨네요

 

다운로드 링크는 아래에 있습니다.

ngrok.com/download

 

 

 

다 받으셨으면 잠시 서버 띄우는 쪽으로 다시 돌아가겠습니다.

파이썬 파일을 하나 만들어주시고, 

서버를 띄울 코드를 짜줘야합니다. 

 

파이썬 코드는 아래 코드를 그대로 복붙해서 사용하시면 됩니다. 

다만 그 전에 flask, slackeventsapi 라이브러리는 설치를 해주셔야 합니다. 

 

그리고 아래 세 가지 부분들은 슬랙 api에 접속하시면 각자 확인하실 수 있습니다. 

String으로 바로 변수에 넣어주시면 됩니다. 

 

1. SLACK_SIGNING_SECRET (Basic Information에서 확인 가능)

2. slack_token (OAuth & Permission에서 확인 가능)

3. VERIFICATION_TOKEN (Basic Information에서 확인 가능)

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
from flask import Flask, Response
from slackeventsapi import SlackEventAdapter
import os
from threading import Thread
from slack import WebClient
 
 
# This `app` represents your existing Flask app
app = Flask(__name__)
 
greetings = ["hi""hello""hello there""hey"]
 
SLACK_SIGNING_SECRET = os.environ['SLACK_SIGNING_SECRET']
slack_token = os.environ['SLACK_BOT_TOKEN']
VERIFICATION_TOKEN = os.environ['VERIFICATION_TOKEN']
 
#instantiating slack client
slack_client = WebClient(slack_token)
 
# An example of one of your Flask app's routes
@app.route("/")
def event_hook(request):
    json_dict = json.loads(request.body.decode("utf-8"))
    if json_dict["token"!= VERIFICATION_TOKEN:
        return {"status"403}
 
    if "type" in json_dict:
        if json_dict["type"== "url_verification":
            response_dict = {"challenge": json_dict["challenge"]}
            return response_dict
    return {"status"500}
    return
 
 
slack_events_adapter = SlackEventAdapter(
    SLACK_SIGNING_SECRET, "/slack/events", app
)  
 
 
@slack_events_adapter.on("app_mention")
def handle_message(event_data):
    def send_reply(value):
        event_data = value
        message = event_data["event"]
        if message.get("subtype"is None:
            command = message.get("text")
            channel_id = message["channel"]
            if any(item in command.lower() for item in greetings):
                message = (
                    "Hello <@%s>! :tada:"
                    % message["user"]  # noqa
                )
                slack_client.chat_postMessage(channel=channel_id, text=message)
    thread = Thread(target=send_reply, kwargs={"value": event_data})
    thread.start()
    return Response(status=200)
 
 
# Start the server on port 3000
if __name__ == "__main__":
  app.run(port=5000)
 

 

 

위의 코드로 파일을 생성하고 저장하신 뒤 

실행을 해보시면 서버 하나가 띄워지는 걸 보실 수 있을 겁니다.

 

5000포트로 서버를 띄웠다는 내용

 

이제 ngrok으로 저 5000번 포트로 띄워진 서버를 

전세계에서 접속가능하도록 만들어주면 슬랙 이벤트 api 세팅을 할 수 있게 됩니다. 

맥북이면 터미널을 열고, 아래와 같이 쳐줍니다. 

ngrok http 5000

 

윈도우는 프로그램 실행을 하시면 똑같이 터미널에서 뭔가를 치도록 나오게 될겁니다. 

위의 명령어를 그대로 쳐주시면 됩니다. (ngrok http 5000)

 

이렇게 치면 된다

 

엔터를 치게 되면 아래와 같은 화면이 나올겁니다.

아래 화면이 나왔다는 건 정상적으로 서버가 올라갔다는 겁니다. 

 

성공했다

 

위의 내용 중에서 http://7e181526eb4a.ngrok.io 부분을 카피해서 웹브라우저 주소창에 넣고 엔터를 쳐보면

뭔가 뜨는 것을 보실 수 있을겁니다. 

 

 

 

이제 서버는 띄워졌고, 

다시 슬랙 api event subscription 메뉴로 돌아가봅시다.

 

event subscription에서 아래 부분에 url을 넣어줍니다. 

url은 ngrok에 띄워진 주소 + "/slack/events" 로 넣어주시면 됩니다.

아래 스샷을 보시는게 더 빠를 것 같습니다. 

 

성공했다!

 

위의 절차가 성공했으면, 권한을 설정해주면 됩니다. 

저의 봇은 멘션을 당했을 때만 (@하고 봇을 부를 때만) 반응하도록 권한을 주었습니다. 

app_mention권한을 주도록 합시다.

 

 

이제 우측 하단에 save changes 버튼을 눌러주면 모든 설정이 완료됩니다.

반응형
Comments