
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.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-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
