개발일지/던파 쌀먹봇

[던파 쌀먹봇] 2021-02-03 개발일지 - 카카오 오픈빌더 익히기 (feat. 구름 IDE 포트 포워딩)

Emil :) 2021. 2. 16. 17:24
728x90
반응형
이 글은 Notion에서 작성 후 재편집한 포스트입니다.

 

목차

개요


일단 스킬을 설정하고, 서버로 호출했을 때 나오는것까진 확인했으나...
스킬 로직을 짜는데 잘 안됐던것 같다 이전으로 다시 돌려보도록하자.

참고


1. 개발환경 메모

ubuntu 18.04
node.js v14.15.4
npm 6.14.10

코드 GIT 주소


github.com/kkkapuq/ssalbot.git

 

kkkapuq/ssalbot

던파 쌀먹봇. Contribute to kkkapuq/ssalbot development by creating an account on GitHub.

github.com

진행 과정


개발환경 변경


우분투에서 쓰고싶었는데.. AWS 프리티어가 안되서 그냥 로컬로 일단 테스트해보기로했다 ㅠㅠ

윈도우는 그냥 nodejs 윈도우버전 깔기만해주면 되더라.

스킬 블록에 적용하기


뭔가 나왔다!

내가 index.js에 코딩해둔걸 호출하고싶다면, 다음 url을 포스트로 호출해주면된다!

localhost:3000/api/sayHello

앞에다 api를 붙여야하는것이다 ㅠㅠ 뭔가 감격..

하... 그런데 로컬에 설정하면 뭔가 포트포워딩이 잘 안됐다... 그래서! 구름IDE를 사용했다! 필요 스택은 nodejs, ubuntu로 설정해주고 프로젝트를 생성한 뒤에, git에서 소스를 가져왔다. 너무 복잡하게 생각한것같다. 그냥 리눅스 우분투 서버 하나 꽁으로 받았다고 생각하면됨!

컨테이너 - 포트포워딩 설정에서 본인이 설정한 포트번호를 입력해주고 등록하면, 외부에서 접속가능한 IP와 포트번호를 생성해준다.

ip는 서버가 꺼지면 다시 킬 때 바뀐다.

그래서.. http://내ip:포트번호/api/sayHello 이렇게 URL을 치면 결과가 나온다!

이걸 스킬에 그대로 적용해주면 된다.

이제 사용자가 말하는 것에 따라 api를 실행해주고, 결과값을 return 해주기만 하면 된다.

테스트 코드는 아래처럼 짜봤다.

const express = require('express');
const app = express();
const logger = require('morgan');
const bodyParser = require('body-parser');

const apiRouter = express.Router();

app.use(logger('dev', {}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: true
}));

app.use('/api', apiRouter);

apiRouter.post('/sayHello', function(req, res) {
  const responseBody = {
    version: "2.0",
    template: {
      outputs: [
        {
          simpleText: {
            text: "hello I'm Ryan"
          }
        }
      ]
    }
  };

  res.status(200).send(responseBody);
});

apiRouter.post('/showHello', function(req, res) {
  console.log(req.body);

  const responseBody = {
    version: "2.0",
    template: {
      outputs: [
        {
          simpleImage: {
            imageUrl: "https://t1.daumcdn.net/friends/prod/category/M001_friends_ryan2.jpg",
            altText: "hello I'm Ryan"
          }
        }
      ]
    }
  };

  res.status(200).send(responseBody);
});

apiRouter.post('/frequentlyResources', function(req, res) {
  console.log(req.body);

  const question = req.body.user

  const responseBody = {
    version: "2.0",
    template: {
      outputs: [
        {
          simpleImage: {
            imageUrl: "https://t1.daumcdn.net/friends/prod/category/M001_friends_ryan2.jpg",
            altText: "hello I'm Ryan"
          }
        }
      ]
    }
  };

  res.status(200).send(responseBody);
});

apiRouter.post("/blockId", function(req, res) {
  const userRequest = req.body.userRequest;
  const blockId = userRequest.block.id;

  return res.send({
    version: "2.0",
    template: {
      outputs: [
        {
          basicCard: {
            title: "블록ID 입니다",
            description: blockId
          }
        }
      ]
    }
  });
});



apiRouter.get('/keyboard', (req, res) => {
  const data = {'type': 'text'}
  res.json(data);
});

app.listen(3000, function() {
  console.log('Example skill server listening on port 3000!')});

이렇게 짜두고, 스킬과 연동해주면 오픈빌더 내부에서 테스트가 가능하다.

이제 서버를 아래와 같이 실행시켜주고, 테스트해보자.

스킬 연동은 다음과 같이 진행해준다.

카카오 오픈빌더 - 스킬 탭으로 이동하고, 생성을 눌러준 다음..

위에서 구름 IDE에서 설정한 본인의 IP, 포트를 써주고 /api/sayHello 로 호출해주는 스킬을 만들어주자.
그다음, 시나리오 탭으로 이동해서 블록을 추가해주고 다음과 같이 설정해준다.

사용자 발화 : 사용자가 말하면 반응
파라미터 설정 : 위에 설정한 '테스트' 스킬 지정
봇 응답 : 스킬 데이터 사용

이렇게 해주면, 현재 내 서버에서 사용하는 스킬데이터가 응답으로 나가게 된다.

저장해주고, 봇 테스트를 실행시켜 '안녕' 을 입력해보면..

이렇게 출력된다. 다음 포스팅에는 여기서 외부 API를 호출해서 결과값을 따오는 걸 확인해보도록 하자.

오늘의 결과


서버와 연동하기 성공!

구독 및 하트는 정보 포스팅 제작에 큰 힘이됩니다♡

728x90
반응형