본문 바로가기
Backend 🧦

[Spring, KakaoChatbot] 눈물의 챗봇 스킬테스트😭

by 서니서닝 2023. 7. 28.
728x90

스프링 백엔드를 공부하고자 스터디를 만들었는데, 프론트엔드의 부재(...)로 카카오 채널 챗봇을 선택하게 됐다.

카카오 비즈니스를 통해 채널을 만들고 챗봇을 열어서.... 더보기

 

장난이고 채널과 챗봇 신청까지는 요기에! 나는 스프링을 활용한 스킬테스트쪽에 대하여 작성해보려고 한다.

사실 카카오쪽에서 상세하게 설명을 해놓으셨는데, 아무래도 생소한 단어들이라 단박에 알긴 어려웠다. 나같은 사람에게 이 글을 바칩니다.

 

배우는 과정이라 잘못된 내용이 있을 수도 있으니 지적은 환영합니다😎

 

블록과 스킬

먼저 스킬을 알려면 블록을 알아야한다.

챗봇에서 사용자가 먼저 말을 거는 것을 발화입력이라고 한다.

아래의 예시와 같이 '아이유 노래 틀어줘'라고 요청을 하는 것이 발화 입력이다.

 

그러면 챗봇은 이 발화입력을 바탕으로 동작을 해주어야하는데, 이 api로 연결해주는 것이 스킬이다.

이 스킬은 출력으로 사용이 가능하다.

 

블록은 발화입력, 동작, 스킬, 출력 이 한 덩어리를 전부 통틀어 의미한다.

 

즉, 블록에 종속되어 사용자에게 응답을 돌려주는 기능을 스킬이라고 한다.

https://i.kakao.com/docs/key-concepts-block

 

스킬 생성

이제 스킬을 어떻게 사용하는지 알아보겠다.

스킬을 생성을 하게 되면 위와 같은 화면이 나오는데, * 가 붙은 부분만 필수로 작성하면 된다.

이 스킬을 처리하는 서버를 생성하여 해당 url을 넣어준다. (당연히 로컬서버는 안된다. 우리는 오라클을 이용하여 서버를 열었다.)

그 외에는 평소 포스트맨을 사용하듯 헤더값과 파라미터 값을 넣어주면 된다.

 

컨트롤러를 작성하기 전, 응답형식에 대하여 간략하게 설명하겠다.

 

SimpleText 형식(응답 형식)

카카오 챗봇은 response형식이 정해져있다.

깃허브나 구글링을 통해 찾은 챗봇 프로젝트들은 대부분 2018년 코드였는데, 그때 프로젝트를 클론해서 돌리면 돌아가지 않았다.

아마 그 사이에 뭔가 형식이 바뀐 것 같다(뇌피셜임)

 

처음에 저 형식이 필수인지 몰라서 한참을 고생했다.. ㅠ_ㅠ

사실 그런분이 없길 바라며 시작한 포스팅..

일단 단순히 테스트를 위한 것이기 때문에 응답형식은 simpletext로 정했다.

 

심플테스트의 응답예제는 위와 같다.

그외의 다양한 응답 형식이 궁금하다면, 여기서 참고하면 된다!

 

https://i.kakao.com/docs/skill-response-format#%ED%95%84%EB%93%9C-%EB%B0%8F-%EC%98%88%EC%A0%9C

응답형식이 simpletext가 아니여도 위의 상세필드 내용은 필수로 들어간다.

version, template이 return값에 필수적으로 필요하다.

 

version

스킬 응답의 version을 나타낸다.

<major-version><minor version>의 모습을 갖는다. 따라서 2.0, 2.1, 3.0 같은 모습을 갖는다.

버전 구성

만약 version이 없다면 구 버전의 응답으로 간주하기 때문에, 항상 version을 포함해야 한다.

(버전은 배포할 때 정해지는 것 같다. 위에서는 임의로 다른 버전을 줬었는데, 아마 향후 시나리오(블록)쪽에서 스킬데이터와 연결하게 될 경우 버전이 다르면 문제가 생길 것 같다.)

 

Template

스킬 응답의 출력 모양을 담고 있는 항목으로 출력으로 사용할 요소 그룹, 바로가기 그룹 등을 포함한다.

 

템플릿을 포함한 다른 요소들은 아직 사용해본적이 없기 때문에 향후 스킬 작성에 익숙해짐 + 시간이 있음 이라면 포스팅해보도록 하겠다.

궁금한 사람들은 요기에 공식문서를 참고하면 될 것 같다!

 

 

작성한 코드

테스트를 위해 작성한 Controller예시 코드
plzDto 예시코드

처음에 단순 테스트를 해보려고 GET을 사용하였으나, 스킬은 무조건 POST형식만 가능하다는 것을 잊지말자..!!

api를 짜는 것에 대해서는 이번 포스팅의 주 내용이 아니니 생략하겠다.

 

단순히 테스트만 원했기 때문에 코드에 비효율적인 부분이 있어도 감안하고 봐주길 바랍니다..

Map이 굉장히 많은 것은 위에서 언급한 응답코드 모양을 그대로 구현하기 위해서였다. 그렇게 해야만 오류가 안나거든요 ㅠ_ㅠ

 

 

스킬 테스트

아무튼 컨트롤러 단에서 작성한 내용을 바탕으로 스킬 테스트를 진행해보겠다.

헤더와 파라미터에 각각 값을 입력해준다. 참고로 왼쪽을 입력하면 오른쪽에 JSON파일이 알아서 작성된다. 이 내용을 바탕으로 스킬서버로 전송을 눌러보면,

 

올바르게 값이 받아와지는 것을 알 수 있다!

다음에 봐요 😆🖐️

728x90

댓글