먹고 기도하고 코딩하라

Python Django 카카오톡 학식봇 만들기(4) - views 완성, 시나리오와 블록에 스킬 적용하기 본문

개발일지

Python Django 카카오톡 학식봇 만들기(4) - views 완성, 시나리오와 블록에 스킬 적용하기

사과먹는사람 2020. 3. 7. 13:33
728x90
728x90

이전 글 보기

 

카카오톡 학식봇 만들기(3) - 텍스트 파일 파싱해서 메시지로 보내기

이전 글 보기 카카오톡 학식봇 만들기(2) - Amazon EC2에 firefox 웹드라이버 설치, 동적 웹페이지 크롤링하기 이전 글 보기 카카오톡 학식봇 만들기(1) - 동적 웹페이지 크롤링 방법이 정적 웹페이지와

dev-dain.tistory.com

 

 

 

이번 포스팅에서는 views 파일 완성본으로 어떻게 i 오픈빌더 시나리오와 블록에 적용해야 카카오톡 채널에서 자동응답이 가능한지 살펴보겠습니다.

우선 가상환경을 활성화하시고 app_name 디렉토리 아래 views.py 파일을 다음과 같이 수정합니다. 코드가 길기 때문에 이번에는 포스팅에 넣지 않고 링크로 대체합니다. JsonResponse 형식은 이전에 설명했기 때문에 건너뛰며 날짜 계산법도 쉽기 때문에 분기문 코드는 따로 설명하지 않습니다.

수정한 후에는 python3 views.py 를 꼭 실행해 봅니다. 여기서 웬만한 오타 같은 에러를 잡아낼 수 있습니다. 코드를 좀 길게 써야 하기 때문에 오타가 생길 수 있으므로 중간중간에 나와서 save 하고 실행해보는 것도 좋은 방법입니다.

python3 views.py 에도 문제가 없다면 카카오 i 오픈빌더에 로그인해서 시나리오와 블록을 만들고 스킬을 적용해 보겠습니다. 이 과정은 아주 쉬우므로 설명은 간단하게만 하겠습니다. 시나리오와 블록 등의 용어와 뜻이 궁금하신 분들은 도움말을 참고하십시오.

 

 

저는 '밥테스트'라는 챗봇을 만들어 인사, 1차 진입, 2차 진입, 정보 총 4가지 시나리오를 만들고 그 아래 블록을 만들었습니다. 시나리오를 만들고 블록을 나누는 건 사실 시스템상으로는 그렇게 큰 의미는 없는 것 같습니다. 그냥 작업자들이 작업할 때 어느 정도 응답의 영역을 나눠준다 정도로 생각하고 저는 위와 같이 4개로 나눴습니다. 그 중 인사, 정보 블록은 스킬을 적용하지 않고 텍스트형으로 그냥 응답하도록 했습니다.

1차 진입과 2차 진입 시나리오의 블록들은 스킬을 적용하게 되는데요. 스킬 적용은 지난 포스팅에서 했던 것과 같이 파라미터 설정 옆의 옵션에서 스킬 이름을 선택하고 버전을 선택한 뒤 봇 응답에서 스킬데이터 사용을 누르면 됩니다.

이 때 패턴 발화를 등록하게 되는데 현재까지 제가 시도해본 바로는 패턴 발화를 여러 개 등록해봤자 views 파일에서 여러 경우의 수로 if 문을 주지 않는 이상 다른 패턴 발화로는 결과를 얻는 것이 불가능했습니다. (자세히 아시는 분은 댓글 부탁드립니다) 그래서 저는 간단하게 2차 진입에서는 월, 화, 수, 목, 금으로 지정했습니다(views 파일을 보면 실제로도 이 발화가 들어왔을 때 응답을 주게 되어 있습니다).

저장하고 배포 탭에서 스킬 배포까지 해줍니다. 

스킬이 적용되는 블록은 총 9개인데요. 포스팅을 작성하는 오늘 2020년 3월 7일은 토요일입니다. 그러니 '오늘'을 눌러도 학식이 없다고 나와야 정상이고 '내일'을 눌러도 학식이 없다고 나와야 정상일 텐데요. 한 번 테스트해보겠습니다.

 

 

의도대로 잘 출력됩니다. 참고로 '처음으로'라고 했을 때 나오는 '안녕하세요? ...' 응답은 그냥 텍스트 형으로 준 것입니다. 

 

 

'인사' 블록의 패턴 발화 중 하나로 '처음으로'를 등록했습니다. 이 블록의 응답은 텍스트형이며 quickReplies 버튼으로 다음 발화를 유도했습니다. 이 때 바로연결 버튼만 만드는 것이 아니라 블록 연결, 메시지 전송, 엔티티 적용 중 한 가지를 해줘야 합니다. 저는 다른 시나리오에 있는 블록들로 연결해주는 것을 택했습니다. 블록 연결과 패턴 발화 등록은 여러 가지를 시도해보시고 직접 터득해보시는 것이 훨씬 좋겠습니다.

 

여담으로 위에 적었던 것과 같이 스킬 적용되는 부분은 패턴 발화를 아무리 많이 등록해봐야 서버의 if 문에서 true 가 나오지 않으면 false 라서 인식을 못 합니다. 하지만 스킬을 쓰지 않고 위의 '인사' 블록과 같이 텍스트형이나 이미지, 카드 등의 응답을 쓴다면 패턴 발화를 많이 등록하는 게 이득이 될 수 있습니다. 기존 API 형의 봇에서는 키보드 입력을 아예 막아버릴 수도 있었지만 지금은 키보드 입력도 가능하기 때문에 사용자가 뭐라고 입력할지 예측하기 어렵기 때문입니다. 

 

 

이렇게 해서 우리 학교 학식 봇 만들기 과정을 모두 마쳤습니다. 생각보다 빨리 끝나게 됐네요 ㅎㅎ

여기까지 하셨다면 모교 학식을 크롤링해보거나 다른 흥미있는 것(음악 차트, 영화 차트 등...)을 크롤링해보시며 챗봇을 만들어보시는 것을 추천합니다.

질문은 댓글로 부탁드립니다. 읽어주셔서 감사합니다 ^^

 

 

Reference

카카오 i 오픈빌더 도움말

 

 

728x90
반응형
Comments