[지난] 왓츠뉴 챗봇 작업 로그

[우당탕탕 챗봇 만들기] 사용자 피드백 받기

Haejiness 2022. 6. 12. 13:29

본 게시글은 비개발자가 우당탕탕 구글링과 삽질로 꾸역꾸역 챗봇이 작동하게 만드는 과정에 대한 기록입니다. 작성자의 웹개발 지식은 0이며, 개인이 운영 상에 있어 맥락 파악을 목적으로 기록해놓은 것으로, 도움이 된다면 정말 다행이지만 도움이 되지 못하더라도 양해해주시면 감사하겠습니다... 반대로, 도움이 될 만한 코멘트도 환영합니다! 왜냐하면 또 챗봇을 만들어볼 생각이거든요!!

 

+ 해당 글은 2020년 10월에 작성된, 과거의 글이라는 점 참고해주시기 바랍니다.

 


이걸 가능하게 하려고 이 밤까지 혈투를 벌인 느낌인데, 이쯤되니 내가 멍청한 건가 싶기도 하다. 좀더 눈치 빠른 실력자들이었으면 몇 번 만져보고 바로 터득했을텐데... 아직도 내가 왜 몇 시간동안 그렇게 헤맨건지 웃픔 ㅋㅋㅋ

시행착오가 있었다.

 

우리가 원하는 그림은

사용자: [피드백] 선택 → 챗봇: '입력해달라'는 안내 → 사용자: 피드백 입력 → 챗봇: '감사하다'는 인사

였으며, 이를 위해서는 '컨텍스트 설정'이 반드시 필요할 것만 같았다. (컨텍스트 설정을 활용하지 않은 지금도, 그걸 활용하면 좀더 자연스러운 피드백 제시가 가능할 것 같다는 생각은 든다..)

 

왜냐, '[피드백] 선택'과 동시에 피드백 블록으로 들어오는데, 그렇게되면 피드백 블록을 위해 준비해둔 스킬 데이터가 바로 작동되어 버리는 것... 즉, 감사하다는 인사는 피드백을 받은 뒤에 하고 싶은데, 코드에 '감사합니다'를 응답으로 적어두면 피드백을 누르고 들어온 것만으로 감사하다며 쌩 도망가는 꼴이 되는 것이었다.

 

그래서 응답을 분리하기 위해 인텐트(블록)를 나눠야한다고 생각했고, 그렇게 나뉜 인텐트를 이어서 작동시키기 위해서는 지옥의 '컨텍스트 설정'이 필요했던 것... 그런데 여간 어려운 일이 아니었다. 난 분명 시키는대로 다 했거늘 다음 인텐트로 넘어갈 생각을 안했다. 별 짓을 다해봤다. Input Output 컨텍스트를 괜히 바꿔도 보고... 필수 파라미터 일반 파라미터도 바꿔보고... 코드도 뻥 안치고 백번은 넘게 바꿔본 듯? 컨텍스트 조건도 엄청 바꿔보고 파라미터도 이래저래 바꿔보고ㅋㅋㅋ 누군가 알려줄까 구글링도 해보고... (사실 챗봇 만들면서 아무리 구글링을 해도 내가 익숙해지지 않은 상태에서는 무슨 말인지 모르겠슴..)

 

그러다가 결국 초반에 봤던 글을 나중에 다시 보게 되었고, 그제서야 좀 이해가 됐다... 머리가 맑아지는 느낌..ㅠ 사실 시행착오 전부 다 기록하고 싶은데 그새 전부 기억이 나지는 않는다. 하여튼 헛수고만 주구장창 했다!!

 

여기까지가 시행착오이고, 여기서부터는 솔루션!

 

일단 첫번째로, 컨텍스트는 필요 없었다. ㅋㅋㅋ 히힛... 둘 이상의 인텐트가 사실상 필요하진 않았기 때문에..!

사용자는 제네릭 메뉴에서 [피드백 남기기]를 클릭하고 피드백 블록으로 넘어온다.

('피드백 남기기' 버튼에 '피드백 안내' 블록을 연결해둔 걸 볼 수 있다)

이 때, 피드백 블록의 필수 파라미터를 지정해주고 (파라미터명 feedback, 엔티티 sys.text로) 되묻기 질문을 활용해 피드백 안내를 하면 되는 것이었다.

(필수 파라미터를 채우기 위한, 챗봇의 되묻기 질문)

당연히 맨 처음에 들어왔을 때에는 필수 파라미터가 채워지지 않았을테니, 되묻기 질문 이후 사용자가 입력한 text가 내가 설정한 필수파라미터(feedback)의 값으로 채워진다.

 

그렇게 필수파라미터가 채워지고 나면, 비로소 해당 블록은 응답을 내보낸다. 그 곳에 감사인사를 넣어두면 되는 것!

응답은 스킬 데이터로 작성해뒀다. 그래서 이모티콘을 붙일 줄 모른다는 게 한이다 ㅠ 처음에는 '소중한 의견 감사해요!'가 멘트였는데, 너무 의견 먹고 튀는(?) 느낌이라 뒤에 한마디 덧붙임 ㅋㅋ 이런 멘트는 언니가 손봐주겠징..ㅎㅎ

dataSend = {
                "version": "2.0",
                "template": {
                    "outputs": [
                        {
                            "simpleText": '소중한 의견 감사해요!\\n앞으로도 발전하는 왓츠뉴가 되겠습니다!'
                        }
                    ]}
                }

응답 코드 자체는 아주아주 단순하다. 그냥 기본 텍스트 문구가 나가는 거기 때문에! 글만 띡 써주면 됨.

 

피드백 안내와 다르게 감사 인사는 코드로 할 수가 있어서 줄바꿈도 했다 ㅠㅜ 피드백 안내도 줄바꿈 가능하면 좋겄네... '한번에 보내주세요 나눠보내면 다 못봐요 어쩌구..' 쪼금 더 안내해주면 좋을텐데

(최종적으로 이런 그림의 플로우가 완성된다! 사실 그림 속 대화가 바람직한 흐름은 아니지만...ㅋㅋ 우리 챗봇은 무조건 의견 감사하다는 말밖에 못함)

응답코드는 단순한데 여기서 또 뿌듯한 포인트가 하나 더 있다. 이 단순한 걸 스킬 데이터로 한 이유는 오직 피드백 블록으로 유입된 발화만 전부 모아볼 수 있는 DB를 만들기 위해서였고.. 성공!! ㅎㅎㅎㅎㅎ 일단 자야지