I wanted to get some data from mongodb (using mongoose framework) but unable to get the data,
previously i was using callback method as described here to getting data which was working well for me in "action on google v1" but not working in v2,
then i read here that we must need to use promise in order to make async call in "action on google v2", then i refactored my code according to the instruction of Mr. @prisoner in the question above
you can see my code here:
import * as functions from 'firebase-functions';
import {
dialogflow,
SimpleResponse,
Suggestions,
DialogflowConversation,
DialogflowApp
} from 'actions-on-google'
import { Model } from './db'
const app = dialogflow({ debug: false })
app.middleware((conv) => {
conv["hasScreen"] =
conv.surface.capabilities.has('actions.capability.SCREEN_OUTPUT');
conv["hasAudioPlayback"] =
conv.surface.capabilities.has('actions.capability.AUDIO_OUTPUT');
});
app.intent('Get Some Data', (conv) => {
console.log("Get Some Data Intent triggered")
return new Promise(function (resolve, reject) {
Model.find({}, (err, result: any) => {
if (!err) {
if (!result.length) {
console.log("no data found")
conv.ask(new SimpleResponse({
speech: "no data found"
}))
resolve();
} else {
console.log("lots of data found")
conv.ask(new SimpleResponse({
speech: "lots of data found"
}));
resolve();
}
} else {
console.log("Error in getting data: ", err);
conv.ask(new SimpleResponse({
speech: "Error in getting data"
}))
resolve();
}
})
})
});
exports.webhook = functions.https.onRequest(app);
it is still not working for me, and function is ending with timeout
Actually i have my app up and running properly in v1, and now I'm trying to migrate from v1 to v2 since i need to use some latest features which are not available in v1 like voice authentication and other new features. any help will be warmly welcomed