본문 바로가기
Back-end

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

by 노아론 2017. 12. 25.

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

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

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


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

저번 내용

플러스친구 관리자센터에 연결해 keyboard함수 동작 확인해보기!
message함수를 써보자!

이번에 할 내용

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


버튼별 응답메세지를 다르게 설정해보자

저번 목차에서는 message함수를 통해 사용자가 버튼을 누를 때 응답하는 것을 만들었습니다.
하지만 모든 버튼에서 동일한 메세지가 나왔는데요

이번에는 사용자가 누른 메세지마다 다른 응답을 하도록 만들어보겠습니다.

app/views.py을 열어주세요.

from django.shortcuts import render
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt

def keyboard(request):

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

@csrf_exempt
def message(request):

    return JsonResponse(
        {
            'message': {
                    'text': 'Input the sentence that you want.'
            },
            'keyboard': {
                'type': 'buttons',
                'buttons': ['학식', '내일의 학식', '시간별 학식']
            }
        }
    )

(저번 튜토리얼까지 잘 따라오셨다면 app/views.py에는 이렇게 적혀있을겁니다)

이번에는 message함수만 다룰 것입니다.

def message(request):라고 되어있는데 우리는 request라는 파라미터(매개변수) 안에 담긴 정보를 꺼내야 합니다.

먼저 app/views.py를 열어 아래와 같이json모듈을 추가하고 message함수를 적어주세요

from django.shortcuts import render
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):

    json_str = (request.body).decode('utf-8')
    received_json = json.loads(json_str) # JSON파일 디코딩
    content_name = received_json['content']

    return JsonResponse(
        {
            'message': {
                    'text': 'Input the sentence that you want.'
            },
            'keyboard': {
                'type': 'buttons',
                'buttons': ['학식', '내일의 학식', '시간별 학식']
            }
        }
    )

json_str = (request.body).decode('utf-8') 는 request 파라미터를 한글호환이 되는 ‘utf-8’로 바꾸어 json_str변수에 저장합니다.

received_json = json.load(json_str)은 JSON문자열로 되어있는 것을 Python 타입으로 변경시켜 received_json변수에 저장합니다.

content_name = received_json['content']은 사용자가 보낸 명령어에서 필드명이 content인 항목을 변수에 저장합니다. 이를 통해서 버튼값을 구별할 수 있습니다.

request 타입 소개


필드명 타입 필수여부 설명
user_key String Required 메세지를 발송한 유저 식별키
type String Required text, photo
content String Required 자동응답 명령어의 텍스트 혹은 미디어 파일 uri



필드명 

타입 

필수여부 

설명 

user_key 

String 

Required 

메세지를 발송한 유저 식별키 

type 

String 

Required 

text, photo 

content 

String 

Required 

자동응답 명령어의 텍스트 혹은 미디어 파일 uri 


그럼 content_name 변수를 이용해서 버튼별 메세지가 다르게 나오도록 해보겠습니다.

from django.shortcuts import render
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': ['학식', '내일의 학식', '시간별 학식']
                }
            }
        )

위의 코드처럼 content_name == '버튼이름' 가 성립한 조건의 내용을 리턴하게 됩니다.

이렇게뜸

이렇게 뜸을 확인할 수 있습니다!



시간별 학식을 눌렀습니다.
학식을 눌렀습니다.
내일의 학식을 눌렀습니다.

만일 이와 같이 버튼의 내용만 바뀌고 OO을 눌렀습니다가 출력되는경우에는
content_name변수를 바로 JSON 리턴값에 넣어주면 됩니다.
(if문을 안쓰며 불필요한 중복코드를 제거할 수 있습니다)

예제를 보겠습니다

from django.shortcuts import render
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']

    return JsonResponse(
        {
            'message': {
                'text': content_name + '을 눌렀습니다.'  #이 부분
            },
            'keyboard': {
                'type': 'buttons',
                'buttons': ['학식', '내일의 학식', '시간별 학식']
            }
        }
    )

'text': content_name + '을 눌렀습니다.'와 같이 사용할 수 있습니다.



카카오톡 플러스친구 챗봇(자동API)에 대한 기본적인 내용은 어느정도 마쳤습니다.
다음 튜토리얼에서는 사용자가 사진, 음성, 동영상과 같은 파일을 보낼 때 일어나는 오류를 방지하고자
설정하는 방법을 알려드리겠습니다.

댓글