Node.js
챗봇 구축
킨글
2022. 8. 11. 14:11
1. 카카오 i에서 폴백 블록에서 "스킬데이터 사용" 설정 진행
2. 서버에서 받을 API 주소 입력
3. 서버에서 POST로 http://domain/api/message API 구현
var express = require("express"); // 필수
var router = express.Router(); // 필수
var moment = require('moment'); // 시간 가져오기
var app = express();
const Bot = require('../bot.js'); // bot.js
router.post('/api/message', function(req, res) {
const message = req.body.userRequest.utterance; // 유저의 문의 내용
const id = req.body.userRequest.user.id; // 암호화된 유저의 고유 id
var bot_name = req.body.bot.name; // 카카오아이 botName
var responseBody = "";
try{
bot.sendToDialogflow(message, id).then(result => {
var isFallback = result[0].queryResult.intent.isFallback; // Fallback 인지에 대해서 return 받음
var answer = result[0].queryResult.fulfillmentMessages[0].text.text[0]; // 나간 답변
var displayName = result[0].queryResult.intent.displayName; // intent의 displayName
...
...
if(isFallback){
responseBody = {
version: '2.0',
template: {
outputs: [
{
simpleText: {
text: result[0].queryResult.fulfillmentMessages[0].text.text[0]
}
}
],
quickReplies: [
{
label: '예시보기',
action: 'message',
messageText: '예시보기'
}
]
}
};
}
}).catch(
error => { console.log(error);}
);
res.status(200).send(responseBody);
}catch(e){
console.log(e);
}
});
Dialogflow와 통신을 위한 bot.js 구성
const dialogflow = require('dialogflow');
const fs = require('fs');
class Dialogflow {
constructor (projectId, keyFile) {
this.projectId = projectId;
const keyfile = JSON.parse(fs.readFileSync(keyFile));
let privateKey = keyfile['private_key'];
let clientEmail = keyfile['client_email'];
let config = {
credentials : {
private_key: privateKey,
client_email: clientEmail
}
};
this.sessionClient = new dialogflow.SessionsClient(config);
try{
}catch(e){
console.log('bot.js Err2:'+e);
}
}
async sendToDialogflow (text, sessionId) {
try{
const sessionPath = this.sessionClient.sessionPath(this.projectId, sessionId);
const request = {
session: sessionPath,
queryInput: {
text: {
text: text,
languageCode: 'ko-KR'
}
}
};
return await this.sessionClient.detectIntent(request);
}catch(e){
console.log('bot.js Err2:'+e);
}
}
}
module.exports = Dialogflow;