-
카카오톡 챗봇 만들기 - 1Tech/Development 2020. 4. 11. 14:24반응형
카카오 i 오픈빌더를 통해 카카오톡 챗봇을 만들어 보려고 한다. 카카오 i 오픈빌더는, 카카오톡 채널 챗봇을 설계할 수 있는 카카오 AI 설계 플랫폼이다. 공식 문서에서 굉장히 잘 설명하고 있기 때문에 기본적인 부분들은 건너뛰고 스킬서버와 관련해 다루어 보고자 한다.
스킬서버
카카오에서는 챗봇을 아름답게 꾸며줄 수 있는 다양한 기능들이 존재한다. 예를 들어, 시나리오 설정 기능, 중요한 정보를 추출하기 위한 엔티티 태깅 기능, 머신러닝을 통한 학습 기능 등 많은 도구들을 제공해 준다. 그 중에서 스킬 기능은 대화의 흐름을 조금 더 유연하게 만들어 주는 도구이다. 예를 들어, 환율을 보여주는 응답일 경우, 모든 환율에 대한 데이터를 시시각각 저장하고 그에 대한 반응들을 만들어낼 수 없지 않은가. 그래서 모든 내용을 스킬로 만들 필요 없이 데이터에 해당하는 값만을 서버에 요청해 받아오는 것이 바로 스킬이며, 서버가 스킬 서버이다.
스킬 서버에서는 봇으로 부터 스킬 요청을 받고 이에 담긴 정보를 분석해 적절한 응답을 만든다. 각각의 요청은 HTTP POST 메소드를 통해 전달되고, 요청과 응답은 모두 JSON으로 구성된 body를 이용한다.
실습진행
우선, 카카오 i 오픈빌더 사이트로 이동해서 계정을 생성해 주자.
계정 신청 후, 로그인하여 나만의 봇을 만들어 주도록 한다. 나의 경우 이미 '저렴이'라는 최저가 검색 봇을 미리 준비해놨기에 해당 봇을 이용해 실습을 진행하려고 한다.
스킬 탭으로 이동해 새로운 스킬을 생성하기 이전에 우선 봇 시스템의 요청을 수행해 응답을 반환해줄 스킬 서버가 필요하다. 추후 실제로 운영할 때야, AWS EC2를 이용하든, Lambda를 이용하든 할 것이지만. 지금은 나의 PC를 이용해 스킬 서버를 만들어 보고자 한다.
스킬 서버의 세팅은, node.js와 express.js를 이용하여 운용하고자 한다. 스킬 서버 세팅과 관련해서는 카카오 i 오픈빌더 공식 문서에서 잘 설명하고 있으니 잘 참고하도록 하자.
설치해야 될 모듈은 express, body-parser이다. express.js의 경우에야 node.js에서 사용되는 웹 프레임워크이므로 설치하는 것이 당연하고, body-parser의 경우에는 post/put 요청 메소드의 body를 읽어오는 모듈이다.
해당 index.js 파일을 node를 통해 3000번 포트로 실행시켜보자. 그 다음 다시 카카오 i 오픈빌더로 이동해 스킬 서버 테스트를 진행하려고 한다. 아래처럼 URL에 나의 IP 주소와 경로를 작성해 준 다음 하단에 있는 스킬 서버 테스트를 진행하면 된다.
그런데, 왜 인지, Null 값이 출력되며 처리되지 않은 에러라며 로그가 남겨진다. 여기서의 문제점은 바로, 포트포워딩을 진행하지 않았다는 점이다. 나의 경우, 공유기를 사용하였기 때문에. 공유기 외부에서 공유기 내부의 컴퓨터에 접속하기 위해서는 공유기의 몇 번 포트에 접속한 정보를 공유기 내의 어떤 IP의 몇 번 포트로 연결해줄 것인지 공유기에 알려줘야 한다.
그렇다면, Public IP에 접속해서 포트포워딩을 진행하도록 하자. 이 페이지로 이동하면, Public IP를 확인할 수 있다. 나는 KT 공유기를 사용하고 있었기 때문에 공공 IP로 접속하게 되면 이 사이트가 뜨게 된다. 따로 아이디나 비밀번호를 설정하지 않았더라면, ID : ktuser, PW : homehub이니 로그인하도록 하자.
그 다음, 장치설정 → 트래픽관리 → 포트포워딩 설정으로 이동하자. 어떤 외부 포트로 접근할지 설정해 주고, 내 PC의 로컬 IP도 적어준다. 그 다음, 위에서 Node App이 3000번 포트로 실행되었기 때문에 내부 포트는 3000번으로 설정하고 추가시켜주도록 한다.
위의 모든 작업을 수행했다면, 다시 카카오 i 오픈빌더로 이동해 스킬 서버 테스트를 해보자.
자, 정상적으로 출력되는 것을 확인할 수 있다. 지금까지는 예제를 다루어 보았지만, 앞으로는 조금 더 심화된 내용을 다루어 보려한다.
반응형'Tech > Development' 카테고리의 다른 글
Golang #2 - Method vs Function (0) 2021.03.01 Golang #1 - Map (0) 2021.02.14 Golang Reserved Words (0) 2021.02.11 Headless Browser, Puppeteer (0) 2020.07.22 Node with Python(python-shell) (0) 2020.07.22