diaglogflow wit media

This commit is contained in:
Leifer Mendez
2022-01-15 21:08:22 +01:00
parent 69720b382a
commit 4339d56870
11 changed files with 38 additions and 15 deletions

View File

@@ -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

View File

@@ -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)
}) })

View File

@@ -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
View File

@@ -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
} }

View File

@@ -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
} }

View File

@@ -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
View 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