Technique

카카오톡 플러스친구를 이용한 email 간편 전송 서비스 만들기(feat, DJANGO, groomide) 4

JAY-GO 2018. 9. 9. 14:50
반응형

 이전 포스팅에서 플러스친구와 goormide에 동작중인 django 서비스 간 통신이 가능함을 확인 하였습니다. 하지만 아직 플러스친구 API와 연동하여 유의미한 동작을 보지는 못하였습니다.


 이제 django 서비스를 플러스친구 API에 맞게 작성하여 전송한 메시지가 정상적으로 전송 되어 django 서비스에 도달 하였는지를 확인할 수 있는 간단한 서비스를 만들어보겠습니다.

 이번 포스팅에서 만들고자 하는 서비스는 아래와 같습니다.


 사용자가 플러스친구 채팅방을 통하여 메시지를 전송하면, django 서비스에서 이를 수신하여 user_key와 함께 그대로 사용자의 채팅방에 전송한다.


 이를 통하여 플러스친구 API의 외부 서버로의 message 전달 및 서버에서의 호출 처리 및 응답을 알아볼 수 있습니다. 


1. 플러스친구 message API 스팩 확인

 플러스친구 API Document를 통해 확인 할 수 있으며 중요 사항은 아래와 같습니다.


 - POST, jsno, utf-8 형식의 호출

 - parameter : user_key, type, content

 - Respone 형식(Document 참조)


2. Message API에 대응하는 view 및 url 구성

플러스친구 API를 통해 호출되는 /message url에서 동작하는 view를 만듭니다.


<sendemail/views.py>

import json
from django.shortcuts import render
from django.http import JsonResponse
from django.contrib.auth import get_user_model
from django.views.decorators.csrf import csrf_exempt

# Create your views here.

User = get_user_model()


def keyboard(request):
return JsonResponse(
{
"type": "text"
}
)


@csrf_exempt
def message(request):
if request.method == 'POST':
load_json = json.loads(request.body.decode('utf8'))
else:
load_json = {}
user_key = load_json.get('user_key')
if user_key:
try:
django_user = User.objects.get(username=user_key)
except User.DoesNotExist:
django_user = User.objects.create_user(username=user_key)

message_type = load_json['type']
content = load_json['content']

if message_type == 'text':
response_msg = {
"message": {
"text": django_user.username + "님의 메시지 입니다.\n\n" + content
}
}
elif message_type == 'photo':
response_msg = {
"message": {
"text": django_user.username + "님의 사진 입니다.\n\n",
"photo": {
"url": content,
"width": 720,
"height": 630
}
}
}
else:
response_msg = {}

return JsonResponse(response_msg)

 - json/utf-8 형식으로 parameter 들을 포함하여 호출됨으로 이를 추출하여 활용 합니다. 

 - user_key의 경우 채팅을 개시한 사용자를 구분하기 위하여 사용되며, 사용자를 구분하기 위하여 django user 모델에 저장 하였습니다. API Document에 따르면 각 프로필은 고유한 user_key를 가짐으로 추후 서비스 확장시에 해당 사용자의 데이터를 구분하는데 사용될 수 있습니다. 개인정보는 아니나 일종의 식별 정보로 외부로 유출되어서는 안됩니다.

 - 요청된 메시지의 형식에 따라 text/photo로 구분하여 json 형식으로 응답 합니다.


<myserver/urls.py>

from django.contrib import admin
from django.urls import path
from sendemail import views

urlpatterns = [
path('admin/', admin.site.urls),
path('keyboard', views.keyboard),
path('message', views.message),
]

 - 메시지 API가 호출하는 url을 추가 해줍니다.


<migrations>

python3 manage.py makemigrations
python3 manage.py migrate

 - django user 모델을 사용해야 함으로 db에 migration 합니다. 이를 하지 않으면 db에는 아무런 모델도 없기 때문에 user를 호출할 수 없어 에러가 발생합니다.


3. 서버 구동 및 동작 확인

python3 manage.py runserver 0.0.0.0:80 

 goormide 콘솔에 테스트서버를 동작시키고 서버를 구동하여 플러스 친구의 동작을 확인 해 봅니다.

의도한대로 보낸 메시지가 user_key를 포함하여 자동응답 되는것을 확인할 수 있습니다. 이제 스마트채팅을 이용하여 사용자와 django 서비스 간에 상호작용이 가능함을 보았습니다. 이제 view에 원하는 동작들을 추가하여 자신이 원하는 서비스가 가능하다는 것을 인지 하셨으리라 생각합니다.


 다음 포스팅에서는 플러스 친구를 통해 전송된 메시지들을 gmail SMTP 서비스를 이용해 django에 등록된 email 주소로 전송해 보도록 하겠습니다. 


반응형