mirror of
https://github.com/cheveguerra/bot-whatsapp.git
synced 2026-04-21 21:19:17 +00:00
diaglogflow wit media
This commit is contained in:
@@ -5,5 +5,7 @@
|
|||||||
- update route with middleware
|
- update route with middleware
|
||||||
- fix send message to story
|
- fix send message to story
|
||||||
- external download
|
- external download
|
||||||
|
- add dialogflow
|
||||||
|
- images less 1mb
|
||||||
|
|
||||||
https://stackoverflow.com/questions/51855169/dialogflow-403-iam-permission-dialogflow-sessions-detectintent
|
https://stackoverflow.com/questions/51855169/dialogflow-403-iam-permission-dialogflow-sessions-detectintent
|
||||||
@@ -20,6 +20,7 @@ const sessionClient = new dialogflow.SessionsClient(CONFIGURATION);
|
|||||||
|
|
||||||
// Detect intent method
|
// Detect intent method
|
||||||
const detectIntent = async (queryText) => {
|
const detectIntent = async (queryText) => {
|
||||||
|
let media = null;
|
||||||
const sessionId = nanoid.nanoid()
|
const sessionId = nanoid.nanoid()
|
||||||
const sessionPath = sessionClient.projectAgentSessionPath(PROJECID, sessionId);
|
const sessionPath = sessionClient.projectAgentSessionPath(PROJECID, sessionId);
|
||||||
const languageCode = process.env.LANGUAGE
|
const languageCode = process.env.LANGUAGE
|
||||||
@@ -37,18 +38,24 @@ const detectIntent = async (queryText) => {
|
|||||||
const [singleResponse] = responses;
|
const [singleResponse] = responses;
|
||||||
const { queryResult } = singleResponse
|
const { queryResult } = singleResponse
|
||||||
const { intent } = queryResult || { intent: {} }
|
const { intent } = queryResult || { intent: {} }
|
||||||
const parseIntent = intent?.displayName || null
|
const parseIntent = intent['displayName'] || null
|
||||||
|
const parsePayload = queryResult['fulfillmentMessages'].find((a) => a.message === 'payload');
|
||||||
|
|
||||||
|
if (parsePayload && parsePayload.payload) {
|
||||||
|
const { fields } = parsePayload.payload
|
||||||
|
media = fields.media.stringValue || null
|
||||||
|
}
|
||||||
|
// const customPayload = parsePayload['payload']
|
||||||
|
|
||||||
const parseData = {
|
const parseData = {
|
||||||
replyMessage:queryResult.fulfillmentText,
|
replyMessage: queryResult.fulfillmentText,
|
||||||
media:null,
|
media,
|
||||||
trigger:null
|
trigger: null
|
||||||
}
|
}
|
||||||
|
|
||||||
return parseData
|
return parseData
|
||||||
}
|
}
|
||||||
|
|
||||||
const getDataIa = (message = '',cb = () => {}) => {
|
const getDataIa = (message = '', cb = () => { }) => {
|
||||||
detectIntent(message).then((res) => {
|
detectIntent(message).then((res) => {
|
||||||
cb(res)
|
cb(res)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -32,19 +32,21 @@ const get = (message) => new Promise((resolve, reject) => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
const getIA = (message) => new Promise((resolve, reject) => {
|
||||||
/**
|
/**
|
||||||
* Si usas dialogflow
|
* Si usas dialogflow
|
||||||
*/
|
*/
|
||||||
if (process.env.DATABASE === 'dialogflow') {
|
if (process.env.DATABASE === 'dialogflow') {
|
||||||
let resData = { replyMessage: '', media: null, trigger: null }
|
let resData = { replyMessage: '', media: null, trigger: null }
|
||||||
getDataIa(message,(dt) => {
|
getDataIa(message,(dt) => {
|
||||||
resData = { ...resData, ...{ replyMessage: dt.replyMessage } }
|
resData = { ...resData, ...dt }
|
||||||
resolve(resData)
|
resolve(resData)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
const reply = (step) => new Promise((resolve, reject) => {
|
const reply = (step) => new Promise((resolve, reject) => {
|
||||||
/**
|
/**
|
||||||
* Si no estas usando un gesto de base de datos
|
* Si no estas usando un gesto de base de datos
|
||||||
@@ -99,4 +101,4 @@ const reply = (step) => new Promise((resolve, reject) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
module.exports = { get, reply }
|
module.exports = { get, reply, getIA }
|
||||||
3
app.js
3
app.js
@@ -47,6 +47,9 @@ const listenMessage = () => client.on('message', async msg => {
|
|||||||
if (process.env.DATABASE === 'dialogflow') {
|
if (process.env.DATABASE === 'dialogflow') {
|
||||||
const response = await bothResponse(message);
|
const response = await bothResponse(message);
|
||||||
await sendMessage(client, from, response.replyMessage);
|
await sendMessage(client, from, response.replyMessage);
|
||||||
|
if(response.media){
|
||||||
|
sendMedia(client, from, response.media);
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const {get, reply} = require('../adapter')
|
const {get, reply, getIA} = require('../adapter')
|
||||||
const {saveExternalFile} = require('./handle')
|
const {saveExternalFile} = require('./handle')
|
||||||
|
|
||||||
const getMessages = async (message) => {
|
const getMessages = async (message) => {
|
||||||
@@ -16,7 +16,11 @@ const responseMessages = async (step) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const bothResponse = async (message) => {
|
const bothResponse = async (message) => {
|
||||||
const data = await get(message)
|
const data = await getIA(message)
|
||||||
|
if(data && data.media){
|
||||||
|
const file = await saveExternalFile(data.media)
|
||||||
|
return {...data,...{media:file}}
|
||||||
|
}
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,17 +12,22 @@ const cleanNumber = (number) => {
|
|||||||
const saveExternalFile = (url) => new Promise((resolve, reject) => {
|
const saveExternalFile = (url) => new Promise((resolve, reject) => {
|
||||||
const ext = url.split('.').pop()
|
const ext = url.split('.').pop()
|
||||||
const checkProtocol = url.split('/').includes('https:');
|
const checkProtocol = url.split('/').includes('https:');
|
||||||
console.log(checkProtocol)
|
|
||||||
const handleHttp = checkProtocol ? https : http;
|
const handleHttp = checkProtocol ? https : http;
|
||||||
const name = `${Date.now()}.${ext}`;
|
const name = `${Date.now()}.${ext}`;
|
||||||
const file = fs.createWriteStream(`./mediaSend/${name}`);
|
const file = fs.createWriteStream(`./mediaSend/${name}`);
|
||||||
const request = handleHttp.get(url, function(response) {
|
console.log(url)
|
||||||
const ext = response.headers['content-type'].split('/').pop()
|
handleHttp.get(url, function(response) {
|
||||||
|
console.log('aaaa')
|
||||||
response.pipe(file);
|
response.pipe(file);
|
||||||
file.on('finish', function() {
|
file.on('finish', function() {
|
||||||
file.close(); // close() is async, call cb after close completes.
|
file.close(); // close() is async, call cb after close completes.
|
||||||
resolve(name)
|
resolve(name)
|
||||||
});
|
});
|
||||||
|
file.on('error', function() {
|
||||||
|
console.log('errro')
|
||||||
|
file.close(); // close() is async, call cb after close completes.
|
||||||
|
resolve(null)
|
||||||
|
});
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
module.exports = {cleanNumber, saveExternalFile}
|
module.exports = {cleanNumber, saveExternalFile}
|
||||||
0
mediaSend/.gitkeep
Normal file
0
mediaSend/.gitkeep
Normal file
Binary file not shown.
|
Before Width: | Height: | Size: 322 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 307 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 278 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 447 KiB |
Reference in New Issue
Block a user