엄지월드

챗봇 구축 본문

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;
Comments