Yandex-functies verzenden e-mail

Yandex-functies verzenden e-mail

Vandaag zullen we de zogenaamde creëren. Yandex-functie (officiële naam Yandex Cloud-functies), die samenspande met de postdienst SendGrid zal “soap” sturen naar vredig slapende gebruikers (grapje - ik weet dat we allemaal tegen spam zijn).

Ik ben ook een tegenstander (maar zonder fanatisme) van traditionele servers, en een voorstander van de zogenaamde. serverless (serverloze) oplossingen, omdat ik het niet leuk vind (en ik weet niet echt hoe ik dat moet doen) om servers te beheren, en nog meer, om te betalen voor de tijd dat ze niet zijn geladen. Een ander ding zijn functies. Iemand bedient ze zonder mij, en ik betaal alleen voor oproepen. Begin oktober 2019 presenteerde Yandex zijn Yandex Cloud-functies - lijkt de eerste in de Russische Federatie te zijn serverless. En wat vooral leuk is, is dat de vaardigheden van Alice over het algemeen gratis zijn, dus sindsdien zijn ze in mijn perifere visie geweest. Maar laten we alvast beginnen.

Laten we ons dit scenario voorstellen. Uw toepassing (bijvoorbeeld Alice's skill Onthoud en vergeet waar het overigens ook op werkt Yandex-functies) nodigt de gebruiker uit om een ​​digitaal product te kopen, bijvoorbeeld extra opties, en de gebruiker doet een betaling. Een soort betalingssysteem (verwarrend vergelijkbaar met Yandex) verwerkt de betaling en stuurt deze naar het adres dat u opgeeft (en we zullen een link hebben om te bellen). Yandex-functies) HTTP-een verzoek met daarin betalingsgegevens, zoals bedrag, volledige naam, telefoonnummer en e-mailadres van de betaler. We willen deze gegevens op een of andere manier verwerken, bijvoorbeeld: het bedrag controleren, de juiste gegevens in de database invoeren, naar gebruikers sturen SMS и E-mail met bevestiging van ontvangst van betaling en verdere instructies. Dus jezelf microservice.

Over hoe vanaf Yandex-functies invoeren in de database Cloud Firestore we hebben er al naar gekeken in de tutorial Alice onthoudt alles (en ik denk dat we in de toekomst een voorbeeld voor een andere database zullen overwegen - Yandex-database). Over hoe u naar gebruikers kunt verzenden SMS en onze applicatie integreren met Yandex.Geld – we zullen het in de nabije toekomst uitzoeken. Laten we het nu hebben over het versturen van brieven.

1. Maak een account aan in SendGrid

NootSendGrid is gewoon mijn keuze, die ik om verschillende redenen heb gemaakt, waarvan de belangrijkste is dat ze een kant-en-klare SDK voor Node.js hebben. U kunt een andere mailingservice kiezen.

Laten we verder gaan naar de accountregistratiepagina en vul daar het aanmeldingsformulier in. Dan gaan wij naar Overzicht, selecteer in het navigatiepaneel E-mail API -> Integratiehandleidingen op het hoofdpaneel - Web-API en ажимаем опку Kies. Alles is zoals op de foto:

Yandex-functies verzenden e-mail

In de volgende stap selecteren we Node.js:

Yandex-functies verzenden e-mail

Vervolgens bedenken we voor onze API-sleutelnaam (wordt alleen weergegeven in de console in de lijst met sleutels en heeft niets te maken met onze toekomstige code; ik heb een onvergankelijke code bedacht demo-api-sleutel) en druk op de knop Sleutel maken:

Yandex-functies verzenden e-mail

De sleutel wordt gegenereerd, wij kopiëren deze en bewaren deze in het diepste vertrouwen. En we zullen een scherm met een knop hebben Controleer de integratie, zoals in de onderstaande afbeelding, maar we klikken er nog niet op, maar laten we verder gaan met het schrijven van de code:

Yandex-functies verzenden e-mail

2. Code schrijven

Maar de code zelf is, zoals je kunt zien, belachelijk klein: 22 regels!

Yandex-functies verzenden e-mail

In lijn #8 Mijn e-mailadres is hardgecodeerd (en daarom verlegen verborgen) - geef alstublieft de jouwe aan. In het echte leven ontvangen we alle gegevens (inclusief email) van voorwerp gebeurtenis. Als de methode bijvoorbeeld POST er wordt een object naar onze functie gestuurd gebruiker met veld (eigendom) email, kan de waarde van dit veld als volgt worden verkregen:

const { user } = event;
const email = user.email;

En als het e-mailadres via de methode aan de functie wordt doorgegeven GET, bijvoorbeeld: https://functions.yandexcloud.net/123abc?[email protected]
parameterwaarde email je kunt het zo krijgen:

const email = event.queryStringParameters.email;

Om te kijken wat er precies in een object zit gebeurtenis, je kunt de eenvoudigste maken Yandex-functie en verdraai het met vragen:

module.exports.handler = async function (event) {
  return {
   'statusCode': 200, 
   'body': JSON.stringify(event)
  };
};

Dit wordt gedetailleerder (maar minder duidelijk) besproken in de officiële documentatie hier.

Maak dus een projectmap aan (bijvoorbeeld mailers), ga ernaartoe, initialiseer het project, installeer afhankelijkheden:

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

Hier is alleen het pakket vereist @sendgrid/mail. Plastieken zak e-mailvalidator controleert het e-mailadres op geldigheid (hoe heb ik het niet meteen geraden?), maar als we er zeker van zijn (het is al lang gecontroleerd zonder ons), hoeven we het niet te installeren (en, van we hoeven het natuurlijk niet in de code te controleren). Plastieken zak dotenv ontworpen om records uit een bestand te lezen .env als runtimevariabelen. Maar in Yandex-functies Het is mogelijk om deze variabelen rechtstreeks in de runtime-omgeving te plaatsen. Hoe? - Ik zal het hieronder laten zien. Daarom het pakket dotenv je kunt het ook niet installeren en het bestand .env - maak niet aan, en tegelijkertijd staat de code in het bestand index.js verander niet. Maar hier hebben we dit pakket geïnstalleerd, dus we maken bestanden index.js и .env:

touch index.js
touch .env

In bestand index.js schrijf 22 regels code zoals weergegeven in de bovenstaande schermafbeelding (alleen in de regel #8 wijzig uw e-mailadres) en in het bestand .env - (zonder aanhalingstekens of interpunctie) specificeer het paar - sleutelnaam/waarde APIdie we onlangs in de console ontvingen SendGrid:
SENDGRID_API_KEY=uw-zeer-geheime-sendgrid-api-sleutel

En als je minder werk wilt, kloon dan de repository en installeer de pakketten:

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

In bestand index.js, in lijn #8 e-mailadres wijzigen; maak een bestand in de hoofdmap .enven geef daarin de naam/waarde van de sleutel aan API, zoals net hierboven weergegeven.

3. Implementeren

Min of meer duidelijk en gedetailleerd over Yandex.Cloud en hoe je deze daar plaatst Yandex-functies beschreven in mijn artikel Alice in het land van Bitrix - Ik stuur de onwetenden naar dit land, en voor alle anderen (en degenen die terugkwamen) - vervolgens een klein stripboek (d.w.z. een reeks afbeeldingen en tekst).

Creëren ritssluiting-archief (laten we het bijvoorbeeld noemen mailer.zip), waarin we de directory opnemen node_modules en bestanden .env, index.js - alles uit onze projectencatalogus:

Yandex-functies verzenden e-mail

We maken een functie met de naam... correct - mailers, in het linkernavigatiemenu komen we binnen De redacteur, vul de verplichte velden in en ga naar het tabblad ZIP-archief download ons archief mailer.zip:

Yandex-functies verzenden e-mail

En hier is de eerder genoemde optie om te downloaden API sleutel direct hier, in plaats van een bestand in het project te maken .enven installeer het pakket niet dotenv. Maar we hebben dit allemaal al gedaan, dus ik laat het alleen ter informatie zien. Dat wil zeggen, het is niet nodig om te dupliceren!

Yandex-functies verzenden e-mail

Klik nu in de rechterbovenhoek op de knop Versie makenen wacht een paar seconden. Als alles klaar is, gaan we automatisch naar de sectie Recensie. Daar zullen we de optie inschakelen Publieke functiezodat je er vanuit de buitenwereld mee kunt communiceren.

Yandex-functies verzenden e-mail

Je ziet de blauwe link tegenover de inscriptie Bellink? Klik Het. Er wordt een leeg browservenster geopend... Maar wacht, ik heb een e-mail ontvangen:

Yandex-functies verzenden e-mail

Nu kunt u terugkeren naar de console SendGriden druk op de knop Controleer de integratie. Het systeem zal alles via zijn kanalen controleren en als resultaat zou het een scherm als dit moeten retourneren:

Yandex-functies verzenden e-mail

Dat is alles, jongens (en meisjes natuurlijk) - alles is echt heel eenvoudig en elegant! Er zullen nog meer artikelen volgen. Als iemand zoiets als dit wil lezen, abonneer je dan zodat je niets mist.

4. Donaties

Yandex-functies verzenden e-mail

Bron: www.habr.com

Voeg een reactie