글 수 51

파이썬과 Flask로 만든 간단한 카카오톡 챗봇

조회 수 11067 추천 수 0 2017.04.22 05:30:44


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 파일을 실행합니다. 위와 같이 나오면 웹서버가 실행중입니다.

 

 

 

kakao3.jpg

 

앱 URL에 'http://서버주소:5000'을 입력하고 API TEST 버튼을 눌러 확인합니다. 테스트가 통과되었으면 설정을 저장합니다.

 

 

 

image1.jpg

 

친구찾기에서 옐로아이디 프로필 이름을 검색합니다.

 

 

 

image4.jpg

 

대화를 시작합니다.

 

 

 

아파치 / 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'으로 변경합니다.

 

 

 

< 챗봇 개발자 모임 >

- 페이스북 그룹에 가입하시면 챗봇에 대한 최신 정보를 쉽게 받으실 수 있습니다.

https://www.facebook.com/groups/ChatbotDevKR/


재Z

2017.11.15 21:10:04
*.179.124.141

안녕하세요~~ IOT를 공부하고 있는 학생입니다.

 

Flask 서버를 이용해서 챗봇을 구현할려고 하는데요

 

api 테스트 부분에서 궁금한 점이 있습니다.

 

기본적으로 포트포워딩이나 super dmz가 설정이 되었다는 가정하에 글을 작성 하신게 맞는지 여쭤보고싶네요 ㅎㅎ 

 

 

깊은바다

2017.11.20 00:05:55
*.68.247.188

답변이 늦어 죄송합니다. 게시판에 댓글 알람 설정이 없어서^^; 포트포워딩이나 DMZ는 제가 알기로는 인터넷 공유기와 관련된 기능인 것 같은데요. 구체적으로 어떤 부분이 궁금하신건지 좀 더 자세히 알려주시면 고맙겠습니다.

List of Articles
제목 글쓴이 날짜 조회 수
파이썬과 Flask로 만든 간단한 카카오톡 챗봇 file [2] 깊은바다 2017-04-22 11067
파이썬과 Django로 카카오톡 챗봇 구현하기 깊은바다 2017-04-18 7341
PHP로 만든 간단한 카카오톡 챗봇 file 깊은바다 2017-04-15 10360
페이스북 날씨 챗봇 개발하기 file 깊은바다 2017-04-11 1931
ChatScript로 한국어 챗봇 개발하기 [2] 깊은바다 2017-03-21 6439
Wit.ai - 챗봇 API file 깊은바다 2017-02-28 2666