레플리
글 수 59

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

조회 수 25336 추천 수 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
제목 글쓴이 날짜 조회 수
챗봇 알고리즘의 발전 과정 file 깊은바다 2018-04-20 18413
왓슨 컨버세이션 – 챗봇은 어떻게 대화의 문맥을 기억할까? 깊은바다 2018-04-17 647
왓슨 컨버세이션 서비스를 활용한 회의실 예약 한글 챗봇 깊은바다 2018-04-10 648
Clova Platform 인공지능을 엮는 기술 깊은바다 2018-03-22 939
챗봇 개발 플랫폼 비교 file [1] 깊은바다 2018-03-07 21385
왓슨을 사용한 챗봇 개발 방법 file 깊은바다 2018-03-06 3708
에이브릴을 활용한 챗봇 개발 깊은바다 2018-03-06 416
BotHub로 만든 다양한 챗봇 예제 깊은바다 2017-12-22 2266
Python으로 챗봇 만들어보기 - 영화 정보 / 음료 주문 깊은바다 2017-12-22 8944
자바 스프링으로 카카오톡 챗봇 만들기 깊은바다 2017-11-26 10513
Api.ai로 Telegram 연동 챗봇 만들기 깊은바다 2017-10-02 5937
Chatfuel로 코딩없이 타로 챗봇 만들기 file 깊은바다 2017-09-26 4372
MS의 Bot Framework로 30분 안에 챗봇 만들기 깊은바다 2017-09-17 3626
Watson으로 쉽게 만드는 카카오톡 ChatBot 깊은바다 2017-08-31 1900
Node.js로 LINE Bot 만들기 깊은바다 2017-07-10 2510