diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d435c2..768bba0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,5 +5,7 @@ - update route with middleware - fix send message to story - external download +- add dialogflow +- images less 1mb https://stackoverflow.com/questions/51855169/dialogflow-403-iam-permission-dialogflow-sessions-detectintent \ No newline at end of file diff --git a/adapter/diaglogflow.js b/adapter/diaglogflow.js index 284ccac..d5ecd49 100644 --- a/adapter/diaglogflow.js +++ b/adapter/diaglogflow.js @@ -20,6 +20,7 @@ const sessionClient = new dialogflow.SessionsClient(CONFIGURATION); // Detect intent method const detectIntent = async (queryText) => { + let media = null; const sessionId = nanoid.nanoid() const sessionPath = sessionClient.projectAgentSessionPath(PROJECID, sessionId); const languageCode = process.env.LANGUAGE @@ -37,18 +38,24 @@ const detectIntent = async (queryText) => { const [singleResponse] = responses; const { queryResult } = singleResponse 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 = { - replyMessage:queryResult.fulfillmentText, - media:null, - trigger:null + replyMessage: queryResult.fulfillmentText, + media, + trigger: null } - return parseData } -const getDataIa = (message = '',cb = () => {}) => { +const getDataIa = (message = '', cb = () => { }) => { detectIntent(message).then((res) => { cb(res) }) diff --git a/adapter/index.js b/adapter/index.js index 0caefd8..055e5c1 100644 --- a/adapter/index.js +++ b/adapter/index.js @@ -32,19 +32,21 @@ const get = (message) => new Promise((resolve, reject) => { }); } +}) + +const getIA = (message) => new Promise((resolve, reject) => { /** * Si usas dialogflow */ - if (process.env.DATABASE === 'dialogflow') { + if (process.env.DATABASE === 'dialogflow') { let resData = { replyMessage: '', media: null, trigger: null } getDataIa(message,(dt) => { - resData = { ...resData, ...{ replyMessage: dt.replyMessage } } + resData = { ...resData, ...dt } resolve(resData) }) } }) - const reply = (step) => new Promise((resolve, reject) => { /** * 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 } \ No newline at end of file +module.exports = { get, reply, getIA } \ No newline at end of file diff --git a/app.js b/app.js index f438e3f..3c68f27 100644 --- a/app.js +++ b/app.js @@ -47,6 +47,9 @@ const listenMessage = () => client.on('message', async msg => { if (process.env.DATABASE === 'dialogflow') { const response = await bothResponse(message); await sendMessage(client, from, response.replyMessage); + if(response.media){ + sendMedia(client, from, response.media); + } return } diff --git a/controllers/flows.js b/controllers/flows.js index d4f9927..a8b4d5c 100644 --- a/controllers/flows.js +++ b/controllers/flows.js @@ -1,4 +1,4 @@ -const {get, reply} = require('../adapter') +const {get, reply, getIA} = require('../adapter') const {saveExternalFile} = require('./handle') const getMessages = async (message) => { @@ -16,7 +16,11 @@ const responseMessages = async (step) => { } 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 } diff --git a/controllers/handle.js b/controllers/handle.js index 1ef6c69..dc5ab6d 100644 --- a/controllers/handle.js +++ b/controllers/handle.js @@ -12,17 +12,22 @@ const cleanNumber = (number) => { const saveExternalFile = (url) => new Promise((resolve, reject) => { const ext = url.split('.').pop() const checkProtocol = url.split('/').includes('https:'); - console.log(checkProtocol) const handleHttp = checkProtocol ? https : http; const name = `${Date.now()}.${ext}`; const file = fs.createWriteStream(`./mediaSend/${name}`); - const request = handleHttp.get(url, function(response) { - const ext = response.headers['content-type'].split('/').pop() + console.log(url) + handleHttp.get(url, function(response) { + console.log('aaaa') response.pipe(file); file.on('finish', function() { file.close(); // close() is async, call cb after close completes. 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} \ No newline at end of file diff --git a/mediaSend/.gitkeep b/mediaSend/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mediaSend/curso-1-1.png b/mediaSend/curso-1-1.png deleted file mode 100644 index a243f7f..0000000 Binary files a/mediaSend/curso-1-1.png and /dev/null differ diff --git a/mediaSend/curso-2.png b/mediaSend/curso-2.png deleted file mode 100644 index c2ac4ba..0000000 Binary files a/mediaSend/curso-2.png and /dev/null differ diff --git a/mediaSend/curso-3.png b/mediaSend/curso-3.png deleted file mode 100644 index ee7ad75..0000000 Binary files a/mediaSend/curso-3.png and /dev/null differ diff --git a/mediaSend/meme-1.png b/mediaSend/meme-1.png deleted file mode 100644 index 60bbf8a..0000000 Binary files a/mediaSend/meme-1.png and /dev/null differ