IBM Watson을 이용한 회의실 예약 챗봇 서비스에 대해 소개해 드리겠습니다.

 

Conversation 서비스는 이미 개발 사례 관련 자료가 어느 정도 제공이 되어있어 블루믹스 가입과 Conversation 서비스 신청 같은 기본적인 설정 방법 및 Conversation 서비스에 대한 자세한 개념 등을 원하신다면 블루믹스에서 제공하는 문서를 참고하시기 바랍니다.

https://www.ibm.com/watson/developercloud/conversation/api/v1/?cm_mc_uid=09010138839914986140776&cm_mc_sid_50200000=1500598036

 

1. Conversation Dialog 설정하기

 

 

Conversation 서비스를 신청 후 Launch tool을 클릭하여 서비스를 실행합니다.

 

서비스를 실행 후 Workspace를 생성할 수 있습니다.

Create를 클릭하여 Name을 설정 후 Language를 Korean으로 선택합니다.

  • Korean으로 설정 시 Conversation에서 제공하는 System Entity(예: 날짜, 숫자, 시간 등)의 한국어 인식이 가능하게 됩니다.

 

2. Intent 및 Entity 설정하기

생성된 Workspace를 클릭하여 예약에 필요한 Intent 및 Entity를 추가합니다.

  • Intent : 사용자가 무엇을 원하는지에 대한 말의 의도
    Entity : Intent와 관련된 용어의 목적어

 

CSV로 미리 작성하여 Import하면 좀 더 다양하게 입력할 수 있습니다.

  • CSV로 Import 할 시 파일 형식을 UTF8로 설정해야 한글이 깨지지 않게 입력이 됩니다.

 

회의실 예약에 필요한 날짜와 시간에 대한 System Entity를 on으로 설정합니다. 사용하지 않는 System Entity는 되도록 off로 시켜두는 것이 좋습니다.

 

3. Dialog 설정하기

처음 생성 시 ‘환영인사’와 예외처리 기능을 하는 ‘기타’라는 node가 기본으로 생성됩니다.

예약에 필요한 인증 및 예약/취소/현황 관련 기능을 추가하기 위해 해당 이름으로 node를 생성합니다.

  • Dialog : 대화의 흐름. Intent와 Entity를 인식하여 조건에 따라 어떠한 응답을 도출하게 할 것인지를 정의

 

‘환영인사’ node는 사용자가 어떤 서비스를 이용할지에 대한 질의 문구로 시작합니다.
문구의 응답 부분은 response에 입력하며, 오른쪽 상단을 클릭하면 JSON으로 작성이 가능합니다.

 

JSON 작성시 “context”와 “output”으로 나뉘어 작성할 수 있습니다.

  • Output : Watson의 출력 값을 담은 JSON object
    Context : 사용자와 Watson 사이의 대화 문맥을 담은 JSON object

 

사용자가 처음에 예약/취소/현황 중 어떤 서비스를 선택할지 조건을 설정하여, context에 서비스선택을 완료했다는 의미의 변수를 추가합니다.
(서비스 선택 완료 : isSelected, 예약 :  ReservationOktrue로 설정)

조건 설정 방법은 respond의 condition에 Intent를 지칭하는 ‘#’을 prefix로 입력하여, 사용자가 의도가 담긴 단어 또는 문장을 입력 시 JSON으로 작성한 내부의 코드가 실행됩니다.

  • Context 내부의 변수 명은 임의로 지정하여 선언하였습니다.

now().substring(x, y)는 Conversation에서 사용할 수 있는 언어인 SpEL의 기본 함수로, 현재 날짜와 시간을 “YYYY-MM-DD hh:mm:ss” 형식의 값으로 반환 합니다.

 

예약 진행을 위해 Chatbot은 사용자에게 예약에 필요한 몇 가지 정보들을 수집해야 합니다.

회의실 예약에 필요한 요소는 날짜/장소/시간 등이 있으며 해당 요소를 입력 받을 수 있도록 node를 생성합니다.
예약 진행 시 사용자에게 응답을 받을 필요가 없는 node의 경우 Jump to를 통해 다른 node로 바로 이동할 수 있습니다.

  • Jump to : 다른 node에서 대화를 진행하고자 할 때 사용

 

날짜 여부를 입력 받는 node 입니다. If bot recognizes를 통해 날짜 요소가 있는지를 판단하여 없을 경우 사용자에게 날짜 요소를 입력 받도록 유도합니다.

 

사용자가 날짜를 입력하면 System Entity를 통해 날짜형식으로 변환하여 저장하도록 합니다.

양식에 맞게 날짜를 입력하면, ‘날짜여부’ node로 Jump to하여 저장이 되었는지 다시 한번 검증 합니다.
정상적으로 저장이 되었다면 다음 node인 장소에 대한 요소를 입력 받도록 유도할 것입니다.

 

4. 예약하기

예약 요소를 모두 입력했다면, 이제 실제 시스템에서 예약을 진행하는 코드를 작성해야 합니다.
대화 도중 시스템 수행이 필요할 경우 context 내부에 “Action”을 작성합니다.

작성이 완료되면, Watson Conversation API를 호출하는 코드를 작성해야 합니다.

작성 언어는 Node.js이며, 예약을 위한 API 호출 코드는 https://github.com/hjjo/chatbot-tutorial

를 참고하여 작성하였습니다.

 

doAction() 함수는 대화 도중 시스템이 수행해야 하는 Action이 있을 경우 이를 수행합니다.

Conversation Dialog 내의 정의한 action 과 동일하게 작성해야 합니다.
저희는 Return 값을 설정하여, 실제 해당 수행 내용을 작성하였습니다.

 

Conversation 내에 저장한 요소 값을 가져오는 방법은 다음과 같습니다.
1-1의 예약 정보 입력을 보시면, Action commend에 checkReservationOK를 호출합니다.
doAction() 함수를 통해 호출된 checkReservationOK는 fncCheckReservationOk()를 return 합니다.

(생략)

(생략)

fncCheckReservationOk()는 Conversation Dialog의 변수에 저장된 값을 시스템에 HTTP Request를 보내며, Promise()를 통해 HTTP response를 리턴 받습니다.

  • Action을 통해 시스템에서 처리한 값을 Dialog에 적용시키기 위해서는 반드시 사용자에게 한번의 입력을 받아야 합니다.
    (Jump to 사용시 즉시 적용이 되지 않습니다.)

 

예약이 완료 되면 예약 성공에 대한 response를 출력합니다.

 

5. 채팅 화면

지금까지 작성한 내용을 토대로 예약을 진행하는 채팅 화면을 보여드리겠습니다.

 

 

6. 시연 동영상

 

 

7. 참고 자료

왓슨으로 쉽게 개발하는 카카오톡 챗봇 1. Watson Conversation 서비스로 인공지능 대화 서비스 만들기

https://github.com/hjjo/chatbot-tutorial

https://www.ibm.com/watson/developercloud/conversation/api/v1/?cm_mc_uid=09010138839914986140776&cm_mc_sid_50200000=1500598036

https://console.bluemix.net/docs/services/conversation/expression-language.html#built-in-global-variables

 

토론 참가

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.