본문 바로가기
  • True knowledge exists in knowing that you know nothing. -Socrates-
개발

세종대 카카오 봇 (옐로우 아이디) Sejongbot

by intadd 2017. 9. 13.


안녕하세요 : )



오늘은 카카오 옐로우 아이디 자동응답 api를 활용하여 개발한 카카오봇 소개를 할까 합니다.


개발 환경은 ubuntu16.04, Django(python)으로 개발했습니다.



kakao Yellow ID : Sejongbot




1. 카카오 옐로우 아이디 만들기 

https://yellowid.kakao.com/

이 링크를 통해 들어가면 쉽게 만들 수 있습니다.


카카오 옐로우 아이디를 만든 후 관리자 페이지를 들어가면 




이런 화면으로 들어갈 수 있습니다.





스마트채팅 > API형 선택 후 설정 하시면 됩니다. (구글 검색해 보시면 쉽게 하실 수 있습니다.)



이렇게 진행해서 제 서버와 연동 시켰습니다.



자동 api 동작 방식



1. 사용자가 옐로우 아이디의 방으로 접속 함 


그러면 카카오톡 측에서 내 서버 http://xxx.xx.xx.xxx/keyboard 경로로 이동함.



2. 내 서버에서 (keyboard) URL에서 응답을 날려줌

keyboard는 말 대로 사용자가 입력할 폼을 얘기 합니다.

text형과 button 형이 있는 것으로 알고 있습니다.


1. urlpatterns 를 이용하여 keyboard로 접속시 views.keyboard 함수로 연결시킨다. (Django)



2. views.keyboard 함수



위와 같이 형식으로 사용자의 입력 폼은 text 로 정의해 줍니다. 

(text는 키보드(타자) 폼 입니다.)




이렇게 화면에 보여지게 됩니다.



3. 사용자가 메시지를 보낸다.


사용자가 메시지를 보내면 


http://xxx.xx.xx.xx/message 의 URL에 접속하여 응답을 기다립니다.



그러면 위와 같이 message 경로일 때를 만듭니다.  views.message 함수로 이동시킵니다.


views.meesage 함수입니다.



저는 입력 받은 값에서 특정 단어를 검색해서  

return JsonResponse 를 통해 응답했습니다.


'message' 의 경우 'text' 에 포함된 문장을 전송합니다.

단순 메시지만 보낼 수 있고, 

'keyboard'로 입력 폼을 'buttons' 로 변경하여 전송합니다.


(@csrf_exempt는 Django에서 post 값으로 데이터를 전송 할 때 오류를 방지해줍니다. 

카카오톡에서 message를 내 서버로 전송할 때 데이터를 post값으로 전송하기 때문에 사용했습니다.)





그러면 위와 같이 keyboard 형식이 text 에서 button으로 변경됩니다.


사용자가 버튼을 클릭하면 학생회관, 군자관, 우정당 중 하나가 message 형태로 다시 전달 됩니다.

그러면 그 message에서 단어를 검사해서 파씽한 데이터를 전송합니다.


return JsonResponse를 통해 return_str에 저장된 데이터를 text 형식으로 전송 , 후에 keyboard type으로는 타자형식으로 전송 



그럼 이런식의 대화가 됩니다.


이미지 전송도 가능한데요, 이런식으로 사용합니다.


응답으로는 아래와 같습니다. 





이런식으로 간단한 옐로우 아이디 카톡 봇을 만들어 봤습니다.


간단한 날씨 (다음에서 파씽해 왔습니다.)




후기:

엄청 쉽고 간단하게 만들 수 있다.

python 파씽, Django 입문 공부 정도로 하면 좋을 것 같다.

날씨 파씽은 다음이 좋은 것 같다.


짜증났던 것:

gcp 사용했는데 포트 연결 때문에 시간이 좀 걸렸습니다. ㅠ

어쩔 수 없이 django port를 80 으로 맞췄습니다 ㅠ


명령어

$python manage.py runserver 0.0.0.0:80 &



학교 급식 싸이트 파씽하는데 문자열이 공백 탭 등등 섞여 있어서 

보기 좋게 정렬하는데 고생함 - (쉽게 하는 법 ? 다음 글로 쓸 예정)




댓글