Las funciones de Yandex env铆an correo

Caracter铆sticas de Yandex

Hoy crearemos el llamado La funci贸n Yandex (el nombre oficial de Yandex Cloud Functions ), que conspira con el servicio de correo SendGrid, enviar谩 "jab贸n" a los usuarios que duerman pac铆ficamente ( es broma , s茅 que todos estamos en contra del correo no deseado).

Tambi茅n soy un oponente (pero sin fanatismo) de los servidores tradicionales y un defensor de los llamados soluciones sin servidor (sin servidor), porque no me gusta (y realmente no s茅 c贸mo) administrar el servidor, y a煤n m谩s, pagar el tiempo en que no est谩n cargados. Las funciones son otra cosa. Alguien los atiende sin m铆, y yo pago solo por las llamadas. A principios de octubre de 2019, Yandex present贸 sus Yandex Cloud Functions , parece ser el primer servidor sin servidor en la Federaci贸n de Rusia. Y lo que es especialmente bueno: para las habilidades de Alice, generalmente son libres, por lo que desde entonces han estado en el campo de mi visi贸n perif茅rica. Pero empecemos.

Imagina tal escenario. Su aplicaci贸n (por ejemplo, la habilidad Recordar y olvidar de Alicia que, por cierto, tambi茅n funciona en las funciones de Yandex ) ofrece al usuario comprar productos digitales, por ejemplo, opciones adicionales, y el usuario realiza un pago. Un cierto sistema de pago (similar al grado de confusi贸n con Yandex.Money ) procesa el pago y lo env铆a a la direcci贸n que proporcion贸 (y tendremos un enlace para llamar a la funci贸n Yandex ) Solicitud HTTP que contiene detalles de pago, como cantidad, nombre, tel茅fono y correo electr贸nico del pagador. Pero queremos procesar estos datos de alguna manera, por ejemplo: verifique la cantidad, ingrese las entradas apropiadas en la base de datos, env铆e SMS y correos electr贸nicos a los usuarios con la confirmaci贸n del recibo del pago e instrucciones adicionales. Tal microservicio .

Alice recuerda todo sobre c贸mo grabar desde las funciones de Yandex en la base de datos de Cloud Firestore en el tutorial (y en el futuro, creo, consideraremos un ejemplo para otra base de datos: Yandex Database ). Analizaremos c贸mo enviar SMS a los usuarios e integrar nuestra aplicaci贸n con Yandex.Money en un futuro pr贸ximo. Ahora solo nos ocuparemos del env铆o de cartas.

1. Crear una cuenta en SendGrid


Nota
SendGrid es solo mi elecci贸n, que hice por alguna raz贸n, y la principal es su disponibilidad de un SDK listo para Node.js. Puede elegir cualquier otro servicio de lista de correo.

Vamos a la p谩gina de registro de la cuenta y completamos el formulario de registro all铆. Luego vaya al Panel de control, en el panel de navegaci贸n, seleccione API de correo electr贸nico -> Gu铆a de integraci贸n , y en el panel principal - API web y haga clic en el bot贸n Elegir . Todo est谩 como en la imagen:

Consola en SendGrid

En el siguiente paso, seleccione Node.js :

Elegir Node.js en SendGrid

A continuaci贸n, se nos ocurre un nombre para nuestra clave API (se mostrar谩 solo en la consola en la lista de claves, y no tiene nada que ver con nuestro c贸digo futuro; solo se me ocurri贸 una clave-API imperecedera) y haga clic en el bot贸n Crear clave :

Crear una API clave en SendGrid

Se genera la clave, la copiamos y la guardamos en el m谩s profundo secreto. Y tendremos una pantalla con el bot贸n Verificar integraci贸n , como en la imagen a continuaci贸n, pero por ahora no lo presionaremos, sino que procederemos a escribir el c贸digo:

Solicitud de confirmaci贸n de integraci贸n con SendGrid

2. Redacci贸n de c贸digos


Y como ve, el c贸digo en s铆 es rid铆culamente peque帽o: 隆22 l铆neas!

C贸digo

En la l铆nea # 8, mi correo est谩 registrado con un c贸digo r铆gido (y por lo tanto est谩 t铆midamente cubierto): usted indica el suyo. En la vida real, recibiremos todos los datos del objeto del evento . Por ejemplo, si el m茅todo POST ( "Content-Type": "application/json" ) pasa el campo de correo electr贸nico (propiedad):
 { ... "email": "user@example.com", ... } 

El valor de este campo se puede obtener de la siguiente manera:
 const body = JSON.parse(event.body); const email = body.email; 

Y si el campo de correo electr贸nico es propiedad de otro campo, el objeto de usuario (colecci贸n):
 { ... "user": { ... "email": "user@example.com", ... }, ... } 

El valor de este campo se puede obtener a煤n m谩s f谩cilmente:
 const { user } = event; const email = user.email; 

Si la direcci贸n de correo se pasa a la funci贸n en la URL (la llamada cadena de consulta de URL ), por ejemplo: https://functions.yandexcloud.net/123abc? email=user@example.com https://functions.yandexcloud.net/123abc? email=user@example.com
El valor del par谩metro de correo electr贸nico ser谩:
 const email = event.queryStringParameters.email; 

Para ver qu茅 contiene exactamente el objeto de evento , puede crear una funci贸n Yandex simple y girarla con solicitudes:
 module.exports.handler = async function (event) { return { 'statusCode': 200, 'headers': { 'Content-Type': 'application/json; charset=utf-8' }, 'body': JSON.stringify(event), 'isBase64Encoded': false }; }; 

M谩s (pero menos inteligible) esto se afirma en la documentaci贸n oficial aqu铆 .

Entonces, cree el directorio del proyecto (por ejemplo, mailer ), vaya a 茅l, inicialice el proyecto, instale las dependencias:

 mkdir mailer cd mailer npm init -y npm i @sendgrid/mail email-validator dotenv 

Aqu铆, solo se requiere el paquete @ sendgrid / mail . El paquete de validaci贸n de correo electr贸nico verifica la validez de la direcci贸n de correo electr贸nico (驴como no lo adivin茅 de inmediato?), Pero si estamos seguros de ello (se ha verificado durante mucho tiempo sin nosotros), no podemos instalarlo (y, por supuesto, no verifique el c贸digo). El paquete dotenv est谩 dise帽ado para leer entradas del archivo .env como variables de tiempo de ejecuci贸n . Pero las funciones de Yandex tienen la capacidad de poner estas variables directamente en el entorno de ejecuci贸n. Como? - Lo mostrar茅 a continuaci贸n. Por lo tanto, el paquete dotenv tampoco se puede instalar, y el archivo .env no se debe crear, y el c贸digo en el archivo index.js no se debe cambiar. Pero aqu铆 instalamos este paquete, por lo que creamos los archivos index.js y .env :

 touch index.js touch .env 

En el archivo index.js , escribimos 22 l铆neas de c贸digo que se muestran en la captura de pantalla anterior (cambie el correo solo en la l铆nea # 8 ), y en el archivo .env (sin comillas ni signos de puntuaci贸n) especifique un par: el nombre / valor de la clave API , que Recientemente llegamos a la consola SendGrid :
SENDGRID_API_KEY = your-very-secret-sendgrid-api-key

Y si quieres menos trabajo, clona el repositorio, instala los paquetes:

 git clone https://github.com/stmike/ycf-sendgrid-mailer-tutorial.git cd ycf-sendgrid-mailer-tutorial npm i 

En el archivo index.js , en la l铆nea # 8, cambie el correo; cree el archivo .env en el directorio ra铆z y especifique el nombre / valor de la clave API en 茅l, como se muestra un poco m谩s arriba.

3. Implementar


M谩s o menos claramente y en detalle sobre Yandex.Cloud y c贸mo colocar las funciones de Yandex all铆 se describen en mi art铆culo Alice en el pa铆s de Bitrix : se lo env铆o a los ignorantes en este pa铆s y a todos los dem谩s (y a los que regresaron), en adelante un peque帽o c贸mic (es decir, e. una serie de im谩genes y texto).

Creamos un archivo zip (llam茅moslo, por ejemplo, mailer.zip ), en el que incluimos el directorio node_modules y los archivos .env, index.js , todo desde el directorio de nuestro proyecto:

Archivo de proyectos

Creamos una funci贸n con el nombre ... correctamente - anuncio publicitario , seleccione el Editor en el men煤 de navegaci贸n izquierdo, complete los campos necesarios, cambie a la pesta帽a Archivo ZIP y cargue nuestro archivo mailer.zip :

Descargar archivo

Y aqu铆 est谩 la oportunidad mencionada anteriormente para descargar la clave API directamente aqu铆, y no crear el archivo .env en el proyecto, y no instalar el paquete dotenv . Pero ya hemos hecho todo esto, as铆 que lo estoy mostrando solo para informaci贸n. Es decir, 隆no hay necesidad de duplicar!

Variables de entorno

Ahora en la esquina superior derecha, haga clic en el bot贸n Crear versi贸n y espere un par de segundos. Cuando todo est茅 listo, iremos autom谩ticamente a la secci贸n Descripci贸n general . All铆 habilitaremos la opci贸n Funci贸n p煤blica para que pueda interactuar con ella desde el mundo exterior.

Resumen de caracter铆sticas

驴Ves el enlace azul al lado del enlace de llamada ? Haz clic en ella Se abrir谩 una ventana de navegador vac铆a ... Pero espera, recib铆 una carta:

Correo electr贸nico

Ahora puede volver a la consola SendGrid y hacer clic en el bot贸n Verificar integraci贸n . El sistema verificar谩 todo en sus canales y, como resultado, deber铆a devolver dicha pantalla:

Confirmaci贸n de integraci贸n

Entonces, chicos (y chicas, por supuesto), 隆todo es realmente muy simple y elegante! Habr谩 m谩s art铆culos. Para quien es interesante leer, suscr铆base para no perderse. Puedes suscribirte aqu铆 o en Telegram .

4. Donuts


Donat

Source: https://habr.com/ru/post/440374/


All Articles