Creación de funciones sin servidor con AWS Lambda para ejecutar un SmartFlow

Este tutorial lo guiará en la creación de una función sin servidor usando AWS Lambda para ejecutar un SmartFlow.

  1. Inicie Sesión/Cree una Cuenta AWS y seleccione Lambda en la Consola de Administración de AWS.

2. Clic en Crear una función Lambda.

3. Elija Use a blueprint (Use un proyecto), escriba hola en el cuadro y seleccione el ejemplo Hello-World (Hola Mundo) para el configurar el idioma deseado.

4.  Nombre y Describa su Lambda. Seleccione Crear un nuevo rol con permisos básicos de Lambda.

5.  Clic en Crear Función en la parte inferior de la página.

6. Reemplace el código predeterminado con la siguiente información:

const https = require('https');
exports.handler = async (event, context) => {
   return new Promise((resolve, reject) => {
       postSmartFlowsData(event.user_id, event.text)
           .then((response) => {
               const data = JSON.parse(response);
               context.succeed('Smartflows sent: ' +JSON.parse(response).msgBody);
           })

           .catch((err) => {
           //set an optional error message here
               context.fail( err.message);
           })
   });
};
const postSmartFlowsData = function(intent, msgText) {
   return new Promise((resolve, reject) => {
       var https = require('https');

       var data = JSON.stringify({
                   ANI: '',
                   msgIntent: intent,
                        msgBody: msgText,
                   DNIS: '',
                   flowId: ''

<>

           });

       const options = {

           host : "smart-flows.intelepeer.com",
           protocol: "https:",
           method : "POST",
           port:443,
           path: "/v2/api/apitriggers",
           headers : {
               "Content-Type": "application/json",
               "Accept": "application/json",
                "Content-Length" : Buffer.byteLength(data)
           },
           body: data
       };

       console.log(options);
       const req = https.request(options,(response) => {
           if (response.statusCode  299) {
               reject(new Error('Failed with status code: ' + response.statusCode));
           }

           const body = [];

           response.on('data', (chunk) => body.push(chunk));
           response.on('end', () => resolve(body.join('')));
       });

       req.on('error', (err) => reject(err));

       req.write(data);
       req.end();
})
};
Habilite el acceso a su función

Los extractos de esta sección son tomados de: https://forums.aws.amazon.com/thread.jspa?messageID=673012&tstart=0#673012

  1. Ahora que tenemos la configuración del código, necesitamos ejecutar el código. Seleccione Añadir Activador.

2.  Seleccione API Gateway (Gateway API), luego API para Create a new API (Crear una nueva API), seleccione REST API Template (Plantilla API REST), seleccione Security to Open (Seguridad a Abierta) y clic en ADD (Añadir).

3. Seleccione su API desde la configuración API Gateway.

4.  Clic en el botón Create Method (Crear Método) en la parte superior derecha y seleccione POST (Publicar) desde el menú desplegable a la izquierda (clic en la pequeña marca).

5. En el tipo de integración, seleccione Lambda function (Función Lambda), luego seleccione la región para la cual su cuenta AWS está configurada y comience a escribir para que aparezca una lista de sus lambdas.

  1. Clic en “Save” (Guardar).

 

  1. En la siguiente pantalla, clic en el cuadro Integration Request (Solicitud de Integración) y desplácese hacia abajo hasta encontrar la sección Mapping Requests (Solicitudes de Mapeo).

8.  Clic en Add mapping template (Añadir plantilla de mapeo) y escriba application/x-www-form-urlencoded en el cuadro y clic en la pequeña marca. Clic en el pen icon (ícono del lápiz) cerca de la palabra Input passthrough y seleccione Mapping template (Plantilla de Mapeo) desde el menú desplegable.

9. En el Template box (Cuadro de plantilla), inserte este código:

## convert HTML POST data or HTTP GET query string to JSON

## get the raw post data from the AWS built-in variable and give it a nicer name
#if ($context.httpMethod == "POST")
#set($rawAPIData = $input.path('

10.  Clic en la pequeña marca para guardar estas configuraciones y seleccione Deploy API (Desplegar API).

11.  En la ventana emergente siguiente, seleccione New stage (Nueva fase) y escriba prod en el mismo Stage name (Nombre de fase). Clic en Deploy (Desplegar) para obtener su código en línea.

12.  En la parte superior de la página, debería ver una URL HTTPS (similar a https://xyz.execute-api.zone-1.amazonaws.com/prod).