
Aujourd'hui, nous allons créer le soi-disant 
La fonction Yandex (le nom officiel de 
Yandex Cloud Functions ), qui conspire avec le 
service de messagerie 
SendGrid, enverra du "savon" aux utilisateurs qui dorment paisiblement ( 
je plaisante - je sais que nous sommes tous contre le spam).
Je suis aussi un adversaire (mais sans fanatisme) des serveurs traditionnels, et un partisan du soi-disant solutions sans 
serveur (sans serveur), parce que je n'aime pas (et ne sais vraiment pas comment) administrer le serveur, et encore plus - payer pour le temps oĂč ils ne sont pas chargĂ©s. Les fonctions sont une autre affaire. Quelqu'un les sert sans moi et je ne paie que pour les appels. DĂ©but octobre 2019, Yandex a prĂ©sentĂ© ses 
fonctions cloud Yandex - il semble ĂȘtre le premier 
sans serveur de la Fédération de Russie. Et ce qui est particuliÚrement agréable - pour les compétences d'Alice, ils sont généralement libres, ils sont donc depuis dans le domaine de ma vision périphérique. Mais commençons.
Imaginez un tel scĂ©nario. Votre application (par exemple, la compĂ©tence Aliceâs 
Remember and Forget qui, soit dit en passant, fonctionne également sur les 
fonctions Yandex ), propose Ă  lâutilisateur dâacheter des produits numĂ©riques, par exemple, des options supplĂ©mentaires, et lâutilisateur effectue un paiement. Un certain systĂšme de paiement (similaire au degrĂ© de confusion avec 
Yandex.Money ) traite le paiement et l'envoie Ă  l'adresse que vous avez fournie (et nous aurons un lien pour appeler la 
fonction Yandex ) Demande 
HTTP contenant les détails du paiement, tels que le montant, le nom, le téléphone et email du payeur. Mais nous voulons traiter ces données d'une certaine maniÚre, par exemple: vérifier le montant, effectuer les entrées appropriées dans la base de données, envoyer des 
SMS et des 
e - 
mails aux utilisateurs avec confirmation de la réception du paiement et d'autres instructions. Un tel 
microservice .
Alice se souvient de tout sur la façon d'enregistrer à partir des 
fonctions Yandex dans la base de données 
Cloud Firestore dans le tutoriel (et à l'avenir, je pense, nous considérerons un exemple pour une autre base de données - 
Yandex Database ). Nous analyserons comment envoyer des 
SMS aux utilisateurs et intégrerons notre application avec 
Yandex.Money dans un avenir proche. Maintenant, nous ne traiterons que de l'envoi de lettres.
1. Créez un compte dans SendGrid
RemarqueSendGrid est juste mon choix, que j'ai fait pour une raison quelconque, et le principal est leur disponibilitĂ© d'un SDK prĂȘt Ă  l'emploi pour Node.js. Vous pouvez choisir n'importe quel autre service de liste de diffusion.
 Nous allons 
sur la page d'enregistrement du compte et remplissons le formulaire d'inscription ici. Ensuite, nous allons au 
tableau de bord , dans le panneau de navigation, sélectionnez 
Email API -> Guide d'intégration , et sur le panneau principal - 
Web API et cliquez sur le bouton 
Choisir . Tout est comme sur la photo:

à l'étape suivante, sélectionnez 
Node.js :

Ensuite, nous trouvons un nom pour notre clé 
API (il ne s'affichera que dans la console dans la liste des clés, et n'a rien à voir avec notre futur code; je viens de trouver une 
clé de démonstration api impérissable) et cliquez sur le bouton 
Créer une clé :

La clé est générée, nous la copions et la gardons dans le plus grand secret. Et nous aurons un écran avec le bouton 
Vérifier l'intégration , comme dans l'image ci-dessous, mais pour l'instant nous n'appuierons pas dessus, mais nous allons écrire le code:

2. Rédaction de code
Et le code lui-mĂȘme, comme vous le voyez, est ridiculement petit - 22 lignes!

Ă la ligne 
8, mon courrier est enregistré avec un code dur (et est donc timidement couvert) - vous indiquez le vÎtre. Dans la vraie vie, nous recevrons toutes les données de l'objet 
événement . Par exemple, si la méthode 
POST ( 
"Content-Type": "application/json" ) transmet le champ de 
messagerie (propriété):
 { ... "email": "user@example.com", ... } 
La valeur de ce champ peut ĂȘtre obtenue comme suit:
 const body = JSON.parse(event.body); const email = body.email; 
Et si le champ 
e - 
mail est une propriété d'un autre champ - l'objet 
utilisateur (collection):
 { ... "user": { ... "email": "user@example.com", ... }, ... } 
La valeur de ce champ peut ĂȘtre obtenue encore plus facilement:
 const { user } = event; const email = user.email; 
Si l'adresse e-mail est transmise Ă  la fonction dans l'URL (la soi-disant 
chaĂźne de requĂȘte URL ), par exemple: 
https://functions.yandexcloud.net/123abc? email=user@example.com https://functions.yandexcloud.net/123abc? email=user@example.comLa valeur du paramĂštre 
e-mail sera:
 const email = event.queryStringParameters.email; 
Pour jeter un Ćil Ă  ce qui est exactement contenu dans l'objet 
événement , vous pouvez créer une simple 
fonction Yandex et la tordre avec des requĂȘtes:
 module.exports.handler = async function (event) { return { 'statusCode': 200, 'headers': { 'Content-Type': 'application/json; charset=utf-8' }, 'body': JSON.stringify(event), 'isBase64Encoded': false }; }; 
Plus (mais moins intelligible), cela est indiqué dans la documentation officielle 
ici .
Donc, créez le répertoire du projet (par exemple, 
mailer ), allez-y, initialisez le projet, installez les dépendances:
 mkdir mailer cd mailer npm init -y npm i @sendgrid/mail email-validator dotenv 
Ici, seul le 
package @ sendgrid / mail est 
requis . Le 
package de validation de courrier électronique vérifie la validité de l'adresse e-mail (comme je ne l'ai pas immédiatement deviné?), Mais si nous en sommes sûrs (il a longtemps été vérifié sans nous), nous ne pouvons pas l'installer (et, bien sûr, ne pas vérifier le code). Le package 
dotenv est conçu pour lire les entrées du fichier 
.env en tant que variables d' 
exécution . Mais les 
fonctions Yandex ont la capacité de placer ces variables directement dans l'environnement d'exécution. Comment? - Je vais le montrer ci-dessous. Par conséquent, le package 
dotenv ne peut pas non plus ĂȘtre installĂ© et le fichier 
.env ne 
doit pas ĂȘtre créé et le code du fichier 
index.js ne 
doit pas ĂȘtre modifiĂ©. Mais ici, nous avons installĂ© ce package, nous crĂ©ons 
donc des fichiers index.js et 
.env :
 touch index.js touch .env 
Dans le fichier 
index.js , 
nous écrivons 22 lignes de code affichées dans la capture d'écran ci-dessus (modifier le courrier uniquement à la ligne 
# 8 ), et dans le fichier 
.env (sans guillemets ni signes de ponctuation), spécifiez une paire - le nom / la valeur de la clé 
API , qui nous avons récemment obtenu dans la console 
SendGrid :
SENDGRID_API_KEY = votre-clé-trÚs-secrÚte-sendgrid-apiEt si vous voulez moins de travail, clonez le référentiel, installez les packages:
 git clone https://github.com/stmike/ycf-sendgrid-mailer-tutorial.git cd ycf-sendgrid-mailer-tutorial npm i 
Dans le fichier 
index.js , Ă  la ligne 
8, modifiez le courrier; créez le fichier 
.env dans le répertoire racine et spécifiez le nom / la valeur de la clé 
API , comme indiqué un peu ci-dessus.
3. Déployer
Plus ou moins distinctement et en détail sur 
Yandex.Cloud et comment y placer 
des fonctions Yandex est décrit dans mon article 
Alice dans le pays de Bitrix - je l'envoie aux ignorants de ce pays, et pour tout le reste (et ceux qui sont revenus) - ci-aprÚs une petite bande dessinée (c.-à-d. e. une série d'images et de texte).
Nous créons une archive 
zip (appelons-la, par exemple, 
mailer.zip ), dans laquelle nous incluons le répertoire 
node_modules et les 
fichiers .env, index.js - le tout depuis le répertoire de notre projet:

Nous créons une fonction avec le nom ... correctement - 
mailer , sélectionnez l' 
éditeur dans le menu de navigation de gauche, remplissez les champs nécessaires et passez à l'onglet d' 
archive ZIP et chargez notre archive 
mailer.zip :

Et voici l'opportunité mentionnée précédemment de télécharger la 
clé API directement ici, et de ne pas créer le fichier 
.env dans le projet, et de ne pas installer le package 
dotenv . Mais nous avons déjà fait tout cela, donc je le montre juste pour information. C'est-à-dire qu'il n'est pas nécessaire de dupliquer!

Maintenant, dans le coin supérieur droit, cliquez sur le bouton 
CrĂ©er une version et attendez quelques secondes. Lorsque tout sera prĂȘt, nous irons automatiquement Ă  la section 
Présentation . Là, nous allons activer l'option 
Fonction publique afin que vous puissiez interagir avec elle depuis le monde extérieur.

Voir le lien bleu à cÎté 
du lien d'appel ? Cliquez sur elle. Une fenĂȘtre de navigateur vide va s'ouvrir ... Mais attendez - j'ai reçu une lettre:

Vous pouvez maintenant revenir Ă  la console 
SendGrid et cliquer sur le bouton 
Vérifier l'intégration . Le systÚme vérifiera tout sur ses canaux, et par conséquent devrait retourner un tel écran:

Donc, les gars (et les filles, bien sûr) - tout est vraiment trÚs simple et élégant! Il y aura plus d'articles. à qui il est intéressant de lire, abonnez-vous pour ne pas manquer. Vous pouvez vous abonner ici ou en 
télégramme .
4. Donuts
