-
-
Save manudevcode/00cfc61278253e8267091674de6c01be to your computer and use it in GitHub Desktop.
| const Alexa = require('ask-sdk') | |
| const admin = require('firebase-admin') | |
| var serviceAccount = require('./testing-iot-19f5e-firebase-adminsdk-oj631-6d9d70e282.json') | |
| admin.initializeApp({ | |
| credential: admin.credential.cert(serviceAccount), | |
| databaseURL: 'https://testing-iot-19f5e.firebaseio.com' | |
| }) | |
| const GetNewFactHandler = { | |
| canHandle (handlerInput) { | |
| const request = handlerInput.requestEnvelope.request | |
| return request.type === 'LaunchRequest' || | |
| (request.type === 'IntentRequest' && request.intent.name === 'Traductor') | |
| }, | |
| async handle (handlerInput) { | |
| var db = admin.database() | |
| var ref = db.ref('bombas') | |
| // Guardado en db | |
| await ref.child('bomba0').set({ | |
| on: true | |
| }).then(() => { | |
| }) | |
| const factArr = data | |
| const factIndex = Math.floor(Math.random() * factArr.length) | |
| const randomFact = factArr[factIndex] | |
| const speechOutput = GET_FACT_MESSAGE + randomFact | |
| return handlerInput.responseBuilder | |
| .speak(speechOutput) | |
| .withSimpleCard(SKILL_NAME, randomFact) | |
| .getResponse() | |
| } | |
| } | |
| const HelpHandler = { | |
| canHandle (handlerInput) { | |
| const request = handlerInput.requestEnvelope.request | |
| return request.type === 'IntentRequest' && | |
| request.intent.name === 'AMAZON.HelpIntent' | |
| }, | |
| handle (handlerInput) { | |
| return handlerInput.responseBuilder | |
| .speak(HELP_MESSAGE) | |
| .reprompt(HELP_REPROMPT) | |
| .getResponse() | |
| } | |
| } | |
| const ExitHandler = { | |
| canHandle (handlerInput) { | |
| const request = handlerInput.requestEnvelope.request | |
| return request.type === 'IntentRequest' && | |
| (request.intent.name === 'AMAZON.CancelIntent' || request.intent.name === 'AMAZON.StopIntent') | |
| }, | |
| handle (handlerInput) { | |
| return handlerInput.responseBuilder | |
| .speak(STOP_MESSAGE) | |
| .getResponse() | |
| } | |
| } | |
| const SessionEndedRequestHandler = { | |
| canHandle (handlerInput) { | |
| const request = handlerInput.requestEnvelope.request | |
| return request.type === 'SessionEndedRequest' | |
| }, | |
| handle (handlerInput) { | |
| console.log(`Session ended with reason: ${handlerInput.requestEnvelope.request.reason}`) | |
| return handlerInput.responseBuilder.getResponse() | |
| } | |
| } | |
| const ErrorHandler = { | |
| canHandle () { | |
| return true | |
| }, | |
| handle (handlerInput, error) { | |
| console.log(`Error handled: ${error.message}`) | |
| return handlerInput.responseBuilder | |
| .speak('Lo siento ocurrió un error.') | |
| .reprompt('Lo siento, ha ocurrido un error.') | |
| .getResponse() | |
| } | |
| } | |
| const SKILL_NAME = 'Robot Traductor' | |
| const GET_FACT_MESSAGE = 'Ahí va: <break time="1s"/> ' | |
| const HELP_MESSAGE = 'Hola puedes pedimre traducir algo a lenguaje robot.' | |
| const HELP_REPROMPT = '¿Cómo puedo ayudarte?' | |
| const STOP_MESSAGE = 'Adiós!' | |
| const data = [ | |
| '<audio src="https://robot-traductor.s3-us-west-2.amazonaws.com/texto_1.mp3"/> <break time="1s"/> ¿Que tal?' | |
| ] | |
| const skillBuilder = Alexa.SkillBuilders.standard() | |
| exports.handler = skillBuilder | |
| .addRequestHandlers( | |
| GetNewFactHandler, | |
| HelpHandler, | |
| ExitHandler, | |
| SessionEndedRequestHandler | |
| ) | |
| .addErrorHandlers(ErrorHandler) | |
| .lambda() |
as you show in last one i did not get any out put in form of utterance.
@yashsm01 did you find a solution for this problem
?
@amalkhaled225 no friend, tell me if you find any solution for this.
@yashsm01 did you find a solution for this problem
?
The problem could cause by using "firebase admit", which has storage power and hard to force to stop running. So Alexa Service may show an error- "time out". If so, the following way works for me.
step1: import "firebase instead of "firebase-admin", code modify to as following:
const admin = require('firebase');
admin.initializeApp({serviceAccount)
})
step2: no need "async" before handle;
step2: using "goOffline()":
const result = new Promise((resolve) => { ref.set({ _" the data you want to set"_) }, () => {db.goOffline(); resolve(_" the result you want to get"_)}); });
Hope it will be helpful.
Could you please elaborate step 2? I tried implementing but I am getting the same error.
Could you please elaborate step 2? I tried implementing but I am getting the same error.
I mean, if using step 3, then u do not need to use Async await simultaneously. The following both works:
- medthod1: promis.then() (as the same as step 3, I said above):
handle(handlerInput) {
let response = { apiResponse:{ _" the arg"_}};
var db = firebase.database();
var ref = db.ref( _" the data location on firebase"_);
const result = new Promise((resolve) => {
ref.set(
{ _" the data you want to set"_) },
() => {
db.goOffline();
resolve(response)}
);
});
return result;
}
- medthod2: async await:
async handle(handlerInput) {
let response = { apiResponse:{ _" the arg"_}};
var db = firebase.database();
var ref = db.ref( _" the data location on firebase"_);
const result = await ref.set({ _" the data you want to set"_));
db.goOffline();
return response;

a use this code to make interaction with firebase and Alexa and it gave output in firebase Realtime database but i also show error in JSON Output 1 (ex:- There was a problem with the requested skill's response(voice)). how can i solve this problem?