ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 서버리스 카카오톡 챗봇 만들기: 1. 오픈빌더 시작하기
    주제탐구/튜토리얼 2020. 7. 3. 23:51

    이번 글+다음 글에서는 백엔드 없이, 아주 기초적인 카카오톡 챗봇을 하나 만들고,

    이 챗봇을 개발 채널과 연결시켜 휴대폰의 카카오톡으로 동작을 확인해 볼 것이다.

     

    대충 이런 느낌의 프로토타입을 만들 수 있을 것이다.

     

     

    날짜, 날씨, 제목, 그리고 내용을 입력하면서 대화형으로 일기를 작성할 수 있다.

    (실제로 데이터를 저장하고, 조회하는 동작은 백엔드가 필요하다. 다다음 글에서 다룰 예정이다.)

     

    특히 날짜 부분은 4일 전, 크리스마스, 글피, 7월 13일 등 다양한 입력을 적당히 알아 듣는 똑똑함을 보여준다.

    카카오i 오픈빌더가 기본 제공하는 엔티티를 통해 별다른 노력 없이도 이런 똑똑함을 장착하고 나갈 수 있다.

    엔티티가 무엇인지는 조금 있다가 살펴보도록 하자.

     

    카카오i 오픈빌더 써보기

     

    우선은 이전 글을 참고해서 카카오i 오픈빌더 계정을 신청했어야 한다!

    이전 글에서 말했듯 승인에는 약 2~3일 정도의 시간이 걸릴 수 있다.

    별다른 문제가 없다면 입력했던 이메일 주소를 통해 아래와 같은 메일을 받아볼 수 있을 것이다.

     

     

    드디어 카카오톡 챗봇을 만들 수 있는 것이다.

    버튼를 눌러 오픈빌더로 들어가 보자.

     

    처음 접속하는 경우 스크린샷과 달리 봇이 하나도 없을 것이다.

    + 버튼을 눌러 카카오톡 챗봇을 생성해 보자. 필요한 건 봇 이름 하나 뿐이다.

     

    적당히 봇 이름을 지어 주면 이런 화면을 볼 수 있다.

    여기서 새 블록 만들기를 눌러 챗봇 제작을 시작해 보자.

     

     

    첫 번째 블록 만들기

     

    챗봇은 유저의 메시지를 읽고, 말뜻을 이해한 뒤, 적절한 응답을 주는 동작을 반복한다.

     

    유저의 메시지에 적절한 응답을 준다

    카카오i에서는 이 일련의 동작을 정의하는 최소 단위가 블록이 된다.

    유저가 어떤 말을 하면, 거기에서 무슨 정보를 뽑아내야 하고, 응답은 어떻게 줄 것이다~ 라는 동작을 블록에서 정의할 수 있다.

    이때 유저가 하는 말을 발화라고 하고, 뽑아내는 정보를 파라미터라고 한다. 응답은 응답이라고 한다.

     

    다시 카카오i 오픈빌더 화면을 보면, 사용자가 입력할 것 같은 발화를 입력하는 칸이 있다.

     

    우리는 지금부터 위 영상에서 봤던 일기 쓰기 플로우를 만들어 볼 예정이다.

    따라서 유저가 일기를 쓰고 싶을 때 할 것 같은 말을 여기에 입력해 주면 된다.

     

    지금은 개발 중이니까 간단하게 '일기 쓰기'라는 발화를 등록해 보자. 입력하고 엔터를 치면 발화를 등록할 수 있다.

     

    더불어 블록의 이름을 입력하지 않으면 저장이 되지 않으므로, 블록 이름을 적당히 입력해 주자.

    카카오i 오픈빌더는 수정사항이 자동 저장되지 않으므로, 수정 후 저장 버튼을 눌러주어야 한다.

     

    그리고 유저가 말을 했는데 챗봇을 응답없음 상태로 놔둘 수는 없다.

    적절한 응답을 입력해 주자. 제일 만만한 텍스트를 선택하고 적당한 응답을 입력한다.

    텍스트를 선택하고
    적당한 응답을 입력한다!

    저장하고 바로 봇테스트부터 해 보자. 우측 상단 바에서 봇테스트 버튼을 찾을 수 있다.

    (혹시라도 진도를 빨리 나가는 분이 있다면, 아직 개발 채널에 연동하지는 않는 것을 추천한다.

    웰컴 블록이 없기 때문이다. 이건 뒤에서 설명드리겠다!)

     

    봇테스트 클릭

    봇테스트를 누르면 이렇게 카톡 비슷한 화면이 나와서, 지금까지 제작한 챗봇의 시뮬레이션을 해볼 수 있다.

    '일기 쓰기'를 입력했을 때 이렇게 미리 입력한 응답이 돌아오면 성공이다.

    솔직히 여기까지만 와도 "아 이건 어떻게 쓰는 물건이구나"하고 알아채신 분들이 있을 거라고 생각한다.

    유저-챗봇 간의 스몰톡은 딱 이 정도의 노력만 들이면 만들어 낼 수 있다.

     

    하지만 일기를 작성하는 것은 스몰톡이 아니다. 지정된 말만 인식해서 응답을 돌려주고 마는 것이 아니라,

    오늘, 어제 같은 구체적인 날짜를 유저의 발화에서 뽑아내고, 그것을 별도로 저장해야 한다.

     

    조금 전에 유저의 발화에서 뽑아내는 정보를 파라미터라고 했었다.

    즉 정보를 뽑아내기 위해서는 파라미터를 정의할 필요가 있다. 날짜 파라미터를 추가해 보자.

     

     

    날짜 입력받기

     

    블록 화면의 중앙을 보면 파라미터 설정이 있을 것이다. 여기서 파라미터를 추가/수정/삭제할 수 있다.

    그런데 파라미터의 종류가 두 가지가 있다.

     

    일반 파라미터와 필수 파라미터

    일반 파라미터는 유저가 입력하지 않으면 그 값을 빈 상태로 남겨두지만,

    필수 파라미터는 유저가 입력하지 않으면 제대로 입력할 때까지 되묻는다. 그러다 지정된 횟수가 넘으면 챗봇은 대화를 끝내 버린다.

    해당 값은 그야말로 필수적이기 때문에 없으면, 대화를 더는 이어갈 수 없기 때문이다.

     

    살면서 날짜 없는 일기는 본 적이 없다. 날짜는 일기에서 필수 파라미터일 것이다.

    필수 파라미터 오른쪽 위의 +버튼을 눌러 보자.

     

    대충 이런 화면을 만날 수 있을 것이다. 파라미터명을 적당히 입력해 준다.

    파라미터명은 추후 백엔드에서 필드명으로 그대로 쓰이기 때문에, 변수명 짓듯 영어로 입력해 주면 좋을 것이다.

     

    그런데 엔티티라는 것을 골라야 한다. 엔티티는 또 뭘까?

    카카오i 오픈빌더의 도움말을 보면...

     

    엔티티(Entity)는 봇이 이해할 수 있는 용어를 체계적으로 정리한 데이터 사전입니다.

     

    라고 나와 있다. 즉 유저의 발화 중에서 봇이 이해할 필요가 있는 단어들을 하나의 범주로 묶어둔 것이다.

     

    가령 봇이 유저의 발화에서 요일 정보를 뽑아내야 한다면,

    월요일, 화요일, 수요일, 목요일, 금요일, 토요일, 일요일 7개의 단어를 day_of_week라는 엔티티로 정의할 수 있다.

    이렇게 엔티티를 정의하고 유저의 발화에서 엔티티로 인식될 만한 부분을 태깅해 두면,

    '화요일 일기 쓸래'라는 말이 들어왔을 때 '화요일'이라는 값을 백엔드에서 day_of_week라는 필드명으로 받아볼 수 있는 것이다.

    (엔티티 태깅은 다음 글에서 해볼 예정이다)

     

    그런데 날짜 정보는 단어가 한두 가지도 아니고, 유저가 설 추석 글피 어제 모레 7월1일 이틀전....

    하나하나 챙겨서 만들어야 하면 생산성이 너무 떨어질 것이다.

    그래서 카카오i 오픈빌더에는 시스템 엔티티라는 것이 내장되어 있고, 위 스크린샷에 보이는 sys.date가 그 중 하나다.

     

    이런 시스템 엔티티를 적절하게 활용하면 똑똑함을 내장하고 갈 수 있고, 후에 다시 말하겠지만 백엔드를 개발하는 데에도 무척 유용하다.

    따라서 카카오톡 챗봇을 진지하게 만들어야 한다면 시스템 엔티티 목록은 한 번쯤 훑어두면 좋을 것이다.

     

    무튼 엔티티로 sys.date를 선택하고 확인 버튼을 눌러주자.

     

    그러면 이렇게 되묻기 질문을 입력하라고 버튼이 빨갛게 변한 것을 볼 수 있다.

    되묻기 질문은 별 거 없다. 유저가 필수 파라미터의 값을 입력하지 않았을 때 입력할 때까지 챗봇이 되묻는 질문이다!

     

    그러고 보니 우리가 블록에 입력했던 발화는 '일기 쓰기'일 뿐, 별다른 날짜 값이 발화에 들어가 있지 않다.

    따라서 일기 쓰기를 시작하면 바로 이 되묻기 질문을 만나게 될 것이다. 친절한 느낌으로 작성해 주자.

    그리고 일일히 날짜를 키보드로 입력하는 건 귀찮으니까 자주 쓸 것 같은 응답은 버튼식으로 제공하면 좋을 것이다.

    이런 버튼식 응답을 카카오i에서는 바로연결이라고 한다. 바로연결도 몇 개 넣어두자.

     

    음 이 정도면 친절해

    확인 버튼을 누르고, 날짜값이 잘 들어왔는지 확인하기 위해 텍스트 응답을 조금 변형해 보자.

    @+파라미터명을 입력해서 파라미터값을 응답에 그대로 출력할 수 있다.

    혹은 파라미터 추가 버튼을 눌러서 해당 파라미터를 선택해도 된다.

    날씨는 다음 글에서 물어볼게요,,,

    저장하고 봇 테스트를 해 보자! 참고로 봇 테스트에서는 바로연결 버튼을 눌러도 동작하지 않는다. (2020년 7월 3일 현재)

    따라서 원하는 값을 직접 키보드로 입력해야 한다.

     

    성공!

    좌측 정보 패널을 보면 $date의 값으로 오늘이 잘 들어온 것을 볼 수 있다.

     

    이렇게 블록을 만들고, 발화와 응답을 입력하고, 파라미터를 정의하는 기초적인 카카오톡 챗봇 제작을 다룰 수 있었다!

    생각보다 길어졌다...!

     

    혹시 따라하셨나요? 자기 자신을 자랑스러워하십시오!

     

    다음 글에서는 일기 작성 플로우를 완성하기 위한 조금 더 심화된 내용을 다뤄보고자 한다.

    가령 일기를 작성할 때는 날씨를 파라미터로 입력받아야 하는데, 시스템 엔티티에는 날씨가 없다.

    그렇다고 '베이컨' '호롤롤로' 같은 아무말을 날씨 값으로 받을 수는 없다.

    직접 날씨 엔티티를 정의하는 방법이 있을까?

     

    사용자 엔티티를 정의하는 방법은 다음 글에서!

     

    그리고 일기의 제목이나 내용은 유저가 입력한 말을 그대로 파라미터로 받아야 하는데...

    유저의 입력은 비정형이다. 어떤 엔티티를 써야 제목과 내용을 파라미터로 받을 수 있을까?

     

    유저의 입력을 그대로 받을 수 있는 특별한 시스템 엔티티가 있다.

    다음 글에서 이 문제들을 풀어가면서, 챗봇의 뼈대를 완성하고, 직접 카카오톡으로 챗봇을 테스트해 보려고 한다.

Designed by Tistory.