본문 바로가기
Back-end

Python으로 카카오톡 플러스친구 만들기 -5-

by 노아론 2018. 1. 2.

Python으로 카카오톡 플러스친구 만들기

-목차-
Python으로 카카오톡 플러스친구 만들기 -1-
Python으로 카카오톡 플러스친구 만들기 -2-
Python으로 카카오톡 플러스친구 만들기 -3-
Python으로 카카오톡 플러스친구 만들기 -4-


본 튜토리얼은 카카오 Plusfriend Open API종료로 신규 생성이 불가합니다!
조만간 연재되는 카카오i 플러스친구 Skill 튜토리얼을 참고해주세요
-2018/12/19-

저번 내용

버튼마다 응답메세지를 다르게 해보자
사용자를 구별해보자

이번에 할 내용

사용자가 사진,음성, 동영상 같은 파일을 보내면?
사용자를 구분해보자


지금까지 한 것대로 플러스친구를 작동시켜 사진, 음성메세지, 동영상을 보내면 오류가 뜨게 됩니다.

아래 사진은 사진을 보낼 때 뜨게되는 오류입니다.

에러가 뜰때 이미지

저번 튜토리얼에서 진행한 views.py파일은 아래와 같습니다.

from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json

def keyboard(request):

    return JsonResponse(
        {
            'type': 'buttons',
            'buttons': ['학식', '내일의 학식', '시간별 학식']
        }
    )

@csrf_exempt
def message(request):

    #button = ['학식', '내일의 학식', '시간별 학식']

    json_str = (request.body).decode('utf-8')
    received_json = json.loads(json_str)
    content_name = received_json['content']

    #user_name = received_json['user_key']
    #user_name은 사용자를 구별하기 위해 사용됨
    #type_name = received_json['type']
    #type_name은 사용자가 보낸 값의 속성을 구별(text,photo 등)

    if content_name == "학식":
        return JsonResponse(등
            {
                'message': {
                    'text': '학식을 눌렀습니다.'
                },
                'keyboard': {
                    'type': 'buttons',
                    'buttons': ['학식', '내일의 학식', '시간별 학식']
                }
            }
        )
    elif content_name == "내일의 학식":
        return JsonResponse(
            {
                'message': {
                    'text': '내일의 학식을 눌렀습니다'
                },
                'keyboard': {
                    'type': 'buttons',
                    'buttons': ['학식', '내일의 학식', '시간별 학식']
                }
            }
        )
    elif content_name == '시간별 학식':
        return JsonResponse(
            {
                'message': {
                    'text': '시간별 학식을 눌렀습니다'
                },
                'keyboard': {
                    'type': 'buttons',
                    'buttons': ['학식', '내일의 학식', '시간별 학식']
                }
            }
        )

if, elif로만 구성되어있기에 조건에 맞지 않는 경우는 오류가 발생하게 됩니다.

views.py코드의 마지막에 아래 내용을 추가해주세요


    else:
        return JsonResponse(
            {
                'message': {
                    'text': '버튼이 아닙니다'
                },
                'keyboard':{
                    'type':'buttons',
                    'buttons': ['학식', '내일의 학식', '시간별 학식']
                }
            }

        )

이렇게 해결할 수 있지만, 사용자가 보낸 내용이 사진인지, 음성파일인지는 알 수 없습니다.
구분을 위해서 사용자가 보내는 content가 아닌, type을 이용해야 합니다.

content_name = received_json['content'] #버튼 명 / 파일의 경우 URL
type_name = received_json['type']   #파일 타입(버튼,사진,오디오,영상)
user_name = received_json['user_key']   #사용자마다의 고유번호

위처럼 사용자에게서 받은 정보를 이용할 수 있습니다.

참고! => type에는 text, photo, video, audio가 있습니다

아래 코드는 type_name을 이용한 예시입니다.

    else:
        mess = "이걸 보고계시다면 오류입니다, 개발자에게 알려주세요"
        if type_name == 'photo':
            mess = "사진은 기능이 없어요, 버튼을 눌러주세요!"
        elif type_name == 'video':
            mess = "영상은 기능이 없어요, 버튼을 눌러주세요!"
        elif type_name == 'audio':
            mess = "녹음파일은 기능이 없어요, 버튼을 눌러주세요!"

        return JsonResponse({
            'message': {
                'text': mess
            },
            'keyboard': {
                'type': 'buttons',
                'buttons': ['학식', '내일의 학식', '시간별 학식']
            }
        })



이번 튜토리얼에서 진행한 views.py 소스코드입니다.

from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json

def keyboard(request):

    return JsonResponse(
        {
            'type': 'buttons',
            'buttons': ['학식', '내일의 학식', '시간별 학식']
        }
    )

@csrf_exempt
def message(request):

    #button = ['학식', '내일의 학식', '시간별 학식']

    json_str = (request.body).decode('utf-8')
    received_json = json.loads(json_str)
    content_name = received_json['content']
    # user_name = received_json['user_key']
    type_name = received_json['type']

    if content_name == "학식":
        return JsonResponse(
            {
                'message': {
                    'text': '학식 버튼을 눌렀습니다.'
                },
                'keyboard': {
                    'type': 'buttons',
                    'buttons': ['학식', '내일의 학식', '시간별 학식']
                }
            }
        )
    elif content_name == "내일의 학식":
        return JsonResponse(
            {
                'message': {
                    'text': '내일의 학식  버튼을 눌렀습니다'
                },
                'keyboard': {
                    'type': 'buttons',
                    'buttons': ['학식', '내일의 학식', '시간별 학식']
                }
            }
        )
    elif content_name == '시간별 학식':
        return JsonResponse(
            {
                'message': {
                    'text': '시간별 학식을 눌렀습니다'
                },
                'keyboard': {
                    'type': 'buttons',
                    'buttons': ['학식', '내일의 학식', '시간별 학식']
                }
            }
        )
    else:
        mess = "이걸 보고계시다면 오류입니다, 개발자에게 알려주세요"
        if type_name == 'photo':
            mess = "사진은 기능이 없어요, 버튼을 눌러주세요!"
        elif type_name == 'video':
            mess = "영상은 기능이 없어요, 버튼을 눌러주세요!"
        elif type_name == 'audio':
            mess = "녹음파일은 기능이 없어요, 버튼을 눌러주세요!"

        return JsonResponse({
            'message': {
                'text': mess
            },
            'keyboard': {
                'type': 'buttons',
                'buttons': ['학식', '내일의 학식', '시간별 학식']
            }
        })

이것으로 Python 카카오톡 플러스친구 만들기의 API 사용 튜토리얼을 끝냅니다.

Google Cloud Platform을 이용해 Django서버를 작동시키는 방법
Crawler, Parser와 cron job에 대해 이어가겠습니다.


댓글