En este capítulo, veremos lo siguiente:
• Enviar una notificación por correo electrónico al administrador de un sitio web mediante el servicio SendGrid
• Enviar una notificación de correo electrónico dinámicamente al usuario final
• Implementar el registro de correo electrónico en Azure Blob Storage
• Modificar el contenido del correo electrónico para incluir un archivo adjunto
• Enviar una notificación por SMS al usuario final utilizando el servicio Twilio
Introducción
Para que cada aplicación empresarial ejecute sus operaciones comerciales sin problemas, una de las características clave es tener un sistema de comunicación fiable entre la empresa y sus clientes. El canal de comunicación puede ser bidireccional, ya sea enviando un mensaje a los administradores que gestionan la aplicación o enviando alertas a los clientes por correo electrónico o SMS a sus teléfonos móviles.
Azure puede integrarse con dos servicios de comunicación populares: SendGrid para correos electrónicos y Twilio para trabajar con SMS. En este capítulo, usaremos estos dos servicios de comunicación para descubrir cómo aprovechar sus servicios básicos para enviar mensajes entre los administradores empresariales y los usuarios finales.
A continuación, se muestra la arquitectura que usaremos para utilizar los enlaces
de salida de SendGrid y Twilio con el desencadenador de HTTP y el desencadenador
de cola.
Enviar una notificación por correo electrónico al administrador de un sitio web mediante el servicio SendGrid
En esta receta, descubrirás cómo crear un enlace de salida de SendGrid y enviar una notificación por correo electrónico, con contenido estático, al administrador del sitio web. Nuestro caso de uso solo involucra a un administrador, por lo que codificaremos la dirección de correo electrónico del administrador en el campo. Destinatario del enlace de salida (mensaje) de SendGrid.
Preparación
Seguiremos estos pasos antes de continuar:
- Crear una clave de API de la cuenta de SendGrid desde el portal
de administración de Azure - Generar una clave de API desde el portal de SendGrid
- Configurar la clave de API de SendGrid con la aplicación Azure Function
Creación de una cuenta de SendGrid
Sigue estos pasos:
- Desplázate al portal de administración de Azure y crea una cuenta
de Entrega de correo electrónico de SendGrid buscándola en el marketplace,
como se muestra en la siguiente captura de pantalla:
- En la hoja Entrega de correo electrónico de SendGrid, haz clic en el botón
Crear para ir a Crear una nueva cuenta de SendGrid. Selecciona gratis en
las opciones de Nivel de precios, proporciona todos los demás detalles y,
a continuación, haz clic en el botón Crear, como se muestra en la siguiente
captura de pantalla:
En el momento de la redacción, la cuenta gratuita de SendGrid
nos permite enviar 25 000 correos electrónicos gratuitos al mes.
Si deseas enviar más correos electrónicos, puedes obtener una
cuenta de nivel Silver S2, donde dispondrías de 100 000 correos
electrónicos al mes.
- Una vez creada la cuenta correctamente, desplázate hasta Cuentas de
SendGrid. Puedes usar el cuadro de búsqueda disponible en la parte
superior, como se muestra en la siguiente captura de pantalla:
- Ve a Configuración, selecciona Configuraciones y recupera USERNAME
y SMTP SERVER de la hoja Configuraciones, como se muestra en la
siguiente captura de pantalla:
Generar una clave de API desde el portal de SendGrid
Sigue estos pasos:
- Para poder utilizar la cuenta de SendGrid en el runtime de Azure Functions,
debemos proporcionar la clave de API de SendGrid como una entrada
de Azure Functions. Puedes generar una clave de API desde el portal
de SendGrid. Vayamos al portal de SendGrid haciendo clic en el botón
Administrar en la hoja Essentials de la cuenta de SendGrid, como se
muestra en la siguiente captura de pantalla:
- En el portal de SendGrid, haz clic en Claves de API en la sección
Configuración del menú del lado izquierdo, como se muestra en la
siguiente captura de pantalla:
- En la página Claves de API, haz clic en Crear clave de API, como se
muestra en la siguiente captura de pantalla:
- En la ventana emergente Crear clave de API, proporciona un nombre
y selecciona Permisos de clave de API y, a continuación, haz clic en el botón
Crear y ver. - Al cabo de unos momentos, podrás ver la clave de API. Haz clic en la clave
para copiarla en el portapapeles, como se muestra en la siguiente captura
de pantalla:
Configurar la clave de API de SendGrid con la aplicación Azure Function
Sigue estos pasos:
- Crea una nueva Configuración de la aplicación en la aplicación Azure
Function desplazándote hasta la hoja Configuración de la aplicación, que
se encuentra en la sección Características de la plataforma de la aplicación
de función, como se muestra en la siguiente captura de pantalla:
2. Haz clic en el botón Guardar después de añadir la configuración de la
aplicación en el paso anterior.
Cómo hacerlo…
En esta sección, seguiremos estos pasos.
- Crear un enlace de la cola de almacenamiento al desencadenador de HTTP
- Crear un desencadenador de cola para procesar el mensaje del
desencadenador de HTTP - Crear un enlace de salida de SendGrid al desencadenador de cola
- Crear un enlace de salida de Twilio al desencadenador de cola
Crear un enlace de la cola de almacenamiento al desencadenador de HTTP
Sigue estos pasos:
- Ve a la pestaña Integrar de la función RegisterUser y haz clic en el botón
Nueva salida para añadir un nuevo enlace de salida. - Selecciona Azure Queue Storage y haz clic en el botón Seleccionar para
añadir el enlace y proporcionar los valores que se muestran a continuación;
luego, haz clic en el botón Guardar. Escribe el nombre de la cola (en este
caso, notificationqueue) que se usará en un momento.
- Desplázate hasta el método Run de la función RegisterUser y realiza los
siguientes cambios resaltados. Hemos añadido otro enlace de salida de
cola y un mensaje de salida para desencadenar la función Desencadenador
de cola. Por el momento, no hemos añadido ningún mensaje a la cola.
Realizaremos cambios al método NotificationQueueItem.AddAsync(«»);
en la próxima receta del capítulo.
public static async Task Run(
HttpRequest req,
CloudTable objUserProfileTable,
IAsyncCollector objUserProfileQueueItem,
IAsyncCollector NotificationQueueItem,
ILogger log)
{
log.LogInformation(«C# HTTP trigger function processed a
request.»);
string firstname=null,lastname = null;
…
…
await NotificationQueueItem.AddAsync(«»);
return (lastname + firstname) != null
? (ActionResult)new OkObjectResult($»Hello, {firstname + «
» + lastname}»)
: new BadRequestObjectResult(«Please pass a name on the
query» +
«string or in the request body»);
}
Crear un desencadenador de cola para procesar el mensaje del desencadenador de HTTP
- Crea un desencadenador de Azure Queue Storage seleccionando la plantilla
que se muestra a continuación.
- En el paso siguiente, proporciona todo el nombre del desencadenador de
cola y escribe el nombre de la cola que se debe supervisar para enviar las
notificaciones. Después de proporcionar todos los detalles, haz clic en el
botón Crear para crear la función.
- Después de crear la función Desencadenador de cola, vamos a ejecutar la
función RegisterUser para ver si se invoca el desencadenador de cola. Abre
la función RegisterUser en una pestaña nueva y pruébala haciendo clic en
el botón Ejecutar. En la ventana Registros de la pestaña SendNotifications,
deberías ver algo parecido a lo que se muestra a continuación:
Después de asegurarnos que el desencadenador de cola funciona como se esperaba,
vamos a crear los enlaces de SendGrid para enviar el correo electrónico.
Crear un enlace de salida de SendGrid al desencadenador de cola
- Ve a la pestaña Integrar de la función SendNotifications y haz clic en el botón
Nueva salida para añadir un nuevo enlace de salida. - Selecciona el enlace de SendGrid y haz clic en el botón Seleccionar para
añadir el enlace. - El siguiente paso es instalar las extensiones de SendGrid. Haz clic en el
botón Instalar para instalar las extensiones. La instalación de las extensiones
puede tardar unos minutos. - Proporciona los siguientes parámetros en el enlace de salida (mensaje)
de SendGrid:
° Nombre del parámetro del mensaje: deja el valor predeterminado, que es message. Utilizaremos este parámetro en el método Run en unos momentos.
° Clave de API de SendGrid: selecciona la clave de Configuración de la aplicación que has creado en Configuración de la aplicación para almacenar la clave de API de SendGrid.
° Destinatario: escribe la dirección de correo electrónico del administrador.
° Remitente: escribe la dirección de correo electrónico desde la que deseas enviar el mensaje. Puede ser parecida a donotreply@example.com.
° Asunto del mensaje: proporciona el asunto que deseas que se muestre en el asunto del correo electrónico.
° Texto del mensaje: proporciona el cuerpo del correo electrónico que deseas en el cuerpo del correo electrónico. - A continuación, podemos ver el aspecto del enlace de salida (mensaje)
de SendGrid después de rellenar todos los campos:
- Después de revisar los valores, haz clic en Guardar para guardar los cambios.
- Desplázate hasta el método Run de las funciones SendNotifications y
realiza los siguientes cambios:
° Agrega una referencia nueva para SendGrid, junto con el espacio
de nombres SendGrid.Helpers.Mail.
° Agrega un nuevo mensaje de parámetro del tipo SendGridMessage.
° Crea un objeto del tipo SendGridMessage. Vamos a ver cómo utilizar
este objeto en la siguiente receta. - A continuación, vemos el código completo del método Run:
- Ahora, vamos a probar la funcionalidad de envío del correo electrónico
yendo a la función RegisterUser y enviando una solicitud con algunos
valores de prueba, de la siguiente manera:
Cómo funciona…
El objetivo de esta receta es enviar una notificación por correo electrónico al
administrador, enviándoles una actualización para informarle de que se ha creado
un registro nuevo.
Hemos usado uno de los enlaces de salida de Azure Function, denominado
SendGrid, como un servidor Protocolo simple de transferencia de correo (SMTP)
para enviar nuestros correos electrónicos codificando las propiedades siguientes en
los enlaces de salida (mensaje) de SendGrid:
- El «remitente» del correo electrónico
- El «destinatario» del correo electrónico
- El asunto del correo electrónico
- El cuerpo del correo electrónico
Los enlaces de salida (mensaje) de SendGrid utilizarán la clave de API
proporcionada en Configuración de la aplicación para invocar las API necesarias
de la biblioteca SendGrid para enviar los correos electrónicos.
Y eso no es todo
Al agregar los enlaces de SendGrid, se te solicitará que instales las extensiones como
se muestra a continuación.
Si no las puedes ver, elimina el enlace de salida y vuelve a crearlas. También puedes
instalar manualmente las extensiones si sigues las instrucciones que se mencionan
en el artículo https://docs.microsoft.com/azure/azure-functions/installupdate-
binding-extensions-manual.
Enviar una notificación de correo electrónico dinámicamente al usuario final
En la receta anterior, hemos codificado la mayoría de los atributos relacionados
con el envío de un correo electrónico a un administrador, ya que solo había un
administrador. En esta receta, modificaremos la receta anterior para enviar un
correo electrónico de agradecimiento por inscribirse a los propios usuarios.
Preparación
Asegúrate de que lo siguiente está configurado correctamente:
- Se ha creado la cuenta de SendGrid y se ha generado una clave de API
en el portal de SendGrid. - Se ha creado la Configuración de la aplicación en la Configuración
de la aplicación de la aplicación de la función. - La clave de Configuración de la aplicación se ha configurado en los enl
aces de salida (mensaje) de SendGrid.
Cómo hacerlo…
En esta receta, actualizaremos el código en el archivo run.csx de las siguientes
Azure Functions
- RegisterUser
- SendNotifications
Aceptar el nuevo parámetro de correo electrónico en la función RegisterUser
Sigue estos pasos:
- Ve a la función RegisterUser, que se encuentra en el archivo run.csx,
agrega una nueva variable de cadena que acepte un nuevo parámetro de
entrada, denominada email, desde el objeto de solicitud, de la forma
siguiente. Además, ten en cuenta que estamos serializando el objeto
UserProfile y almacenando el contenido JSON en el mensaje de cola:
string firstname=null,lastname = null, email = null;
…
…
string email = inputJson.email;
…
…
UserProfile objUserProfile = new UserProfile(firstname,
lastname,email);
…
…
await
NotificationQueueItem.AddAsync(JsonConvert.SerializeObject(objUser
Profile)); - Actualiza el siguiente código resaltado de la clase UserProfile y haz clic en
el botón Guardar para guardar los cambios:
public class UserProfile : TableEntity
{
public UserProfile(string firstname,string lastname,
string profilePicUrl,string email)
{
….
….
this.ProfilePicUrl = profilePicUrl;
this.Email = email;
}
….
….
public string ProfilePicUrl {get; set;}
public string Email { get; set; }
}
Recuperar la información de UserProfile en el desencadenador SendNotifications
Sigue estos pasos
- Desplázate hasta la función SendNotifications, en el archivo run.csx,
agrega la referencia NewtonSoft.Json y también el espacio de nombres. - El desencadenador de cola recibirá la entrada en forma de cadena JSON.
Utilizaremos el método JsonConvert.DeserializeObject para convertir la
cadena en un objeto dinámico para que podamos recuperar las propiedades
individuales. Reemplaza el código existente por el código siguiente donde
se rellenan dinámicamente las propiedades de SendGridMessage desde
el código.
- Vamos a ejecutar una prueba agregando un nuevo correo electrónico
de campo de entrada a la carga de la solicitud de pruebas, que se muestra
de la siguiente manera:
4. Esta es la captura de pantalla del correo electrónico que he recibido:
Cómo funciona…
Hemos actualizado el código de la función RegisterUser para aceptar otro
parámetro nuevo, denominado email.
La función acepta el parámetro email y envía el correo al usuario final mediante la
API de SendGrid. También hemos configurado todos los demás parámetros, como
el Remitente, el Asunto y el cuerpo (contenido) del código, para que se personalice
dinámicamente en función de los requisitos.
También podemos borrar los campos de los enlaces de salida de SendGrid, como
se muestra en la siguiente captura de pantalla:
Los valores especificados en el código tendrán prioridad
sobre los otros valores especificados en el paso anterior.
Y eso no es todo…
También puedes enviar contenido HTML en el cuerpo para que el correo electrónico
sea más atractivo. El siguiente es un ejemplo sencillo, en el que acabo de aplicar una
etiqueta de negrita () al nombre de usuario final:
La siguiente es la captura de pantalla del correo electrónico, con mi nombre
en negrita:
Implementar el registro de correo electrónico en Azure Blob Storage
La mayoría de las aplicaciones empresariales de los correos electrónicos
automatizados probablemente impliquen el envío de correos electrónicos que
contengan notificaciones, alertas, etc., al usuario final. A veces, los usuarios pueden
quejarse de que no han recibido ningún correo electrónico, aunque no vemos ningún
error en la aplicación al enviar dichas alertas de notificación.
Puede haber varias razones por las que los usuarios no han recibido el correo
electrónico. Cada uno de los proveedores de servicios de correo electrónico tiene
diferentes filtros de correo no deseado que pueden bloquear los correos electrónicos
de la bandeja de entrada del usuario final. Pero estos correos electrónicos pueden
tener información importante que los usuarios pueden necesitar. Tiene sentido
almacenar el contenido de todos los correos electrónicos que se envían a los usuarios
finales para que podamos recuperar los datos en un paso posterior para solucionar
problemas imprevistos.
En esta receta, aprenderás a crear un nuevo archivo de registro de correo electrónico
con la extensión .log para cada nuevo registro. Este archivo de registro se puede
utilizar como redundancia para los datos almacenados en el almacenamiento de
tablas. También aprenderás a almacenar los archivos de registro de correo electrónico
como un blob en un contenedor de almacenamiento, junto con los datos introducidos
por el usuario final durante el registro.
Cómo hacerlo…
Sigue estos pasos:
- Desplázate hasta la pestaña Integrar de la función SendNotifications,
haz clic en Nueva salida y selecciona Azure Blob Storage. Se te pedirá que
instales las extensiones de almacenamiento; instálalas para continuar. - Proporciona los parámetros necesarios en la sección de salida Azure Blob
Storage, como se muestra en la siguiente captura de pantalla. Ten en cuenta
la extensión .log en el campo Ruta:
- Ve al editor de código del archivo run.csx de la función
SendNotifications y realiza los siguientes cambios:- Añade un nuevo parámetro outputBlob del tipo TextWriter al
método Run. - Añade una nueva variable de cadena denominada emailContent.
Esta variable se utiliza para enmarcar el contenido del correo
electrónico. También utilizaremos la misma variable para crear el
contenido del archivo de registro que se almacena en el blob. - Enmarca el contenido del correo electrónico anexando el texto
estático necesario y los parámetros de entrada recibidos en Cuerpo
de la solicitud, como se indica a continuación:
- Añade un nuevo parámetro outputBlob del tipo TextWriter al
- Ejecuta una prueba con la misma carga de solicitud que usamos en la receta
anterior. - Después de ejecutar la prueba, el archivo de registro se creará en el
contenedor denominado userregistrationemaillogs:
Cómo funciona…
Hemos creado nuevos enlaces de salida de Azure Blob. Tan pronto como se recibe
una nueva solicitud, el contenido del correo electrónico se crea y se escribe en
un nuevo archivo .log (ten en cuenta que también puedes usar cualquier otra
extensión) que se almacena como un blob en el contenedor especificado en el
campo Ruta de los enlaces de salida.
Modificar el contenido del correo electrónico para incluir un archivo adjunto
En esta receta, aprenderás a enviar un archivo como un adjunto al usuario registrado.
En la receta anterior, creamos un archivo de registro del contenido de correo
electrónico. Enviaremos el mismo archivo como un adjunto al correo electrónico.
Sin embargo, en las aplicaciones del mundo real, podrías no desear enviar archivos
de registro al usuario final. Para simplificar la tarea, enviaremos el archivo de
registro como un archivo adjunto.
En el momento de escribir, SendGrid recomienda que el
tamaño del archivo adjunto no exceda los 10 MB, aunque,
técnicamente, el correo electrónico puede llegar a ser de 20 MB
Preparación
Esta receta es una continuación de la receta anterior. Si estás leyendo esto primero,
asegúrate de repasar previamente las recetas de este capítulo.
Cómo hacerlo…
Tendremos que seguir estos pasos antes de continuar:
- Realizar los cambios en el código para crear un archivo de registro con
RowKey de la tabla. Lo lograremos usando la interfaz IBinder. - Enviar este archivo como un archivo adjunto al correo electrónico.
Personalizar el nombre del archivo de registro utilizando la interfaz IBinder
Sigue estos pasos:
- Ve hasta el archivo run.csx de la función SendNotifications.
- Borra el objeto TextWriter y sustitúyelo por el enlazador de variables del
tipo IBinder. A continuación, se muestra la nueva firma del método Run con
los cambios resaltados:
- Hemos eliminado el objeto TextWriter y la función outputBlob.
WriteLine(emailContent); dejará de funcionar. Vamos a sustituirla por
el siguiente fragmento de código:
- Ejecutemos una prueba con la misma carga de solicitud que usamos
en las recetas anteriores. - Puedes ver el archivo de registro de correo electrónico que se crea con la
RowKey del nuevo registro almacenado en el almacenamiento de tablas
de Azure, como se muestra en la siguiente captura de pantalla:
Agregar un archivo adjunto al correo electrónico
Sigue estos pasos:
- Agrega el siguiente código al método Run de la función SendNotifications
y guarda los cambios haciendo clic en el botón Guardar:
- Ejecuta una prueba usando la misma carga de solicitud que hemos usado en
las recetas anteriores.
- Esta es la captura de pantalla del correo electrónico, junto con el archivo
adjunto:
Puedes obtener más información sobre la API de SendGrid en
https://sendgrid.com/docs/API_Reference/api_v3.html
Enviar una notificación por SMS al usuario final utilizando el servicio Twilio
En la mayoría de las recetas anteriores de este capítulo, hemos trabajado con
desencadenadores SendGrid para enviar correos electrónicos en diferentes
escenarios. En esta receta, aprenderás a enviar notificaciones a través de SMS,
utilizando Twilio, una de las plataformas de comunicación en el cloud líderes
en el sector.
También puedes obtener más información
acerca de Twilio en
https://www.twilio.com/.
Preparación
Par poder usar el enlace Twilio SMS output (objsmsmessage), tenemos que hacer
lo siguiente:
- Crear una cuenta de prueba de Twilio en https://www.twilio.com/trytwilio.
- Después de haber creado la cuenta correctamente, toma ACCOUNT SID
y AUTH TOKEN del panel de Twilio, como se muestra en la siguiente
captura de pantalla. Crearemos dos configuraciones de la aplicación en la
hoja Configuración de la aplicación de la aplicación de función para dos
de estas configuraciones:
- Para empezar a enviar mensajes, debes crear un número activo en Twilio,
que se utilizará como número remitente para enviar el SMS. Puedes crear
y administrar números en el panel de números de teléfono. Desplázate
hasta https://www.twilio.com/console/phone-numbers/incoming y haz
clic en el botón Primeros pasos, como se muestra en la siguiente captura
de pantalla:
- En la página Primeros pasos con números de teléfono, haz clic en Obtén tu
primer número de teléfono Twilio, como se muestra en la siguiente captura
de pantalla:
5. Después de obtenerlo, se enumerará de la siguiente manera:
- El último paso es verificar un número al que te gustaría enviar un SMS. Solo
puedes tener un número en la cuenta de prueba. Puedes verificar un número
en la página Verified de Twilio, disponible en https://www.twilio.com/
console/phone-numbers/verified. A continuación, vemos una captura
de pantalla de la lista de números verificados:
Cómo hacerlo…
Sigue estos pasos:
- Desplázate hasta la hoja Configuración de la aplicación de la aplicación
de función y agrega dos claves para almacenar TwilioAccountSID
y TwilioAuthToken, como se muestra a continuación:
- Ve a la pestaña Integrar de la función SendNotifications, haz clic en Nueva
salida y selecciona Twilio SMS. - Haz clic en Seleccionar y proporciona los valores siguientes a los enlaces
de salida de Twilio SMS. Instala las extensiones de Twilio. El número
remitente es el número que se ha generado en el portal de Twilio y del que
ya hemos hablado en la sección Preparación de esta receta:
- Ve al editor de código y agrega las siguientes líneas de código, resaltadas
en negrita. En el código siguiente, he codificado el número destinatario. Sin
embargo, en escenarios del mundo real, recibirás dinámicamente el número
de móvil del usuario final y enviarás el SMS a través del código:
- Ahora, hagamos una ejecución de prueba de la función RegisterUser
utilizando la misma carga de solicitud. - A continuación, vemos la captura de pantalla del SMS que he recibido:
Cómo funciona…
Hemos creado una nueva cuenta de Twilio y hemos copiado el ID de cuenta
y la clave de aplicación en Configuración de la aplicación de la aplicación Azure
Function. El runtime de la aplicación de función utilizará estas dos configuraciones
para conectarse a la API de Twilio para enviar el SMS.
Para simplificar la tarea, he codificado el número de teléfono en los enlaces de salida.
Sin embargo, en las aplicaciones del mundo real, el SMS se enviaría al número de
teléfono proporcionado por los usuarios finales.
Puedes visionar el vídeo https://www.youtube.com/watch?v=ndxQXnoDIj8 para
ver una implementación que funcione.