Step 1)


Web 서비스를 이용하기 위해 Django를 설치합니다.


관리하기 쉽게, 가상환경을 만들고 실행했습니다.


프로젝트를 관리할 디렉토리를 하나 생성하고 들어간 뒤


*e.g.) mkdir Django --> cd Django


python3 -m venv myvenv로 가상환경을 만들었습니다.


*웹 크롤링할 때, 라이브러리가 python3가 더 편해서 python3로 진행하였습니다.


이후, source myvenv/bin/activate를 치시면 가상환경을 실행할 수 있습니다.




이제 DjangoApache 그리고 둘을 연동할 mod_wsgi를 설치합니다.


pip install Django


sudo apt-get install appache2


sudo apt-get install libapache2-mod-wsgi-py3


완료되었으면,  연동을 위한 약간의 설정을 해줍니다.



우선, 새로운 Django 프로젝트 및 앱을 생성해줍니다. 


django-admin startproject 프로젝트 이름(여기선 bot) .


python manage.py startapp 앱 이름(여기선 meal)




이후에, 프로젝트 폴더에가서, settings.py를 수정해줍니다.



모든 접근이 가능하도록 ALLOWED_HOSTS 부분을 '*'로 바꿔주시고, 


INSTALLED_APPS 부분에, 방금 만든 앱 이름을 추가해줍니다.





파일 맨 하단에 TIME_ZONE 부분을 'Asis/Seoul'로 해주어 시간을 맞춰줍니다.




마지막으로, 같은 폴더에 wsgi.py 파일을 들어가 아래와 같이, 경로를 몇가지 추가해줍니다.



1
2
3
4
5
6
7
8
9
10
11
12
import os, sys
 
sys.path.append('/home/ubuntu/Django')
#sys.path.append('/home/ubuntu/Django/bot')
sys.path.append('/home/ubuntu/Django/myvenv/lib/python3.5/site-packages')
 
from django.core.wsgi import get_wsgi_application
 
os.environ.setdefault("DJANGO_SETTINGS_MODULE""bot.settings")
 
application = get_wsgi_application()
 
cs




이제 apache 부분을 설정하면 됩니다.



이제, /etc/apache2/site-available/000-default.conf에 들어가 가상환경(Virtualenv)을 설정하면 됩니다.


이미 써있는 부분은 냅두시고, 밑에 다음과 같이 추가하면 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
WSGIDaemonProcess bot python-path=/home/ubuntu/Django/bot:/home/ubuntu/Django/myvenv/lib/python3.5/site-packages
<VirtualHost *:80>
 
        ServerAdmin webmaster@localhost
        WSGIScriptAlias / /home/ubuntu/Django/bot/wsgi.py
  
        <Directory /home/ubuntu/Django/bot>
        <Files wsgi.py>
                Require all granted
        </Files>
        </Directory>
 
</VirtualHost>
 
cs




* bot은 생성한 프로젝트 이름, Django는 앞서 가상환경을 위해 생성한 디렉토리 이름입니다.


마지막으로


sudo apachectl -k restart로 아파치를 재시작해줍니다.


이제 브라우저에 가서 할당받은 아이피를 쳤을 때, 아래와 같은 화면이 나오면 성공입니다.




*에러가 뜬다면 /var/log/apache2/error.log를 참고하시면 됩니다.



다음엔, 자동응답 API 형식에 맞게 Django 파일을 만들어보았습니다.


Step 2) 


연동이 완료되었으니, 옐로아이디 API에 맞게 Django 파일을 생성합니다.


옐로아이디 API Document(https://github.com/plusfriend/auto_reply)를 참고합니다. 


우선 가장 먼저 구현해야할 페이지는 http(s)://:your_server_url/keyboard로, 


이용자가 채팅방에 들어올 때, 키보드 영역에 표시될 자동응답 명령어의 목록을 호출하는 API입니다.


JSON 형식으로 아래와 같이 Return 되게끔 만들면 됩니다.


{

"type" : "buttons",

"buttons" : ["선택 1", "선택 2", "선택 3"]

}


우선 제일먼저 프로젝트폴더에 urls.py 파일을 아래와 같이 수정합니다.


1
2
3
4
5
6
7
from django.conf.urls import url, include
 
urlpatterns = [
    url(r'',include('meal.urls')),
]
 
 
cs


앱마다 관리하기 쉽게, url로 들어오는 요청을 앱의 urls.py 파일로 접근하도록 만들었습니다.


이후에, 만들어둔 앱 폴더로가 urls.py 파일을 작성합니다.


1
2
3
4
5
6
7
8
from django.conf.urls import url
from . import views
 
urlpatterns = [
        url(r'^keyboard/',views.keyboard),
]
 
 
cs


http(s)://:your_server_url/keyboard로 요청이 왔을 때, views.py 파일의 keyboard함수를 부르게 하였습니다.


이제 views.py 파일을 수정합니다.


1
2
3
4
5
6
7
8
9
from django.http import JsonResponse
 
def keyboard(request):
 
        return JsonResponse({
                'type' : 'buttons',
                'buttons' : ['1','2']
                })
 
cs


채팅창에 들어왔을 때, 간단하게 '1' 혹은 '2' 버튼을 누를 수 있게 만들었습니다.


모든 파일을 수정했으면 sudo apachectl -k restart를 통해 아파치를 재시작해주시고


옐로아이디 홈페이지에 들어가서 자동응답 API를 등록합니다.


API형 자동응답을 선택해서 아래와 같은 페이지가 나오면 빈칸을 작성해주세요.


앱 URL 부분에 http(s)://:'할당받은 ip'를 적으신 후 API TEST를 눌렀을 때, 아래처럼 나오면 성공입니다.





이제 등록을 마치신 후, API를 시작하신 후에 스마트폰으로 가서 등록한 옐로아이디를 검색해서 친구추가를 한 뒤, 채팅창에 들어가보세요.


     



위에 처럼 나오면 자동응답 API 사용이 정상적으로 완료된 겁니다.


다음엔 마지막으로 버튼을 눌렀을 때 자동으로 응답할 수 있게끔 Django 파일을 수정해보겠습니다.


Step 3)


이전 포스팅처럼 버튼까지 만들었다면,


버튼을 눌렀을 때 그 버튼의 내용이 POST 형식으로 우리 서버(http://:your_server_url/message)에 전달됩니다.


그러므로, 저번처럼 message url을 만들어주세요.


다음과 같이 meal/url.py 파일을 수정해줍니다. 


1
2
3
4
5
6
7
from django.conf.urls import url
from . import views
 
urlpatterns = [
        url(r'^keyboard/',views.keyboard),
        url(r'^message',views.message),
]
cs


다음엔, 저번처럼 views.py 파일에 message 함수를 추가합니다.


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
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json
 
def keyboard(request):
 
        return JsonResponse({
                'type' : 'buttons',
                'buttons' : ['1','2']
                })
 
@csrf_exempt
def message(request):
        message = ((request.body).decode('utf-8'))
        return_json_str = json.loads(message)
        return_str = return_json_str['content']
 
        return JsonResponse({
                'message': {
                        'text'"you type "+return_str+"!"
                },
                'keyboard': {
                        'type''buttons',
                        'buttons': ['1','2']
                }
        })
cs


*csrf_exempt는 Django에서 POST 방식을 사용했을 때 에러를 방지해줍니다.


이후에, json 함수들을 사용하여 들어온 message를 해석하고 간단하게 받은 값을 다시 린턴한 뒤 버튼을 다시 누를 수 있게 message 함수를 구현하였습니다.


마찬가지로 sudo apachectl -k restart를 통해 아파치를 재시작해주시고 스마트폰에 가서 버튼을 눌러보았습니다.




이제, 자동응답을 하니, 입맛에 맞게 봇을 완성해주세요.


저는 다음과 같이 학교 학생식당 메뉴를 알려주는 학식봇을 구현하였습니다.






필요한 분이 있었으면 좋겠습니다.


  1. ceyber 2017.05.01 23:03

    python3 -으로 가상환경 만드는게 에러뜹니다 어떻게 해야하죠?

    • zimkjh 2017.12.28 15:30

      저도요 ㅠㅠ

  2. choi 2017.05.03 23:29

    안녕하세요 카카오톡 챗봇 만들기 공부하다가 오게 됐습니다.
    포스트가 지금까지 찾던 것 중에 제가 구현하려고 하는것과 제일 비슷한데,
    혹시 크롤링 관련해서 정보좀 얻을 수 있을까요..?

  3. namb 2017.05.04 01:42

    1

  4. jiwon 2017.08.27 04:28

    시행착오 정리
    1. python-path 가 아닌 python-home을 사용해야만 정상 작동함
    2. 경로가 ubuntu는 사용자 이름으로, Django/bot은 Django/bot/bot으로 치환해주어야 함

  5. 로로 2018.06.11 19:29

    잘못된 명령'WSGIDaemonProcess'입니다. 잘못되었거나 서버 구성에 포함되지 않은 모듈에 의해 정의되었을 수 있습니다. 라고 뜹니다.. ㅠㅠ

  6. 캔따개 2018.07.30 15:59

    소스는 따라햇는데 버튼을 눌렀을때 "해당 프로핑의 자동응답 시스템이 응답을 하지않습니다" 라고 뜨면 어떻게 조치를 취해야 될까요 ?
    EC2 환경에서 진행하고 있습니다 ㅠ

+ Recent posts