es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuál es la forma más simple de implementar un AWS Lex y Lambda existente como un Alexa Skills Kit (ASK)?

Actualmente tengo un bot Lex que requiere una función Lambda en mi cuenta AWS. Quiero convertir este bot existente en una habilidad Alexa pero no puedo migrarlo fácilmente.

Lo que he hecho hasta ahora:

  • Publiqué una versión del bot Lex y lo exporté como ASK
  • Importé el archivo JSON en el editor JSON del Alexa Developer Console
  • Seguí este tutorial para dar acceso entre mi habilidad Alexa y mi función Lambda

He revisado los registros de CloudWatch y la habilidad Alexa parece estar llamando a mi función correctamente, sin embargo, no cumple con la intención. Cuando llega al final del diálogo para una intención, la habilidad Alexa solo dice:

You just triggered [IntentName]

Entiendo que el formato JSON es diferente para Alexa y Lex y los formatos de retorno son los siguientes:

// Retorna Alexa
return handlerInput.responseBuilder
        .speak(speakOutput)
        .reprompt(speakOutput)
        .getResponse();

// Retorna AWS Lex
return {
  sessionAttributes: attributes,
  dialogAction: {
    type: 'Close',
    fulfillmentState: fulfillStatus,
    message: {
      contentType: "PlainText",
      content: messageContent,
    }
  }
};

¿Existe alguna forma sencilla de convertir mi función Lambda existente para que funcione con una habilidad Alexa sin necesidad de volver a escribir todo desde cero?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Conversión de un Bot de Lex a una Habilidad de Alexa con una función Lambda existente

    Desafortunadamente, no existe una manera sencilla de convertir una función Lambda de AWS existente utilizada con un bot de Lex para que funcione con una Habilidad de Alexa sin modificar el código. Esto se debe a que los formatos de JSON y de retorno son bastante diferentes entre las dos plataformas.

    Sin embargo, es posible que pueda reutilizar algo de su código existente modificándolo para que se adapte a los requisitos de Alexa. Específicamente, necesitaría cambiar el formato de respuesta para que coincida con el formato esperado por Alexa.

    Para hacer esto, puede utilizar el SDK de Alexa Skills Kit para Node.js, que proporciona un conjunto de funciones predefinidas para construir respuestas que sean compatibles con Alexa. Puede instalar el SDK usando npm:

    npm install --save ask-sdk-core ask-sdk-model
    

    Luego, puede modificar su función Lambda para que use los constructores de respuesta del SDK para construir la respuesta. Aquí hay un ejemplo de cómo podría modificar su manejador existente:

    const Alexa = require('ask-sdk-core');
    
    async function handler(event, context) {
      try {
        const intentName = event.request.intent.name;
        let speakOutput = '';
    
        if (intentName === 'HelloWorldIntent') {
          speakOutput = '¡Hola, bienvenido a mi Habilidad de Alexa!';
        } else if (intentName === 'MyCustomIntent') {
          speakOutput = 'Este es mi intento personalizado.';
        } else {
          speakOutput = 'No entiendo ese comando.';
        }
    
        return Alexa.ResponseBuilder
          .speak(speakOutput)
          .getResponse();
      } catch (err) {
        console.log(err);
        return Alexa.ResponseBuilder
          .speak('Lo siento, hubo un error al procesar su solicitud.')
          .getResponse();
      }
    }
    

    En este ejemplo, estamos utilizando Alexa.ResponseBuilder para construir la respuesta. El método speak() establece la salida de voz que Alexa dirá, mientras que el método getResponse() devuelve el objeto de respuesta final.

    Por supuesto, deberá personalizar este código para que se adapte a sus intenciones y casos de uso específicos. Sin embargo, utilizar el SDK de Alexa Skills Kit puede hacer que sea más fácil convertir su función Lambda existente para que funcione con Alexa.

    Una vez que haya modificado su función Lambda para que use el SDK de Alexa Skills Kit, puede seguir los mismos pasos que utilizó para publicar su bot de Lex como una Habilidad de Alexa. Importe el archivo JSON en el Editor JSON del Alexa Developer Console y asegúrese de que su función Lambda esté configurada como el punto final de su Habilidad de Alexa.

    ¡Buena suerte y feliz codificación!

Comments are closed.