El monitoreo de un sistema productivo es una actividad que es inherente al ciclo de vida de todo proyecto. Recientemente surgió la necesidad para que el equipo de operaciones pudiera recibir cierto tipos de alerta de una manera más expedita desde un sistema que esta on premise.

Hasta el momento se tenía configurado que todas las alertas llegaran por correo electrónico y analizando varios de los servicios de AWS decidí emplear Pinpoint para poder suplir este requerimiento.

En este artículo les explicaré como hacerlo y poder empezar a usar diversos servicios de AWS que resultan sumamente interesantes.

AWS Pinpoint


AWS Pinpoint fue diseñado para permitir que los expertos de mercadeo y los desarrolladores puedan brindar mejores experiencias a los clientes de una empresa. Una de las maneras en que se logra es por medio de enviar mensajes a nuestros clientes a través de múltiples canales con confianza y sin importar la ubicación geográfica de los mismos. Dos de estos medios es SMS y voz.

Y precisamente me valí de está última opción para poder cumplir con mi requerimiento.

Configuración

El primer paso es crear un nuevo proyecto en AWS Pinpoint, como se muestra de seguido.

Ejemplo

Luego se debe configurar el elemento de SMS y voz.

Ejemplo

Debemos ir a la parte de configuración avanzada y seleccionar un long code. Este es un número telefónico desde el cuál se realizarán las llamadas a nuestros sysops.

Ejemplo

Es importante que seleccionemos el país o región de nuestro interés, existen muchos países a elegir, en mi caso Costa Rica no esta disponible, por lo cual seleccione Estados Unidos.

Ejemplo

Observen que hay dos tipos de llamadas:

  • Transaccional. El cual se emplea cuando el mensaje es sensitivo en tiempo o crítico. Lo que es mi caso.
  • Promocional. Cuando se trata de mensajes que no son críticos.

Aquí aclaro que un short code es un número especial de entre 3 a 7 dígitos y se usa para casos más particulares con un costo diferente; pero como en nuestro caso no me interesa el número que se me asigne, decidí seleccionar el long code.

Una vez que se crea, podemos observar los números que se nos asignan.

Ejemplo

Aquí debo hacer notar que, dado que seleccione una cuenta en USA, tuve que abrir un tiquete de soporte con AWS para pasar la cuenta del ambiente de pruebas de Pinpoint al ambiente de producción. La razón de esto es que en pruebas no puedo hacer llamadas fuera del territorio de USA, este proceso demorá cerca de 2 días hábiles.

¿Cómo usarlo?

Una vez que tenemos la configuración lista, podemos comenzar a desarrollar nuestro código.

Primeramente debemos colocar la dependencia necesaria en nuestro pom.

<dependency>
     <groupId>com.amazonaws</groupId>
     <artifactId>aws-java-sdk-pinpointsmsvoice</artifactId>
     <version>1.11.592</version>
 </dependency>

Para poder realizar la conexión a los servicios de AWS empleé un access key; para los efectos del artículo he colocado datos temporales. Luego, debemos indicar el endpoint de la costa este del servicio de voz como elemento de configuración y por último obtener el cliente de AWS Pinpoint.

BasicAWSCredentials awsCreds =
           new BasicAWSCredentials("accessKey", "secretKey");
EndpointConfiguration endpoint =
             new AwsClientBuilder
                       .EndpointConfiguration("sms-voice.pinpoint.us-east-1.amazonaws.com",
                       "us-east-1");
AmazonPinpointSMSVoiceClientBuilder builder
            = AmazonPinpointSMSVoiceClientBuilder.standard();

builder.withCredentials(new AWSStaticCredentialsProvider(awsCreds));
builder.setEndpointConfiguration(endpoint);
AmazonPinpointSMSVoice client = builder.build();

Para enviar el mensaje de voz debemos definir el request en donde establecemos lo siguiente:

  • Número de Destino. Es el número al cual deseamos enviar el mensaje, este debe ir en formato E.164. Por ejemplo, para llamar a un número en Costa Rica debemos escribir: +506 como código de páis seguido del número local.
  • Número de Origen. Este debe ser el número que nos brindaron en el paso de configuración, de nuevo en formato E.164.
  • Código de Idioma. Es el idioma en el cual deseamos enviar el mensaje, en nuestro caso usaré idioma español europeo (es-ES). Pero existen muchas opciones adicionales que pueden revisar aquí.
  • Voz. Esta es la voz de Amazon Polly que queremos usar para enviar el mensaje, para el ejemplo usaré Lucia. Hay muchas opciones de voz de acuerdo al código de idioma que seleccionamos previamente, pues ver la lista aquí.
  • Mensaje. Este es el mensaje que deseamos enviar por voz. Corresponde a un texto en SSML - Speech Synthesis Markup Language.

Un ejemplo de un mensaje es este:

<speak>Buenos días,  
  <emphasis>hoy es lunes</emphasis>
  y este es un mensaje de prueba
  <break strength='weak'/> con un ejemplo de pausas.
  <amazon:effect phonation='soft'> y un efecto de volumen.</amazon:effect></speak>

Finalmente, el código que engloba esa parametrización es el siguiente:

SendVoiceMessageRequest request = new SendVoiceMessageRequest()
       .withDestinationPhoneNumber(destinationNumber)
       .withOriginationPhoneNumber(originationNumber)
       .withContent(new VoiceMessageContent()
               .withSSMLMessage(new SSMLMessageType()
                       .withLanguageCode(languageCode)
                       .withVoiceId(voiceName)
                       .withText(ssmlMessage)
               )
       );
client.sendVoiceMessage(request);

Una vez que ejecutemos este código recibiremos una llamada que nos dirá en español con una voz determinada el texto que hemos establecido. En mi caso, el texto detalle el problema detectado y otros elementos que agilizan la atención de una falla que se considera crítica.

Conclusión


Esperamos que con este artículo los lectores conozcan de uno de los productos que brinda AWS y cómo podemos usarlo para resolver algunos escenarios de notificaciones de una manera sencilla. Y por supuesto, considerarlo en otro tipo de iniciativas que surgan en su día a día.