※주의 : 이 글은 자바 및 스프링에대해 지식이 있는 사람이어야 합니다.※
카카오톡은 자동응답 기능 구현을 위해 Rest API를 지원해주고 있다.
거두절미하고 카카오톡 플러스 친구부터 가입을 해보자.
https://center-pf.kakao.com/
카카오톡플친 가입절차는 쉬움으로 생략하겠다.
카카오톡의 Rest API는 크게
1. Home Keyboard API
2. 메시지 수신 및 자동응답 API
3. 친구 추가/차단 알림 API
4. 채팅방 나가기 API
총 4가지가있는데 이번 포스팅에서는
1. Home Keyboard API(이하 Home API)
2. 메시지 수신 및 자동응답 API
이 두가지를 다뤄 볼 예정이다.
우선 Home API을 알아보자.
1. Home API
말그대로 채팅창에 처음들어왔을 때 처음 나오는 메시지를 어떻게 할 건지 정하는 것이다.
뒤에서 설명하겠지만 카카오톡에서는 운영서버의 작동유무를 이 Home API로 판단한다.
공식문서에서는 Home API를 아래와 같이 설명한다.
- 이용자가 최초로 채팅방에 들어올 때 기본으로 키보드 영역에 표시될 자동응답 명령어의 목록을 호출하는 API입니다.
- 챗팅방을 지우고 다시 재 진입시에도 호출됩니다. 다만 카카오 서버에서도 1분동안 캐쉬가 저장되기 때문에 유저가 채팅방을 지우고 들어오는 행동을 반복하더라도 개발사 서버를 1분에 한번씩 호출하게 됩니다. 즉, 개발사 서버에서 정보가 변경되어도 최대 1분뒤에 유저들에게 반영이 됩니다.
- 유저가 자동응답으로 메시지를 주고 받았을 경우는 마지막 메시지에 담겨있던 자동응답 명령어 목록이 표시됩니다. 다만 메시지에 저장된 자동응답 명령어는 10분간 유효합니다. 10분이 지난 다음에는 다시 keyboard api를 호출하여 자동응답 목록을 초기화하게 됩니다.
Specification
- Method : GET
- URL : http(s)://:your_server_url/keyboard
- Content-Type : application/json; charset=utf-8
Response
{
"type" : "buttons",
"buttons" : ["선택 1", "선택 2", "선택 3"]
}
Response의 type 은 text와 button 총 2가지이다.
text의 경우는 일반채팅창과 같이 채팅을 입력할수있는 화면이고
Burron은 버튼으로 메뉴를 선택할수있는 화면이다.
(버튼형으로 만들 때의 예제 이미지)
이번예제는 Button형으로 구현해보고자 한다. 우선 ButtonVO를 생성해보자
ButtonVO
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | public class ButtonVO{ private String type; private String[] buttons; public ButtonVO(String[] buttons) { this.type = "buttons"; this.buttons = buttons; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String[] getButtons() { return buttons; } public void setButtons(String[] buttons) { this.buttons = buttons; } @Override public String toString() { return "[type=" + type + ", buttons=" + Arrays.toString(buttons) + "]"; } } | cs |
이제 컨트롤러를 생성해보자
컨트롤러를 생성한 뒤
어노테이션은 @RestContoller로 지정해주자
(스프링 4.0.x 이상부터는 @Controller + @ResponseBody 를 @RestController로 대체할 수 있다.)
BotController
1 2 3 4 5 6 7 8 9 | @RestController public class BotController{ @RequestMapping(value = "/keyboard", method = RequestMethod.GET) public ButtonVO keyboard() throws Exception{ return new ButtonVO(new String[] {"번역", "길찾기", "오늘의 날씨"}); } } | cs |
결과화면