
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
NotaSendGrid 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:

En el siguiente paso, seleccione 
Node.js :

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 :

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:

2. Redacci贸n de c贸digos
Y como ve, el c贸digo en s铆 es rid铆culamente peque帽o: 隆22 l铆neas!

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.comEl 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-keyY 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:

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 :

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!

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.

驴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:

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:

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
