[GDF] 무한루프 해결


가끔 챗봇이 파라미터를 받고, 내가 그것에 대해 이상한 답을 했을 때 다시 챗봇이 그 파라미터에 대한 정보를 나한테 묻게끔 해야 하는 일이 있다.

예를 들어 AskDrink 라는 페이지가 있다고 쳐보고, IDrink라는 파라미터가 있어서 챗봇이 “음료를 드실겁니까?”라는 말을 했을 때 파라미터에 내가 입력할 수 있는 유효한 값은 응/아니/글쎄 이 세 개라고 해보자.

이러면 먼저 파라미터에는 엔티티 타입으로 1. 응 2. 아니 3. 글쎄 이 세가지 종류를 다 담을 수 있어야 한다. 물론, 1. 응 2. 아니 이 두가지만 담고 “글쎄”를 핸들링 하기 위해 “No-match” 이벤트를 걸어서 “글쎼” 입력이 들어왔을 떄 처리하게 할 수 있다. 하지만, “글쎄”가 다른 무효한 대답과는 달리 또 다른 동작을 처리해야 한다면 “글쎼”를 엔티티 타입에 포함시켜야 한다.

만약 내가 글쎄를 입력했을 때만 “다시 음료를 드실겁니까?”라고 물어볼 수 있도록 챗봇을 기획했다고 해보자. 그리고 구조를 아래와 같이 짰다.

  1. AskDrink라는 페이지에 IDrink라는 파라미터가 있다.
  2. AskDrink 페이지의 Condition routes에 “$session.params.IDrink = 응”, “$session.params.IDrink = 아니”이라는 조건을 추가하고, 이 조건을 만족했을 때 transition을 각각 다른 페이지로 이어지게 한다.
  3. 또 같은 페이지에 condition routes로 “$session.params.IDrink = 글쎼” 라는 조건을 추가하고, 이 조건을 만족시켰을때 transition을 AskDrink 페이지로 이어지게 한다.

위와 같이 하면 큰 문제가 있다. IDrink라는 파라미터에 “글쎄”를 우리가 입력했을 경우 이 IDrink의 값이 변하지 않고 “글쎼”라고 남아있기 때문에, 처음으로 우리가 “글쎼”라고 입력하고 나서 우리가 기대한 것은 “응”, “아니”, “글쎄”를 또 입력할 수 있는 것이지만 IDrink의 값이 “글쎄”이기 때문에 계속 무한 루프를 돌면서 챗봇이 질문만하거나, 아예 동작이 멈추는 것이다.

이럴 경우를 대비해서 해줘야 하는 작업은 간단하다.

IDrink 파라미터 설정에 가서, ‘Parameter presets’라는 항목에 ‘Add a parameter’를 누르고, Parameter부분에는 IDrink, Value부분에는 null이라고 적어주면 된다. 이럴 경우 파라미터가 처음에 (챗봇이 질문할 때) null로 초기화가 돼서 두 번째로 챗봇이 음료를 물어볼 때 사용자가 대답을 입력할 수 있게 된다.