django-rest-kakao-auto-reply
์นด์นด์คํก ํ๋ฌ์ค ์น๊ตฌ ์๋์๋ต API(์ดํ ์๋์๋ต API)๋ฅผ Django + DRF๋ก ๋ง๋ค ๋ ์ฝ๊ฒ ๋ง๋ค ์ ์๋๋ก ํด์ฃผ๋ ํจํค์ง์ ๋๋ค. ํจํค์ง์์ ์ ๊ณตํ๋ ViewSet๊ณผ Router, Decorator๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์๋์๋ต API๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด์ ํ๋ฌ์ค์น๊ตฌ๋ก ๋ฌด์์ ๋ง๋ค์ง์ ๋ํด์๋ง ์ง์คํ์ธ์.
Requirements
- Python >= 3.6
- Django >= 2
- djangorestframework
Quick Start
-
ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.
pip
๋ฅผ ์ฌ์ฉํด์ ๊ฐ๋จํ๊ฒ ์ค์นํ ์ ์์ต๋๋ค.(venv) $ pip install django-rest-kakao-auto-reply
-
KakaoAutoReplyViewSet
๋ฅผ ์์๋ฐ๋ ์๋ก์ด ViewSet์ ๋ง๋ญ๋๋ค. ์๋ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ธ์.from kakao_auto_reply import objects, decorators from kakao_auto_reply.viewsets import KakaoAutoReplyViewSet from rest_framework.response import Response class MyViewSet(KakaoAutoReplyViewSet): def on_keyboard(self, request, *args, **kwargs): data = objects.Keyboard(type='buttons', buttons=['foo', 'bar']) return Response(data, 200) @decorators.on_message_parse def on_message(self, request, *args, **kwargs): content = kwargs['content'] message = objects.Message(text='echo: %s' % content) keyboard = objects.Keyboard(type='text') data = objects.MessageResponse(message, keyboard) return Response(data, 200)
-
urls
์KakaoAutoReplyRouter
๋ฅผ ๊ฐ์ ธ์์ ์๋ก์ด ๋ผ์ฐํฐ๋ฅผ ์์ฑํ๊ณ , ์์์ ๋ง๋MyViewSet
์ ๋ฑ๋กํฉ๋๋ค.from django.urls import path, include from kakao_auto_reply.routers import KakaoAutoReplyRouter from .viewsets import MyViewSet router = KakaoAutoReplyRouter() router.register('', MyViewSet, base_name='foo') urlpatterns = [ path('kakaobot/', include(router.urls)), ]
-
๋.
Documentation
viewsets
KakaoAutoReplyViewSet
์นด์นด์คํก ํ๋ฌ์ค์น๊ตฌ ์๋์๋ต API ์์ ๊ตฌํํด์ผ ํ๋ ํจ์๋ฅผ ๋ฏธ๋ฆฌ ์ ๋ฆฌ ํด ๋ ViewSet ์ ๋๋ค. ํด๋น ViewSet ์ ์์๋ฐ์ ViewSet ์ ์๋ ๋ช ์๋ 5๊ฐ์ ๋ฉ์๋๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.
-
def on_keyboard(self, request, *args, **kwargs):
- Home Keyboard API์ ํด๋นํฉ๋๋ค.
-
def on_message(self, request, *args, **kwargs):
- ๋ฉ์์ง ์์ ๋ฐ ์๋์๋ต API์ ํด๋นํฉ๋๋ค.
@on_message_parse
๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- ๋ฉ์์ง ์์ ๋ฐ ์๋์๋ต API์ ํด๋นํฉ๋๋ค.
-
def on_friend_added(self, request, *args, **kwargs):
- ์น๊ตฌ ์ถ๊ฐ API์ ํด๋นํฉ๋๋ค.
@on_friend_added_parse
๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- ์น๊ตฌ ์ถ๊ฐ API์ ํด๋นํฉ๋๋ค.
-
def on_friend_deleted(self, request, *args, **kwargs):
- ์น๊ตฌ ์ฐจ๋จ API์ ํด๋นํฉ๋๋ค.
@on_friend_deleted_parse
๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- ์น๊ตฌ ์ฐจ๋จ API์ ํด๋นํฉ๋๋ค.
-
def on_chatroom_leaved(self, request, *args, **kwargs):
- ์ฑํ
๋ฐฉ ๋๊ฐ๊ธฐ API์ ํด๋นํฉ๋๋ค.
@on_chatroom_leaved_parse
๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- ์ฑํ
๋ฐฉ ๋๊ฐ๊ธฐ API์ ํด๋นํฉ๋๋ค.
decorators
@on_message_parse
- ๋ฉ์์ง ์์ ๋ฐ ์๋์๋ต API๊ฐ ํธ์ถ ๋ ๋ Request Body๋ก ์ ๋ฌ ๋
user_key
,type
,content
๋ฅผ ๊ฐ์ ธ์**kwargs
์ ์ ๋ฌํฉ๋๋ค.
@on_friend_added_parse
- ์น๊ตฌ ์ถ๊ฐ API๊ฐ ํธ์ถ ๋ ๋ Request Body๋ก ์ ๋ฌ ๋
user_key
๋ฅผ ๊ฐ์ ธ์**kwargs
์ ์ ๋ฌํฉ๋๋ค.
@on_friend_deleted_parse / @on_chatroom_leaved_parse
- ๊ฐ๊ฐ ์น๊ตฌ ์ฐจ๋จ/์ฑํ
๋ฐฉ ๋๊ฐ๊ธฐ API๊ฐ ํธ์ถ ๋ ๋ ์ฃผ์ Parameter๋ก ๋์ด์จ
user_key
๋ฅผ ๊ฐ์ ธ์**kwargs
์ ์ ๋ฌํฉ๋๋ค.
objects
์นด์นด์คํก ์๋์๋ต API ๊ตฌํ์ ํ์ํ Object๋ฅผ ์์ฑํ์ฌ ๋ฐํํ๋ ํจ์ ๋ชฉ๋ก์ ๋๋ค.
- MessageResponse
- parameter
- message (required)
- keyboard
- example
MessageResponse(message, keyboard) """:returns:""" { 'message': message, 'keyboard': keyboard, }
- parameter
- Keyboard
- parameter
- type (required)
- text
- buttons
- buttons
- type (required)
- example
Keyboard(type, buttons) """:returns:""" { 'type': type, 'buttons': buttons, }
- parameter
- Message
- parameter
- text
- photo
- message_button
- example
Message(text, photo, message_button) """:returns:""" { 'text': text, 'photo': photo, 'message_button': message_button, }
- parameter
- Photo
- parameter
- url (required)
- width (required)
- height (required)
- example
Photo(url, width, height) """:returns:""" { 'url': url, 'width': width, 'height': height, }
- parameter
- MessageButton
- parameter
- label (required)
- url (required)
- example
Photo(label, url) """:returns:""" { 'label': label, 'url': url, }
- parameter
routers
์๋์๋ต API ์คํ์ ๋ง๊ฒ ์์ฑ๋ ์ปค์คํ ๋ผ์ฐํฐ์ ๋๋ค.