본문 바로가기
프로젝트/KAKAOWORK_BOT

3. KAKAOWORK BOT으로 사이트와 연동해보기

by ujin2021 2021. 7. 26.

이제는 Q&A 페이지에 누군가 질문을 올리면, 담당자가 처리자에게 할당을 할 수 있고, 할당을 받은 사용자의 톡방에 봇이 메시지를 보내는 로직을 구현해 보겠다.

구현은 간단하게 node.js로 했다

 

ejs 페이지 만드는 것은 이 깃허브를 참고했다

 

[dependencies]

  • "axios": "^0.21.1"
  • "cors": "^2.8.5"
  • "ejs": "^3.1.6"
  • "express": "^4.17.1"
  • "pm2": "^5.1.0"

 

1. app.js 생성

const express = require('express')
const path = require('path');
var cors = require('cors');

const indexRouter = require('./routes/index')
const qnaRouter = require('./routes/qna')

const app = express()

app.set('views', path.join(__dirname, 'views'))
app.set('view engine', 'ejs')

app.use(cors());
app.use(express.json())
app.use(express.urlencoded({ extended: false }));
app.use('/', indexRouter)
app.use('/qna', qnaRouter)

app.listen(3000, function(){
    console.log('app listening on port 3000')
})

indexRouter와 qnaRouter가 필요하다

 

2. indexRouter, index view 생성하기

app.js 경로에 routes 폴더를 생성하고, index.js, qna.js 파일을 만들어 준다

// routes/index.js

const express = require('express')
const router = express.Router()

router.get('/', function(req, res, next) {
    res.render('index', { title: 'Help Center'})
})

module.exports = router

indexRouter로 들어오는 경로가 / 이고, 여기서도 / 경로이기 때문에 localhost:3000 으로 접속시 띄워질 화면을 정의한다. 여기서 res.render('index', {title: 'Help Center'}) 로 했다. 이 뜻은 views/index.ejs 를 rendering 하겠다는 뜻이다. (app.js에서 app.set('views' ..) 로 설정해주어야 한다!

 

app.js와 같은 경로에 views 폴더를 생성해즈고, 그 밑에 index.ejs 파일을 생성한다

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
  </head>
  <body>
    <h1><%= title %></h1>
    <p>Welcome to <%= title %></p>
    <a href="/qna/2">QnA</a>
  </body>
</html>

index.js에서 {title: 'Help Center'}로 넣어주기 때문에 ejs에서 <%= title %> 이 Help Center로 치환된다

접속하면 이런화면

 

3. qnaRouter, qna view 생성하기

// routes/qna.js

const express = require('express')
const router = express.Router()
const axios = require('axios')
const { APPKEY, URL, memberDB } = require('../config')

const sendMsg = async(conv_id, contents) => {
    let data = {
        "conversation_id" : conv_id,
        "text" : contents
    }
    axios.post(URL, JSON.stringify(data), {
        headers: {
            "Content-Type": "application/json;charset=utf-8",
            "Authorization": APPKEY
        }
    })
    .then((res) => {
        let status = res.status
        let isSuccess = res.data.success
        if(status === 200 && isSuccess) {
            console.log("send msg success")
            return true
        }
    })
}

router.get('/:id', function(req, res, next) {
    res.render('qna', { title: 'Q&A'})
})

router.post('/', async function(req, res, next) {
    let body = req.body
    console.log('qna post')
    let url = req.headers.referer
    let name = body.name
    let conv_id = memberDB[name]
    await sendMsg(conv_id, url)
    res.redirect('/')
})

module.exports = router

[get]

일단 localhost:3000/qna로 들어오면 qna.ejs를 rendering한다

 

[post]

1. form에 처리할 직원의 이름을 넣고 할당 버튼을 누르면 req.body에서 name을 가져온다

2. name 과 bot-user 톡방 id를 매치 시켜 놓은 config.js 의 memberDB를 통해 톡방 id를 가져온다(conv_id)

3. let url = req.heades.referer에서 url을 가져온 이유는, 할당받는 사람에게 톡이 갈 때, 해당 qna 페이지 url을 data로 넘겨주기 위해서이다.

4. 할당받는 사람 이름과 처리해야할 qna url을 sendMsg 함수에 넣어준다.

5. sendMsg 함수는 axios를 이용해 postman으로 우리가 이전에 했던 요청을 처리한다

 

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
  </head>
  <body>
    <h1><%= title %></h1>
    <p>Welcome to <%= title %></p>
    <div>
        <span>제목 : 사이트가 안들어가져요</span>
        <p>내용 : 사이트가 안들어가집니다..</p>
    </div>

    <div>
        <button>접수</button>
    </div>
    <span>할당하기</span>
    <form action="/qna" method="post">
        <input type="text" name="name" placeholder="할당할 직원 이름을 입력">
        <input type="submit" value="할당">
    </form>
  </body>
</html>

 

 

이렇게 할당버튼을 누르면 메시지가 전송된다

 

해당 qna의 url이 data로 넘어온다

 

[config.js 설정]

app.js와 같은 위치에 config.js파일을 생성한다.

const APPKEY = "Bearer appkey"
const URL = "https://api.kakaowork.com/v1/messages.send"
const memberDB = {
    "이유진" : 111111
}

module.exports = {
    APPKEY,
    URL,
    memberDB,
 };

config.js

현재 DB를 따로 구축한 상태가 아니기 때문에 memberDB를 만들어서 "name" : 톡방id를 매치 시켜놓았다.

그리고 APPKEY와 요청 URL을 정의해 두었다

 

전체 소스코드 : https://github.com/ujin2021/Kakaowork-Bot-Test

 

GitHub - ujin2021/Kakaowork-Bot-Test: Kakaowork message.send API를 사용해 메시지 전송하기

Kakaowork message.send API를 사용해 메시지 전송하기. Contribute to ujin2021/Kakaowork-Bot-Test development by creating an account on GitHub.

github.com

 

일반 카카오톡 메시지 보내기 보다 더 쉽게 했던 것 같다.

끝!

'프로젝트 > KAKAOWORK_BOT' 카테고리의 다른 글

2. KAKAOWORK BOT API 사용해보기  (1) 2021.07.26
1. KAKAOWORK BOT 설정하기  (1) 2021.07.26