Backend 📚/Node.js

[Node] Dialogflow API를 활용한 챗봇 사이트 - 2. Text Query Route, Event Query Route

leejaejae 2024. 8. 13. 21:15

0. 들어가기 앞서!

1) node, dialogflow 통신과정

- server에는 두 가지 라우터(Text Query Route, Event Query Route)가 존재

 

1. Text Query Route

- client(react)가 input에 안녕하세요와 같이 typing 대화를 server에게 보내면 server는 이를 dialogflow api에 요청을 보내고, dialogflow는 요청에 대한 응답을 가공하여 다시 라우터에게 보내줌

  1. client : 안녕하세요~ 입력
  2. server : client로부터 받은 안녕하세요~를 dialogflow에게 요청
  3. dialogflow : server로부터 받은 요청을 보고 응답을 server에게 전송
  4. client는 안녕하세요~에 대해서 챗봇에게 안녕하세요. 무엇을 도와드릴까요? 라는 답을 받음
// index.js

const express = require("express");
const path = require("path");
const bodyParser = require("body-parser");
const app = express();

const config = require("./server/config/keys");

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());


// app.use를 통해 Text Query Route, Event Query Route가 있는 route > dialogflow.js을 라우팅
app.use('/api/dialogflow', require('./server/routes/dialogflow'));

const port = process.env.PORT || 4000;

app.listen(port, () => {
  console.log(`Server Running at ${port}`)
});
// dialogflow.js

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

const config = require('../config/keys');

const projectId = config.googleProjectID
const sessionId = config.dialogFlowSessionID
const languageCode = config.dialogFlowSessionLanguageCode


// 새로운 세션 생성, dialogflow로 데이터를 전송할 때 session 필요
const sessionClient = new dialogflow.SessionsClient();
const sessionPath = sessionClient.sessionPath(projectId, sessionId);


// Text Query Route
router.post('/textQuery', async (req, res) => {
    // client에서 dialogflow API로 오는 정보 보내기
    const request = {
        session: sessionPath,
        queryInput: {
            text: {
                text: req.body.text,
                languageCode: languageCode,
            },
        },
    };

    // request 보내고 결과
    const responses = await sessionClient.detectIntent(request);
    console.log('Detected intent');
    const result = responses[0].queryResult;
    console.log(`  Query: ${result.queryText}`);
    console.log(`  Response: ${result.fulfillmentText}`);

    res.send(result)
})


module.exports = router;

 

2. Event Query Route

-  clinet가 챗봇에 입장했을 때, 챗봇에서 어서오세요, 챗봇 $$입니다. 무엇을 도와드릴까요?와 같이 클라이언트에게 메세지를 보내는 것을 처리하는 곳

// dialogflow.js

// Event Query Route
router.post("/eventQuery", async (req, res) => {
  const request = {
    session: sessionPath,
    queryInput: {
      event: {
        // event를 전송
        name: req.body.event,
        languageCode: languageCode
      },
    },
  };

  const responses = await sessionClient.detectIntent(request);
  console.log("Detected intent");
  const result = responses[0].queryResult;
  console.log(`  Query: ${result.queryText}`);
  console.log(`  Response: ${result.fulfillmentText}`);

  res.send(result);
});

 

3. 결과 🎉

1) Text Query Route


2) Event Query Route


 따라하며 배우는 노드, 리액트 시리즈 - 챗봇 사이트 만들기 강의를 참고합니다.
★ git repository: ChatBot_CloneCoding