슬랙 챗봇 만들기 [협업 메신저 끝판왕 슬랙(Slack) 7강]
슬랙(Slack) 챗봇(Chat Bot)은 사용자가 슬랙 봇에게 말을 걸었을 때 그에 대한 적절한 응답을 수행하는 봇을 의미합니다. 그래서 슬랙 챗봇을 구현하고자 한다면 사용자가 챗봇을 부르는 과정을 이벤트(Event)로 받아들여 슬랙 챗봇이 동작하도록 해야 합니다. 따라서 이전 시간에 이어서 슬랙 챗봇을 구현해보도록 하겠습니다. 가장 먼저 이벤트 구독(Event Subscriptions) 탭에 들어갑니다.
이후에 [Enable Events]를 활성화(On)로 설정할 수 있습니다.
활성화로 설정한 이후에는 다음과 같이 요청 URL을 입력하는 부분이 활성화 됩니다.
이후에 아래쪽에서 봇 이벤트(Bot Events)로 app_mention을 설정할 수 있습니다. app_mention을 설정하면 해당 슬랙 앱이 멘션(Mention) 되었을 때 이벤트가 발생합니다.
이벤트가 발생하면 특정한 URL로 요청(Request)을 보내게 되는 것입니다. 이제 실제로 요청이 들어왔을 때 이를 처리하는 파이썬 챗봇 모듈을 개발해보겠습니다.
# -*- coding: utf-8 -*-
import json
from slacker import Slacker
from flask import Flask, request, make_response
token = "봇 유저 토큰 값"
slack = Slacker(token)
app = Flask(__name__)
def get_answer():
return "안녕하세요."
# 이벤트 핸들하는 함수
def event_handler(event_type, slack_event):
if event_type == "app_mention":
channel = slack_event["event"]["channel"]
text = get_answer()
slack.chat.post_message(channel, text)
return make_response("앱 멘션 메시지가 보내졌습니다.", 200, )
message = "[%s] 이벤트 핸들러를 찾을 수 없습니다." % event_type
return make_response(message, 200, {"X-Slack-No-Retry": 1})
@app.route("/slack", methods=["GET", "POST"])
def hears():
slack_event = json.loads(request.data)
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 event_handler(event_type, slack_event)
return make_response("슬랙 요청에 이벤트가 없습니다.", 404, {"X-Slack-No-Retry": 1})
if __name__ == '__main__':
app.run('0.0.0.0', port=8080)
이제 테스트를 위해서 엔그록(Ngrok)을 이용해 공인 URL을 일시적으로 만들어보도록 하겠습니다.
이제 만들어진 공인 URL을 슬랙 봇의 요청 URL로 설정할 수 있습니다.
설정했을 때 Verified라고 메시지가 출력되면 성공입니다. 이제 한 번 챗봇을 불러보도록 합시다.
초대한 이후에 다시 챗봇을 불러보면 챗봇이 성공적으로 응답합니다.
Ngrok의 로그를 확인해 보았을 때에도 성공적으로 슬랙 API와 통신한 것을 확인할 수 있습니다.
'기타' 카테고리의 다른 글
Freenom 서비스로 무료 도메인 호스팅 이용하기! (2) | 2018.12.31 |
---|---|
Xshell 6 개인 무료 라이센스로 설치하여 사용하는 방법 (0) | 2018.12.31 |
슬래커(Slacker)로 슬랙 봇 이용하기 [협업 메신저 끝판왕 슬랙(Slack) 6강] (1) | 2018.12.23 |
슬랙 앱 추가하여 사용해보기 [협업 메신저 끝판왕 슬랙(Slack) 5강] (0) | 2018.12.23 |
슬랙 기본 설정하기 [협업 메신저 끝판왕 슬랙(Slack) 4강] (0) | 2018.12.23 |