first test with dialogflow

This commit is contained in:
Leifer Mendez
2022-01-15 19:26:52 +01:00
parent 691880e628
commit 69720b382a
9 changed files with 609 additions and 39 deletions

57
adapter/diaglogflow.js Normal file
View File

@@ -0,0 +1,57 @@
const dialogflow = require('@google-cloud/dialogflow');
const fs = require('fs')
const nanoid = require('nanoid')
/**
* Debes de tener tu archivo con el nombre "chatbot-account.json" en la raíz del proyecto
*/
const CREDENTIALS = JSON.parse(fs.readFileSync(`${__dirname}/../chatbot-account.json`));
const PROJECID = CREDENTIALS.project_id;
const CONFIGURATION = {
credentials: {
private_key: CREDENTIALS['private_key'],
client_email: CREDENTIALS['client_email']
}
}
// Create a new session
const sessionClient = new dialogflow.SessionsClient(CONFIGURATION);
// Detect intent method
const detectIntent = async (queryText) => {
const sessionId = nanoid.nanoid()
const sessionPath = sessionClient.projectAgentSessionPath(PROJECID, sessionId);
const languageCode = process.env.LANGUAGE
const request = {
session: sessionPath,
queryInput: {
text: {
text: queryText,
languageCode: languageCode,
},
},
};
const responses = await sessionClient.detectIntent(request);
const [singleResponse] = responses;
const { queryResult } = singleResponse
const { intent } = queryResult || { intent: {} }
const parseIntent = intent?.displayName || null
const parseData = {
replyMessage:queryResult.fulfillmentText,
media:null,
trigger:null
}
return parseData
}
const getDataIa = (message = '',cb = () => {}) => {
detectIntent(message).then((res) => {
cb(res)
})
}
module.exports = { getDataIa }

View File

@@ -1,46 +1,58 @@
const {getData , getReply} = require('./mysql')
const { getData, getReply } = require('./mysql')
const { getDataIa } = require('./diaglogflow')
const get = (message) => new Promise((resolve, reject) => {
/**
* Si no estas usando un gesto de base de datos
*/
if(process.env.DATABASE === 'none'){
if (process.env.DATABASE === 'none') {
const steps = [
{
keywords:['hola','hi','buen dia'],
key:'STEP_1'
keywords: ['hola', 'hi', 'buen dia'],
key: 'STEP_1'
},
{
keywords:['enviar pdf','pdf','enviarpdf'],
key:'STEP_2'
keywords: ['enviar pdf', 'pdf', 'enviarpdf'],
key: 'STEP_2'
}
]
const {key} = steps.find(k => k.keywords.includes(message)) || {key:null}
const { key } = steps.find(k => k.keywords.includes(message)) || { key: null }
const response = key || null
resolve(response)
}
}
/**
* Si usas MYSQL
*/
if(process.env.DATABASE === 'mysql'){
getData(message,(dt) => {
if (process.env.DATABASE === 'mysql') {
getData(message, (dt) => {
resolve(dt)
});
}
/**
* Si usas dialogflow
*/
if (process.env.DATABASE === 'dialogflow') {
let resData = { replyMessage: '', media: null, trigger: null }
getDataIa(message,(dt) => {
resData = { ...resData, ...{ replyMessage: dt.replyMessage } }
resolve(resData)
})
}
})
const reply = (step) => new Promise((resolve, reject) => {
/**
* Si no estas usando un gesto de base de datos
*/
if(process.env.DATABASE === 'none'){
/**
* Si no estas usando un gesto de base de datos
*/
if (process.env.DATABASE === 'none') {
let replyMessage = null;
let resData = {replyMessage:'', media:null, trigger:null}
switch(step){
let resData = { replyMessage: '', media: null, trigger: null }
switch (step) {
case 'STEP_1':
replyMessage = [
@@ -49,42 +61,42 @@ const reply = (step) => new Promise((resolve, reject) => {
'¿Quieres que te envie mi presentación? \n',
'*enviar pdf* o *omitir* \n',
].join('');
resData = {replyMessage, media:null}
resData = { replyMessage, media: null }
resolve(resData);
return
break;
break;
case 'STEP_2':
replyMessage = [
'Yeah! 😎 \n',
'enviando...👌'
].join('');
resData = {replyMessage, media:'meme-1.png',trigger:'STEP_0'}
resData = { replyMessage, media: 'meme-1.png', trigger: 'STEP_0' }
resolve(resData);
return
break;
break;
case 'STEP_0':
replyMessage = [
'El flujo ha finalizado \n',
'pero puedes ver todo el codigo de este \n',
'repositorio en https://github.com/leifermendez/bot-whatsapp.git'
].join('');
resData = {replyMessage, media: null}
resData = { replyMessage, media: null }
resolve(resData);
return
break;
break;
}
}
/**
* Si usas MYSQL
*/
if(process.env.DATABASE === 'mysql'){
let resData = {replyMessage:'', media:null, trigger:null}
getReply(step,(dt) => {
resData = {...resData,...dt}
resolve(resData)
});
}
/**
* Si usas MYSQL
*/
if (process.env.DATABASE === 'mysql') {
let resData = { replyMessage: '', media: null, trigger: null }
getReply(step, (dt) => {
resData = { ...resData, ...dt }
resolve(resData)
});
}
})
module.exports = {get, reply}
module.exports = { get, reply }