mirror of
https://github.com/cheveguerra/bot-whatsapp.git
synced 2026-04-20 12:39:24 +00:00
first test with dialogflow
This commit is contained in:
57
adapter/diaglogflow.js
Normal file
57
adapter/diaglogflow.js
Normal 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 }
|
||||
@@ -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 }
|
||||
Reference in New Issue
Block a user