- AI Dev - 인공지능 개발자 모임
- 정보공유
- 챗봇 개발
Django가 웹 개발에 필요한 모든 기능을 모두 지원하는 풀스택 프레임워크라면 Flask는 최소한의 기능만 제공하고 나머지는 자신이 원하는 라이브러리나 프레임워크를 확장해서 사용하는 마이크로 프레임워크입니다. Django는 다양한 기능이 있지만 사용법이 조금 복잡하고 구조가 추상화되어 있어 세부적으로 변경하기가 어렵습니다. 간단하게 구현하기에는 Flask가 더 적합하지 않을까 합니다. 이전에 PHP로 카카오톡 챗봇을 만들었던 것을 파이썬과 Flask를 사용하여 똑같이 구현해보도록 하겠습니다.
옐로아이디 가입 및 자동응답 API 설정
카카오톡 옐로아이디에 가입하고 자동응답 부분을 변경하는 방법은 아래 링크를 참조하시길 바랍니다.
PHP로 만든 간단한 카카오톡 챗봇
-> http://aidev.co.kr/nlp/1229
파이썬 / Flask 설치
파이썬 2.7과 아마존 리눅스를 기반으로 설명하겠습니다.
1
2
|
$ yum install python
$ yum install python-pip
|
cs |
파이썬과 패키지를 관리해주는 툴인 pip도 같이 설치합니다.
1
|
$ pip install flask
|
cs |
Flask를 pip를 이용해서 설치합니다.
소스 코드
아래와 같은 코드를 /opt/quizbot/quizbot.py에 저장하였습니다. 폴더는 원하는 위치를 마음대로 선택하시면 됩니다.
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
62
63
64
65
66
|
# -*- coding: utf-8 -*-
#---------------------------------
# quizbot.py
#---------------------------------
import os
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/keyboard')
def Keyboard():
dataSend = {
"type" : "buttons",
"buttons" : ["시작하기", "도움말"]
}
return jsonify(dataSend)
@app.route('/message', methods=['POST'])
def Message():
dataReceive = request.get_json()
content = dataReceive['content']
if content == u"시작하기":
dataSend = {
"message": {
"text": "아직 개발중이라 대답을 잘 못해도 이해해줘^^;"
}
}
elif content == u"도움말":
dataSend = {
"message": {
"text": "이제 곧 정식 버전이 출시될거야. 조금만 기다려~~~"
}
}
elif u"안녕" in content:
dataSend = {
"message": {
"text": "안녕~~ 반가워 ㅎㅎ"
}
}
else:
dataSend = {
"message": {
"text": "나랑 놀자 ㅋㅋㅋ"
}
}
return jsonify(dataSend)
if __name__ == "__main__":
app.run(host='0.0.0.0', port = 5000)
|
cs |
@app.route('/keyboard') 부분은 http://주소/keyboard로 GET 요청이 들어오면 바로 아래의 함수를 실행하겠다는 명령어입니다.
app.run에서 host는 접속할 수 있는 주소를 가리키는데 0.0.0.0은 모든 주소가 가능하도록 설정합니다. port는 포트값을 나타냅니다.
실행 방법
1
2
|
$ python quizbot.py
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
|
cs |
quizbot.py 파일을 실행합니다. 위와 같이 나오면 웹서버가 실행중입니다.
앱 URL에 'http://서버주소:5000'을 입력하고 API TEST 버튼을 눌러 확인합니다. 테스트가 통과되었으면 설정을 저장합니다.
친구찾기에서 옐로아이디 프로필 이름을 검색합니다.
대화를 시작합니다.
아파치 / mod_wsgi 설치
자체 서버가 아니라 아파치 서버에 Flask를 연동할 수 있습니다. WSGI(Web Serve Gateway Interface)를 통해 가능한데 아파치에서는 mod_wsgi를 사용합니다. 다음과 같이 설치합니다.
1
2
|
$ yum install httpd
$ yum install mod_wsgi
|
cs |
wsgi 파일 작성
1
2
3
4
5
6
|
# quizbot.wsgi
import sys
sys.path.insert(0, '/opt/quizbot')
from quizbot import app as application
|
cs |
quizbot.py이 있는 폴더에 quizbot.wsgi 파일을 생성합니다. 'sys.path.insert'로 소스가 있는 폴더를 패스로 지정하고 quizbot.py에 있는 Flask의 app 인스턴스를 불러오는 것이 wsgi 파일의 역할입니다.
아파치 설정 변경
1
2
3
4
5
6
7
8
9
|
# httpd.conf
<VirtualHost *:80>
WSGIScriptAlias /quizbot /opt/quizbot/quizbot.wsgi
<Directory /opt/quizbot>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
|
cs |
/etc/httpd/conf/httpd.conf 파일에 위와 같이 추가합니다. WSGIScriptAlias는 'http://서버주소/quizbot'으로 접속하면 '/opt/quizbot/quizbot.wsgi'를 실행하여 처리하겠다는 설정입니다.
1
|
$ service httpd restart
|
cs |
이제 아파치를 재시작하고 옐로아이디에서 앱 URL을 'http://서버주소/quizbot'으로 변경합니다.
< 챗봇 개발자 모임 >
- 페이스북 그룹에 가입하시면 챗봇에 대한 최신 정보를 쉽게 받으실 수 있습니다.
안녕하세요~~ IOT를 공부하고 있는 학생입니다.
Flask 서버를 이용해서 챗봇을 구현할려고 하는데요
api 테스트 부분에서 궁금한 점이 있습니다.
기본적으로 포트포워딩이나 super dmz가 설정이 되었다는 가정하에 글을 작성 하신게 맞는지 여쭤보고싶네요 ㅎㅎ