728x90
반응형

이 글만을 통해서 간단한 텍스트를 출력하는 카카오톡 챗봇을 만들 수 있습니다.


카카오톡 플러스 친구를 이용합니다.




카카오톡 플러스 친구 생성하기



카카오톡 관리자 센터 페이지로 이동합니다.






플러스친구 만들기를 클릭합니다.


카카오톡 계정으로 로그인을 합니다.




모두 작성하고 확인을 클릭합니다.







Django 설치 및 설정하기


https://tutorial.djangogirls.org/ko/installation/


이곳에 설치 방법이 잘 나와있습니다.

저는 가상환경을 사용하지 않았습니다.




<linux>  django 설치하기


~$ pip3 install --upgrade pip


~$ pip3 install django






프로젝트 생성


이제 프로젝트를 생성하겠습니다.


이 내용도

https://tutorial.djangogirls.org/ko/django_start_project/

여기에 잘 나와있습니다.



생성한뒤 폴더나 파일의 이름을 바꾸어선 안됩니다.


$ django-admin startproject [프로젝트 이름] .

마침표 (.) 은 필수입니다.


$ python3 manage.py startapp [어플리케이션 이름]

어플리케이션도 같이 만들겠습니다.


example :

~/project$ mkdir tistory

~/project$ cd tistory/

~/project/tistory$ django-admin startproject mybot .

~/project/tistory$ ls

manage.py  mybot

~/project/tistory$ python3 manage.py startapp testest



$ python3 manage.py migrate

이것도 해줍니다.



설정 변경


다음과 같이 변경합니다.


mybot/settings.py

25: # SECURITY WARNING: don't run with debug turned on in production!

26: DEBUG = False

27: 

28: ALLOWED_HOSTS = ['*']


* DEBUG는 테스트를 위해선 True, 실제 사용시에는 False로 해두세요. 그냥 False로 해두시는 것을 추천

* ALLOWED_HOSTS=['*']는 모든 아이피를 허용한다는 의미입니다.


mybot/settings.py

31: # Application definition

32: 

33: INSTALLED_APPS = [

34:     'django.contrib.admin',

35:     'django.contrib.auth',

36:     'django.contrib.contenttypes',

37:     'django.contrib.sessions',

38:     'django.contrib.messages',

39:     'django.contrib.staticfiles',

40:     'testtest',

41: ]


40:  에 어플리케이션 이름을 추가합니다.



mybot/settings.py

108: TIME_ZONE = 'Asia/Seoul'



mybot/urls.py

16: from django.conf.urls import include, url

17: from django.contrib import admin

18: 

19: urlpatterns = [

20:     url(r'^testtest/', include('testtest.urls')),

21:     url(r'^admin/', admin.site.urls),

22: ]


16: include 를 추가합니다.

20: 를 추가합니다.    testtest/로 온 요청은 testtest/urls.py로 보내겠다는 의미



testtest/urls.py

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


* mybot/ 경로가 아닌 testtest/ 경로입니다.

* 위 소스그대로 복사해서 파일을 만듭니다.





코드 작성하기



개발환경 : UBUNTU 16.04.3

개발언어: PYTHON 3.5.2

텍스트/코드 에디터: ATOM



testtest/views.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
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
import json
 
 
 
def keyboard(request):
 
    return JsonResponse({
        'type':'buttons',
        'buttons':['오늘','내일']
    })
 
@csrf_exempt
def answer(request):
 
    json_str = ((request.body).decode('utf-8'))
    received_json_data = json.loads(json_str)
    datacontent = received_json_data['content']
 
    if datacontent == '오늘':
        today = "오늘 급식"
 
        return JsonResponse({
                'message': {
                    'text': today
                },
                'keyboard': {
                    'type':'buttons',
                    'buttons':['오늘','내일']
                }
 
            })
 
    elif datacontent == '내일':
        tomorrow = "내일 급식"
 
        return JsonResponse({
                'message': {
                    'text': tomorrow
                },
                'keyboard': {
                    'type':'buttons',
                    'buttons':['오늘','내일']
                }
 
            })
 
cs


8에서 13라인은 카카오톡에 버튼 정보를 보내는 부분.

15부터 48라인은 각 버튼에 대한 응답 내용.





카카오톡 플러스 친구 설정 및 실행, 테스트하기





관리자 센터에서 스마트채팅으로 들어갑니다.




api형 설정하기를 클릭합니다.





앱 이름, 앱 URL, 앱 설명을 작성합니다.


알림받을 전화번호는 카카오톡 가입에 사용한 전화번호를 사용하세요.



앱 URL은 자신의 서버URL을 사용합니다.


$ python3 manage.py runserver port


여기에 사용한 포트 그대로 사용


http://자신의아이피:포트/디렉토리


그리고 api테스트를 클릭하여 정상적으로 작동하는지 확인합니다.



그리고 API형 저정하기를 누릅니다.


시작하기를 눌러서 서비스를 시작합니다.




이제 모바일 카카오톡에 들어갑니다. (모바일 기기에서 진행하세요.)


플러스친구 채팅으로 이동해서


버튼이 잘 뜨는지 확인하고 버튼을 눌렀을때 정상적인 응답이 오는지 확인합니다.




다음은 급식 파서를 활용한 카카오톡 챗봇을 만들겠습니다.

728x90
반응형
  1. 나도만들고싶다 2018.04.16 20:05

    안녕하세요 저도 카카오봇을 만드려고 하는데요
    이런식으로는 화면에 띄워지는데
    from django.http import HttpResponse

    def keyboard(request):
    return HttpResponse("Hello, world. You're at the polls index.")


    from django.http import JsonResponse

    def keyboard(request):
    return JsonResponse({
    'type': 'buttons',
    'buttons': ['오늘', '내일']
    })
    은 플러스친구에서
    Required*
    keyboard Fail 415
    wrong keyboard initialization
    이런 에러를 내나요? ㅠㅠ 아직 초보자라서 친절히 설명해주셨으면 좋겠어요 ㅠㅠ

  2. 나도만들고싶다 2018.04.17 20:13

    제가 파이참과 django2.0.4 버젼을 사용합니다.
    <setting.py>
    INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'globalHaksik',
    ]
    <urls.py>
    from django.contrib import admin
    from django.urls import path, include
    from globalHaksik import views

    urlpatterns = [
    path('admin/', admin.site.urls),
    path('globalHaksik/', include('globalHaksik.urls')),
    ]

    <globalHaksik\urls.py>
    from django.urls import path
    from . import views

    urlpatterns = [
    path('keyboard/', views.keyboard),

    ]
    이렇게 했습니다.

    • M4ndU 2018.04.17 21:54 신고

      views.py에서 코드 들여쓰기 사용하신 것 맞나요?

      일단 urls.py에서 path값 설정할 때 정규표현식 사용해주세요.

      이 외에 코드상에서 문제가 딱히 안보이네요..
      서버 아이피랑 포트 잘 확인하셨는지..
      본인의 네트워크구조에 따라 포트포워딩이 필요할 수 있습니다.

  3. 나도만들고싶다 2018.04.18 15:33

    그 들여쓰기해서 댓글에 적었는데 올라갈때 그냥 붙여서 올라가요.
    그리고 장고 2.0으로 업데이트되면서 정규식 안쓰고 path로 저렇게 쓰는 방식으로 바뀐거 같아요.
    포스포워딩이 무엇인가요??
    그 홈페이지로들어가서 xxxx.xxxxx/globalHalsik/keyboard/ 로 들어가면 막 json 파일 다운로드하라고 뜨는거와 관련이 있나요??무언가 패키지를 받아야하는건가요???

  4. eubee 2018.05.14 23:01

    파이썬 2 버전으로 만들었는데 똑같이 testtest/views.py를 써두 되나요? 아니면 다르게 써야할 명령어가 따로 있나요??
    elif에서 밑줄로 오류가 난다고 뜨는데 어떻게 해결해야 할까요..?

    • eubee 2018.05.14 23:05

      [pylint] E0001:invalid syntax (<string>, line 32) 이런 오류입니다.

    • M4ndU 2018.05.14 23:10 신고

      코드를 보여주세요

  5. 이기백 2018.05.22 14:32

    M4ndU님
    저도 질문 하나 여쭤보고 싶습니다. 일단 게시글 너무 잘보았구요! 정말 도움 많이 되었습니다.
    궁금한 점은 자신의 서버 ip는 한마디로 공인 ip가 필요한 것이지요? AWS나 pythonanywhere과 같이 무언가 서버를 실질적으로 갖고 있어야만 쓸 수 있는 것이죠? 위 게시글 그대로 따라한다고 되는 건 아니지요?
    제 생각에는 많은 분들이 실패하시는 부분이 서버 ip에서 실패하실 것 같은데, 제 생각이 맞을지 모르겠네요. 아직 초보라.....
    M4ndU님은 어떤 식으로 서버 ip를 사용하신 건지 궁금하네요! 추상적으로라도 좋으니... 조금 방향을 제시해주시면 감사하겠습니다!

    • M4ndU 2018.05.22 15:10 신고

      네 당연히 공인 ip로 설정하셔야 작동합니다.
      저는 저희집 공인 ip를 사용했습니다.

  6. nuttingon@naver.com 2018.07.03 16:06

    특정 단어를 입력 했을 때 구글 스프레드 시트의 특정 문자열을 띄우게 할 수 있을까요???

    • M4ndU 2018.07.03 16:51 신고

      특정 문자열을 받았을때 구글 스프레드 시트를 파싱해서 그 값을 보내주면 될 것 같습니다.

  7. hi django 2018.07.21 17:11

    그 어플리케이션로 지정한 경로에 url.py이 없는데 왜 이러는거죠...
    프로젝트에 지정된 경로에만 있네여..

  8. 캔따개 2018.07.30 10:31

    게시물 너무 잘 봤습니다 상세하게 알려주셔서 너무 감사합니다.

    제가 지금 aws ec2환경에서 저 게시물을 따라햇는데 키보드 오늘 내일은 나오고 버튼을 눌렀을때 응답하는 함수가 작동하지 않은것같습니다 혹시 어떻게 할지 알려주실수 있으신가요?

    • M4ndU 2018.07.30 11:01 신고

      일단 봇이 텍스트를 받아서 답을 보내는 모든 과정에 print("1") 이런식의 코드를 끼워넣어서 하나하나 어디서 막혔는지 찾아보아야 할 것 같습니다.

  9. 캔따개 2018.07.30 15:32

    print("1") 을 넣고 테스트를 하려는데

    print를 넣고 실행하면 서버가 실행이 안되네요 죄송하지만 어디에다가 넣으면서 테스트를 해야될까요?

    • M4ndU 2018.07.30 15:41 신고

      print명령 하나 넣었다고 서버 실행이 안될리가요...

  10. 다둥빠 2018.08.27 13:18

    안녕하세요, 제가 파이썬을 활용하여 만들려고 하는데,

    URL 에서 막혀서 그러는데, URL을 어떻게 만드는지 혹시 알 수 있을까요??

    • M4ndU 2018.08.27 13:20 신고

      네트워크 관련 지식이 조금 있으셔야 합니다.
      일반적으로 사용중인 외부아이피를 입력하시면 되는데, 공유기등을 이용하시는 경우 포트포워딩등의 작업을 하셔야 합니다.

  11. test 2018.09.04 00:26

    좋은 강좌 잘 보았습니다.

    저는 구글에서 제공하는 가상 리눅스 환경에서 작업중인데 프로젝트와 애플리케이션 설정 후

    '설정 변경하기'에서 막힌 상황입니다.

    리눅스 환경에서는 별도의 IDE를 사용하지 않고 콘솔에서 직접 수정해야 하는지,

    코드 수정은 어떻게 하는건지 (Vi 명령어 사용하면 되나요..!? 초보라 죄송합니다.) 알려주시면 감사하겠습니다!

    • M4ndU 2018.09.04 00:29 신고

      gui형태의 텍스트 에디터를 사용하셔도 되고(윈도우의 메모장처럼..), vi를 사용하셔도 됩니다.

  12. onetop 2018.09.10 13:34

    django 2.0 부터 urls 파일의 구문이 바꼈네요

    프로젝트
    from django.contrib import admin
    from django.urls import path, include


    urlpatterns = [
    path('admin/', admin.site.urls),
    path('smcbot/',include('smcbot.urls')),
    ]

    from django.urls import path, include
    from . import views

    app_name = 'smcbot'

    urlpatterns = [
    path('keyboard/', views.keyboard),
    path('message',views.answer),
    ]

    안에 이름은 알아서 수정하세요

  13. no2. 2018.12.29 00:13

    플러스친구 스마트채팅에서 API가 사라졌네요.
    https://center-pf.kakao.com/
    새로 만들어진 챗봇쪽으로 해야 할까요?

  14. 장재웅 2021.09.06 11:08

    정말 좋은 내용 감사드립니다. 그런데 올리신 것을 똑같게 코딩을 마친 후 runserver을 입력하니 404 not found가 뜨는걸 봐서 제 공인 ip를 어딘가 넣어야 될 거 같은데 어디에 넣어야 하는지 알 수 있을까요??

+ Recent posts