0. 들어가기 앞서!
1) node, dialogflow 통신과정
- server에는 두 가지 라우터(Text Query Route, Event Query Route)가 존재
1. Text Query Route
- client(react)가 input에 안녕하세요와 같이 typing 대화를 server에게 보내면 server는 이를 dialogflow api에 요청을 보내고, dialogflow는 요청에 대한 응답을 가공하여 다시 라우터에게 보내줌
- client : 안녕하세요~ 입력
- server : client로부터 받은 안녕하세요~를 dialogflow에게 요청
- dialogflow : server로부터 받은 요청을 보고 응답을 server에게 전송
- 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
'Backend 📚 > Node.js' 카테고리의 다른 글
[Node]Instagram Clone - 1. ERD, 개발 환경 설정 (4) | 2024.10.04 |
---|---|
[Node] Dialogflow API를 활용한 챗봇 사이트 - 5. 완성본, Git 주소 (0) | 2024.09.02 |
[Node] Dialogflow API를 활용한 챗봇 사이트 - 1. Dialogflow API (0) | 2024.08.12 |
[Node] Client용 React App (0) | 2024.08.11 |
[Node] Auth 기능, 로그아웃 만들기 - JWT Vertify (0) | 2024.08.06 |