Les fonctions Yandex envoient du courrier

Caractéristiques de Yandex

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


Remarque
SendGrid 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:

Console dans SendGrid

À l'Ă©tape suivante, sĂ©lectionnez Node.js :

Choisir Node.js dans SendGrid

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

Création d'une API clé dans SendGrid

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:

Demande de confirmation d'intégration avec SendGrid

2. Rédaction de code


Et le code lui-mĂȘme, comme vous le voyez, est ridiculement petit - 22 lignes!

Code

À 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.com
La 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-api

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

Archive du 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 :

Télécharger l'archive

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!

Variables d'environnement

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.

Présentation des fonctionnalités

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:

Courriel

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:

Confirmation d'intégration

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


Donat

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


All Articles