ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 서버리스 카카오톡 챗봇 만들기: 2. 날씨 엔티티 등록하기
    주제탐구/튜토리얼 2020. 7. 11. 14:48

    저번 글에서는 블록의 기본적인 구성 방법을 알아보고, sys.date를 기반으로 유저에게 날짜 정보를 받아보았다.

    그 결과 일기의 날짜까지는 받아볼 수 있었다.

     

    딱 여기까지!

    하지만 일기를 쓰기 위해서는 더 많은 정보들이 필요하다. 적어도 날씨, 제목, 내용 정도는 받을 수 있어야 한다.

    이 정보들을 받기 위해서 일기 쓰기 플로우의 남은 부분을 차근차근 만들어 볼 것이다.

    우선 날씨를 받는 것부터 시작하자.

     

    이때 날씨를 사용자 엔티티로 등록해 볼 것이다. 그 이유는 바로 뒤에 알아보고,

    우선은 저번 글에서 알아보았던 엔티티라는 개념에 대해서 추가 설명을 하고 넘어가자.

     

    날씨 입력받기

     

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

     

    라고 저번 글에서 언급했었다. 그리고 유저의 발화에서 날짜 정보를 뽑아내기 위해 시스템 엔티티를 사용했었다.

    그런데 오픈빌더로 만들 수 있는 챗봇의 도메인은 무척 다양해서, 시스템 엔티티가 그런 챗봇의 개별 니즈를 감당할 수가 없을 것이다.

    가령 조선 왕의 정보를 열람할 수 있는 챗봇을 만든다면...? 카카오가 조선 왕명도 엔티티로 준비해야 할까...?

     

    그런 것은 챗봇을 만드는 사람이 알아서 만드는 게 이치에 맞을 것이다.

    따라서 오픈빌더에서는 제작자가 직접 사용자 엔티티를 등록할 수 있는 기능을 제공한다.

     

    사용자 엔티티를 한번 만들면 우리가 필수 파라미터로 날짜를 받았던 것과 동일한 방식으로 활용할 수 있다.

    유저의 입력값을 미리 엔티티에 등록해 둔 값으로만 제한할 수 있고,

    만약 벗어나면 되묻기 질문을 통해 유효한 값을 받을 때까지 유저를 괴롭힐(?) 수 있다.

     

     

    그런데 딱 하나, 시스템 엔티티가 아닌 사용자 엔티티에서만 활용할 수 있는 기능이 하나 있다.

    바로 블록의 바로연결에 엔티티의 등록값을 나열하는 것!

    엔티티만 등록해 두면 이렇게 바로연결을 한 번에 구성할 수 있다. 일일이 입력하지 않아도 되어 상당히 편하다.

     

    이걸 하나하나 입력한다면 꽤 불편할 걸...?

     

    생각해 보면 날짜, 제목, 내용에 비해서 날씨는 나올 수 있는 입력값이 비교적 정해져 있다.

    물론 '흐렸다 맑아짐', '쨍쨍함' 같이 날씨를 입력하고 싶은 유저도 있을 수 있지만... 글 작성의 편의를 위해

    비교적 날씨의 범주는 정해져 있고, 유저들이 타이핑하는 것을 귀찮아한다는 가설을 세우고,

    바로연결만으로 날씨를 입력할 수 있도록 해 보자.

     

    우선 '날씨'라는 사용자 엔티티를 정의해야 한다.

    메뉴바 우측 상단의 엔티티 버튼을 눌러 엔티티 관리 화면을 띄우자.

     

    '나의 엔티티' 탭이 기본 활성화되어 있을 것이다.

    + 버튼을 눌러 엔티티를 추가하고, 엔티티 이름을 'weather'라고 해 보자.

    (엔티티 이름은 개발 편의상 영어로 해 주고 있지만... 백엔드에 전달되는 것도 아니어서 한글 이름도 상관없다)

     

    오픈빌더에서는 엔티티에 들어갈 수 있는 단어 하나하나를 엔트리라고 한다.

    가령 요일 엔티티에서는 월요일, 화요일, ..., 일요일 각각이 하나의 엔트리가 된다.

    날씨에 포함될 만한 단어들을 등록해 주자. 내 경우 아래 단어들을 순서대로 엔트리로 등록했다.

     

    천둥번개, 황사, 안개, 눈, 비, 흐림, 맑음

     

    만약 바로연결에 사용할 엔티티라면 의도하는 순서의 역순으로 등록해야 한다.

    즉 천둥번개, 황사, ..., 맑음 순으로 입력해야 바로연결에서는 맑음, 흐림, ... 천둥번개 순서로 보이게 된다.

     

    입력된 순서의 역순으로 등록된다.

    저장 버튼을 누르면 사용자 엔티티의 생성이 완료된다. 드디어!

    우리가 지금까지 만들었었던 블록으로 돌아오자.

     

    바로연결 버튼 설정을 눌러서 우리가 만들었던 '날씨' 엔티티로 바로연결을 생성하고,

    유저의 응답이 들어오면 또 다른 블록으로 넘겨주는 것이 계획이다.

     

    어 그런데 날짜 정보를 받았던 것처럼 필수 파라미터로 받으면 되지 않아? 굳이 블록을 나누는 이유가 있어?

     

    라고 물으신다면... 사실 필수 파라미터를 쓰는 방식으로도 충분히 날씨 정보를 받을 수 있다.

    다만 이 경우 날짜에서 그랬던 것처럼 되묻기 질문을 잘 활용해야 하는데,

    되묻기 질문의 바로연결은 엔티티로 한번에 생성할 수 있는 기능이 없다. 하나하나 입력해야 한다.

    확실히 쓰기 불편하다.

    따라서 날짜 정보와 동일한 방식으로 하지 않는 것이다.

     

    아무튼 다시 돌아오면! 텍스트 응답 바로 아래에 있는 바로연결 버튼 설정을 눌러주고,

    버튼 기능에서 엔티티 적용을 선택한 뒤, 아까 만든 날씨 엔티티를 골라준다.

    엔트리 목록에서 파랗게 칠해진 엔트리만 바로연결로 적용되며, 필요 없는 엔트리는 클릭하면 바로연결에서 제외시킬 수 있다.

     

     

    위와 같이 설정하고 확인 버튼을 누르면,

    이렇게 바로연결이 한번에 만들어진 것을 볼 수 있다.

    바로연결도 만들었으니만큼 드디어 날씨를 물어볼 수 있다. 텍스트 응답을 적절하게 변경해 주자.

     

    봇테스트를 통해 지금까지 구현한 것을 테스트해 보자.

    현재 날씨 바로연결이 나오고 있는 상태지만, 이 중 하나를 선택하게 되면 "모르겠어요"라는 메시지가 뜨는 상황이다.

    날씨 엔티티가 들어간 발화를 인식할 수 있는 블록을 만들어야 하기 때문이다.

     

    블록을 하나 추가하고 우선 '날씨 입력 완료'라고 이름을 짓자.

    (미리 얘기하자면 이 블록에서 제목과 내용도 물어보아야 하기 때문에 블록 이름을 바꾸게 될 것이다.

    일단은 이해하기 쉽게 이름을 지어두자.)

     

    그런 뒤 블록이 받아야 하는 발화를 입력해 보자. 우선 '맑음'이라고 입력한다.

     

    그러면 '맑음'에 밑줄이 그어지는 것을 볼 수 있다. 카카오i 오픈빌더에서는 이렇게 예상되는 발화를 입력했을 때,

    발화에서 엔티티를 쉽게 태깅할 수 있도록 밑줄을 그어준다. 밑줄 그어진 부분을 드래그해 보자.

    그러면 아까 우리가 등록했던 엔티티가 추천 엔티티로 등장한다.

    이 엔티티를 클릭하면 오픈빌더는 태깅과 동시에 해당 엔티티를 받는 일반 파라미터를 추가해 준다.

    이때 파라미터명은 엔티티 이름을 복사해 온다. 엔티티명을 영어로 짓는 게 좋은 이유다.

    더 좋은 것은 엔티티가 이미 구성되어 있기 때문에, '흐림', '비' 같은 발화들은 입력하지 않아도 패턴 매칭이 된다는 것이다.

    따라서 날씨 발화를 받기 위한 준비는 이제 끝났다! 테스트용 응답을 입력해 놓자.

     

    그것이 약속이니까

    봇테스트에서 테스트해 보면, 이제 날씨 응답이 처리 가능한 것을 확인할 수 있다.

    생각보다 글이 길어졌다. 항상 길어지는 것 같다. 😂

    한 템포 쉬고, 제목과 내용을 입력받는 방법은 다음 글에서 다뤄보려고 한다.

Designed by Tistory.