Esto no se realiza a través de ningún editor de código de terceros. Esto es a través de la Consola de desarrollador de Alexa.
Estoy intentando crear una habilidad para que mi escuela obtenga las actualizaciones actuales si la escuela está cerrada, tiene un retraso de dos horas, etc.
Este es el código que lo maneja:
const GetCurrentUpdateHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
&& Alexa.getIntentName(handlerInput.requestEnvelope) === 'GetCurrentUpdate'
},
handle(handlerInput) {
let speakOutput = ""
axios.get("District Link")
.then(res => {
const dom = new JSDOM(res.data)
const msgs = dom.window.document.getElementById("onscreenalert-ctrl-msglist")
const useless = msgs.querySelectorAll("input")
useless.forEach(function (el) {
el.parentNode.removeChild(el)
})
const message = msgs.innerText
if (message === undefined) {
console.log("no messages")
speakOutput = "There are currently no messages."
finishReq(speakOutput)
} else {
console.log("message")
speakOutput = `Here is a message from District. ${msgs.innerText}`
finishReq(speakOutput)
}
})
function finishReq(output) {
return handlerInput.responseBuilder
.speak(output)
.getResponse();
}
}
}
Recibo el mensaje "SpeechletResponse fue nulo" error.
------------------------------------
Dos cosas...
Debido a la promesa en axios.get, la función en sí podría terminar y no devolver nada antes de que se cumpla la promesa.
Considere utilizar async-await para obtener los resultados de la llamada axios.get de forma sincrónica.
finishReq devuelve el generador de respuestas a la función que lo llamó, no como resultado del controlador. Entonces, incluso si usa async-await, envolver el retorno del controlador en una función lo redirige y no lo devuelve al SDK para su transmisión a Alexa.
Entonces:
async handle(handlerInput)
const res = await axios.get(...)
Desenvuelva el código .then y finishReq para que esté todo en el alcance del controlador.
Respondido
20 de marzo de 2021 a las 19:30
LetMyPeopleCode
LetMyPeopleCode
1.905
15
15 insignias de plata
20
20 insignias de bronce
0
------------------------------------
Para otras personas que puedan encontrar esta publicación, su administrador no devuelve nada; es por eso que recibes el error.
Necesitas:
return axios.get("District Link")
.then(res => {
y
return finishReq(speakOutput)
para los dos lugares a los que llamas FinishReq.
Respondido
24 de noviembre de 2021 a las 14:50
todos los pies
todos los pies
61
2
2 insignias de bronce
1
¡Guau! Gracias por la respuesta. Es un poco tarde, pero esto definitivamente ayudará a otros cuando reciban este error, porque es muy ambiguo
-IceBotYT
24 de noviembre de 2021 a las 14:57