일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- HTTP
- html
- Linux
- cache
- Heap
- libuv
- git
- VCS
- github
- r
- mongodb
- Lombok
- Java
- effective
- AWS
- Static
- 네트워크
- nodejs
- spring
- ajax
- reactive
- redis
- NoSQL
- mybatis
- 데이터통신
- network
- reactor
- javascript
- Elk
- socket
- Today
- Total
빨간색코딩
스프링프레임워크로 카카오 챗봇 만들기 본문
스프링프레임워크로 카카오봇 만들기
참조문서: https://github.com/plusfriend/auto_reply
0. 들어가며
삼육대 카카오챗봇을 구현할 일이 생겼다. 구글링을 열심히 했지만 노드, 장고, php의 챗봇 개발이야기밖에 없었다.(심지어 스프링 부트도 못찾은ㅋㅋ) 다른 언어를 쓸 수도 있지만, 공부나 할겸 api문서만 보고 만들기로 결심했다.. 역시 삽질을 많이했고, 다른 개발자분들의 삽질시간 단축을 위해 소스를 공유한다. 그리고 ui없이 백엔드만으로 간단하게 개발할 수 있으며 재밌기때문에 많은 분들이 한번 자신의 서비스를 개발해보셨으면 한다.
해당 문서에서는 간단하게만 설명하며, 전체 소스는 github에 있다.
GITHUB: https://github.com/sjh836/Spring_KakaoBot_Sample
1. 개발환경
- Ubuntu 16.04 LTS
- Eclipse Mars.2 (STS플러그인)
- SpringFramework 4.3.3 (부트 아닙니다~~)
- Jackson2 2.7.2
2. Jackson2 pom.xml 추가
<!-- Jackson2 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.2</version>
</dependency>
3. Object
카카오톡 플러스친구/옐로아이디 API v. 2.0 에서는 Object로 Keyboard, Message, Photo, MessageButton을 구현해야 한다.
각각 *VO.java로 만들고, getter/setter를 만든다. KeyboardVO같은 경우, 버튼타입으로만 쓰이므로 생성자를 통해 간결하게 만들어준다.
4. 컨트롤러
스프링 4.0부터는 @RestController 어노테이션을 지원한다. 쉽게 생각하면 @Controller + @ResponseBody 이다. 따라서 @ResponseBody는 모든 메소드에서 생략해도 된다.
4-1. 키보드 구현
@RequestMapping(value = "/keyboard", method = RequestMethod.GET)
public KeyboardVO keyboard()
{
KeyboardVO keyboard=new KeyboardVO(new String[] {"사진", "라벨", "에코메세지"});
return keyboard;
}
스크린샷
4-2. 메세지 구현
상대방이 메세지를 보내면 그걸 받아와서 @RequestBody로 POJO에 매핑한다. 여기서는 RequestMessageVO.java로 작성했다.
public class RequestMessageVO
{
private String user_key;
private String type;
private String content;
//getter,setter()
}
컨트롤러.java에서는 vo.getContent()에 따라 여러 분기처리를 한다. 여기서는 '사진' 에 샘플사진을 출력하고, '라벨'에 링크를 첨부하였으며 이외 메세지는 전부 에코(되돌려줌)처리하였다.
본 소스에는 없지만, '사진'과 '라벨'을 함께 쓰는 응답메세지도 가능하다. 또한 특정 메세지는 키보드버튼을 연속적으로 호출할 수도 있다.(response에서 키보드 객체가 null이거나 type이 text일 때만 자유롭게 대화를 주고받을 수 있다.)
@RequestMapping(value = "/message", method = RequestMethod.POST)
public ResponseMessageVO message(@RequestBody RequestMessageVO vo)
{
ResponseMessageVO res_vo=new ResponseMessageVO();
MessageVO mes_vo=new MessageVO();
if(vo.getContent().equals("메인화면"))
{
mes_vo.setText("첫 화면을 호출합니다.");
KeyboardVO keyboard=new KeyboardVO(new String[] {"사진", "라벨", "에코메세지"});
res_vo.setKeyboard(keyboard);
}
else if(vo.getContent().equals("사진"))
{
PhotoVO photo=new PhotoVO();
photo.setUrl("http://placehold.it/640x480.jpg");
photo.setWidth(640);
photo.setHeight(480);
mes_vo.setPhoto(photo);
mes_vo.setText(vo.getContent());
}
else if(vo.getContent().equals("라벨"))
{
MessageButtonVO messageButton=new MessageButtonVO();
messageButton.setLabel("GITHUB");
messageButton.setUrl("https://github.com/sjh836/Spring_KakaoBot_Sample");
mes_vo.setMessage_button(messageButton);
mes_vo.setText("많은 피드백부탁드립니다! STAR는 개발자를 춤추게 만들어요!");
}
else //에코메시지
{
mes_vo.setText(vo.getContent());
}
res_vo.setMessage(mes_vo);
return res_vo;
}
스크린샷
5. 카카오 이모티콘 사용하기
카카오 챗봇에 이모티콘을 넣고 싶은 분들이 있을거다. 사용할 수 있으며, 단순히 (텍스트)가 끝이다. 다만 카카오톡 클라이언트에서 이걸 이모티콘으로 해석한다.
사용가능한 이모티콘은 다음과 같다. 사진과 일일히 매칭해서 제공하진 못했으나ㅠㅠ 순차적으로..
(하트뿅)(하하)(우와)(심각)(힘듦)(흑흑)(아잉)(찡긋)(뿌듯)(깜짝)(빠직)(짜증)(제발)(씨익)(신나)(헉)(열받아)(흥)(감동)(뽀뽀)(멘붕)(정색)(쑥스)(꺄아)(좋아)(굿)(훌쩍)(허걱)(부르르)(푸하하)(발그레)(수줍)(컴온)(졸려)(미소)(윙크)(방긋)(반함)(눈물)(절규)(크크)(메롱)(잘자)(잘난척)(헤롱)(놀람)(아픔)(당황)(풍선껌)(버럭)(부끄)(궁금)(흡족)(깜찍)(으으)(민망)(곤란)(잠)(행복)(안도)(우웩)(외계인)(외계인녀)(공포)(근심)(악마)(썩소)(쳇)(야호)(좌절)(삐침)(하트)(실연)(별)(브이)(오케이)(최고)(최악)(그만)(땀)(알약)(밥)(커피)(맥주)(소주)(와인)(치킨)(축하)(음표)(선물)(케이크)(촛불)(컵케이크a)(컵케이크b)(해)(구름)(비)(눈)(똥)(근조)(딸기)(호박)(입술)(야옹)(돈)(담배)(축구)(야구)(농구)(당구)(골프)(카톡)(꽃)(총)(크리스마스)(콜)
PS. 보통 카톡봇으로 급식메뉴나 버스스케줄을 크롤러로 긁어오는 서비스를 많이들 하는 것같다. java진영에서도 jsoup같은 걸로 파싱파싱재미를 볼 수 있다. 아니면 문제은행을 카톡봇으로 서비스할 수도 있겠다.
'Spring' 카테고리의 다른 글
freemarker (개념, jsp와 차이, 문법, spring과 연동 설정, 예제) (2) | 2018.01.09 |
---|---|
Mybatis와 spring 연동 (SqlSessionDaoSupport, SqlSessionTemplate) (1) | 2018.01.05 |
EHCache (ehcache-spring-annotations, ehcache.xml, @Cacheable) (0) | 2018.01.05 |
Mapper XML (엘리먼트, CDATA) (0) | 2018.01.03 |
mybatis Framework (마이바티스 개념, ibatis와 차이, 구조, api, SqlSession) (1) | 2018.01.03 |