Yandex-funkcioj sendas poŝton

Yandex-funkcioj sendas poŝton

Hodiaŭ ni kreos la tn. Yandex-funkcio (oficiala nomo Yandex Nubaj Funkcioj), kiu koluziis kun la poŝtservo SendGrid sendos "sapon" al trankvile dormantaj uzantoj (ŝerce - mi scias, ke ni ĉiuj estas kontraŭ spamado).

Mi estas ankaŭ kontraŭulo (sed sen fanatikeco) de tradiciaj serviloj, kaj subtenanto de la t.n. sen servilo (senserviloj) solvoj, ĉar mi ne ŝatas (kaj mi ne vere scias kiel) administri servilojn, kaj eĉ pli, pagi por la tempo kiam ili ne estas ŝargitaj. Alia afero estas funkcioj. Iu servas ilin sen mi, kaj mi nur pagas por vokoj. Komence de oktobro 2019, Yandex prezentis sian Yandex Nubaj Funkcioj — ŝajnas esti la unua en la Rusa Federacio sen servilo. Kaj kio estas precipe agrable estas ke por la kapabloj de Alico ili estas ĝenerale liberaj, do ili estas en mia ekstercentra vizio ekde tiam. Sed ni komencu jam.

Ni imagu ĉi tiun scenaron. Via aplikaĵo (ekzemple, la lerteco de Alice Memoru kaj Forgesu kiu, cetere, ankaŭ funkcias Yandex-funkcioj) invitas la uzanton aĉeti ciferecan produkton, ekzemple, kromajn opciojn, kaj la uzanto faras pagon. Ia pagsistemo (konfuze simila al Yandex.Money) procesas la pagon kaj sendas ĝin al la adreso kiun vi provizas (kaj ni havos ligilon por voki Yandex-funkcioj) HTTP-peto enhavanta pagodetalojn, kiel kvanto, plena nomo, telefonnumero kaj retpoŝto de la paganto. Ni volas prilabori ĉi tiujn datumojn iel, ekzemple: kontroli la kvanton, fari taŭgajn enskribojn en la datumbazo, sendi al uzantoj. SMS и retpoŝto kun konfirmo de ricevo de pago kaj pliaj instrukcioj. Do vi mem mikroservo.

Pri kiel de Yandex-funkcioj fari enskribojn en la datumbazo Nubo Firestore ni jam rigardis ĝin en la lernilo Alico memoras ĉion (kaj estonte, mi pensas, ni konsideros ekzemplon por alia datumbazo - Yandex-datumbazo). Pri kiel sendi al uzantoj SMS kaj integri nian aplikaĵon kun Yandex.Mono — ni ordigos ĝin baldaŭ. Nun ni nur okupiĝu pri sendado de leteroj.

1. Kreu konton en SendGrid

ПримечаниеSendGrid estas nur mia elekto, kiun mi faris pro pluraj kialoj, la ĉefa estas, ke ili havas pretan SDK por Node.js. Vi povas elekti ajnan alian poŝtservon.

Ni pluiru al la paĝo de registriĝo de konto kaj plenigu tie la aliĝilon. Tiam ni iru al Dashboard, en la navigada panelo elektu Retpoŝto API -> Integriga Gvidilo, kaj sur la ĉefa panelo - Reta API kaj premu la butonon elektu. Ĉio estas kiel en la bildo:

Yandex-funkcioj sendas poŝton

En la sekva paŝo ni elektas node.js:

Yandex-funkcioj sendas poŝton

Poste ni elpensas por nia API-key name (estos montrata nur en la konzolo en la listo de ŝlosiloj, kaj havas nenion komunan kun nia estonta kodo; mi ĵus elpensis nepereeblan demo-api-key) kaj premu la butonon Krei Ŝlosilon:

Yandex-funkcioj sendas poŝton

La ŝlosilo estos generita, ni kopios ĝin kaj konservos ĝin en la plej profunda konfido. Kaj ni havos ekranon kun butono Kontrolu Integriĝon, kiel en la suba bildo, sed ni ankoraŭ ne klakos ĝin, sed ni pluiru al skribi la kodon:

Yandex-funkcioj sendas poŝton

2. Skriba kodo

Sed la kodo mem, kiel vi povas vidi, estas ridinde malgranda - 22 linioj!

Yandex-funkcioj sendas poŝton

En linio #8 Mia retpoŝto estas malmola kodita (kaj tial timide kaŝita) - bonvolu indiki vian. En la reala vivo, ni ricevos ĉiujn datumojn (inkluzive retpoŝto) de objekto okazaĵo. Ekzemple, se la metodo POST objekto estas sendita al nia funkcio surhavi kun kampo (posedaĵo) retpoŝto, la valoro de ĉi tiu kampo povas esti akirita jene:

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

Kaj se la retadreso estas transdonita al la funkcio uzante la metodon GETekzemple: https://functions.yandexcloud.net/123abc?[email protected]
parametrovaloro retpoŝto vi povas akiri ĝin jene:

const email = event.queryStringParameters.email;

Por rigardi kio precize estas enhavita en objekto okazaĵo, vi povas krei la plej simplan Yandex-funkcio kaj tordu ĝin per demandoj:

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

Ĉi tio estas diskutata pli detale (sed malpli klare) en la oficiala dokumentaro tie.

Do, kreu projektan dosierujon (ekzemple, poŝtsendisto), iru al ĝi, pravigu la projekton, instalu dependecojn:

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

Ĉi tie nur la pako estas bezonata @sendgrid/poŝto. Plasta sako retpoŝto-validigilo kontrolas la retpoŝtadreson pri valideco (kiel mi ne tuj divenis?), sed se ni certas pri ĝi (ĝi jam estas kontrolita delonge sen ni), ni ne devas instali ĝin (kaj, de kompreneble, ni ne devas kontroli ĝin en la kodo). Plasta sako dotenv desegnita por legi rekordojn de dosiero .env kiel rultempaj variabloj. Sed en Yandex-funkcioj Eblas meti ĉi tiujn variablojn rekte en la rultempan medion. Kiel? - Mi montros ĝin sube. Tial la pako dotenv vi ankaŭ ne povas instali ĝin, kaj la dosieron .env - ne kreu, kaj samtempe la kodo estas en la dosiero indekso.js ne ŝanĝu. Sed ĉi tie ni instalis ĉi tiun pakaĵon, do ni kreas dosierojn indekso.js и .env:

touch index.js
touch .env

En dosiero indekso.js skribu 22 liniojn de kodo montritaj en la supra ekrankopio (nur en la linio #8 ŝanĝi vian retpoŝton), kaj en la dosiero .env - (sen iuj citiloj aŭ interpunkcioj) specifu la paron - ŝlosilnomo/valoro APIkiun ni lastatempe ricevis en la konzolo SendGrid:
SENDGRID_API_KEY=via-tre-sekreta-sendgrid-api-ŝlosilo

Kaj se vi volas malpli da laboro, klonu la deponejon kaj instalu la pakaĵojn:

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

En dosiero indekso.js, en linio #8 ŝanĝi retpoŝton; krei dosieron en la radika dosierujo .env, kaj en ĝi indiku la nomon/valoron de la ŝlosilo API, kiel montrite ĝuste supre.

3. Deploji

Pli-malpli klare kaj detale pri Yandex.Cloud kaj kiel meti ĝin tie Yandex-funkcioj priskribita en mia artikolo Alico en la lando de Bitrix - Mi sendas la malklerulojn al ĉi tiu lando, kaj por ĉiuj aliaj (kaj tiuj, kiuj revenis) - poste malgrandan komikson (t.e. serion da bildoj kaj teksto).

Ni kreas zip-arkivo (ni nomu ĝin, ekzemple, mailer.zip), en kiu ni inkluzivas la dosierujon nodo_moduloj kaj dosieroj .env, index.js - ĉio el nia projekta katalogo:

Yandex-funkcioj sendas poŝton

Ni kreas funkcion kun la nomo... ĝuste - poŝtsendisto, en la maldekstra naviga menuo ni eniras La redaktisto, plenigu la postulatajn kampojn, kaj ŝanĝu al la langeto ZIP-arkivo elŝutu nian arkivon mailer.zip:

Yandex-funkcioj sendas poŝton

Kaj jen la antaŭe menciita opcio por elŝuti API-ŝlosilo rekte ĉi tie, anstataŭ krei dosieron en la projekto .env, kaj ne instalu la pakaĵon dotenv. Sed ni jam faris ĉion ĉi, do mi montras ĝin nur por informo. Tio estas, ne necesas duobligi!

Yandex-funkcioj sendas poŝton

Nun en la supra dekstra angulo alklaku la butonon Krei Version, kaj atendu kelkajn sekundojn. Kiam ĉio estas preta, ni aŭtomate iros al la sekcio trarigardo. Tie ni ebligos la opcion publika funkciopor ke vi povu interagi kun ĝi el la ekstera mondo.

Yandex-funkcioj sendas poŝton

Vi vidas la bluan ligilon kontraŭ la surskribo Ligo por voki? Klaku ĝin. Malplena retumila fenestro malfermiĝos... Sed atendu - mi ricevis retmesaĝon:

Yandex-funkcioj sendas poŝton

Nun vi povas reveni al la konzolo SendGrid, kaj premu la butonon Kontrolu Integriĝon. La sistemo kontrolos ĉion per siaj kanaloj, kaj kiel rezulto ĝi devus redoni ekranon kiel ĉi tion:

Yandex-funkcioj sendas poŝton

Jen, infanoj (kaj knabinoj, kompreneble) - ĉio estas vere tre simpla kaj eleganta! Estos pliaj artikoloj. Se iu interesiĝas legi ion tian, abonu, por ke vi ne maltrafu.

4. Donacoj

Yandex-funkcioj sendas poŝton

fonto: www.habr.com

Aldoni komenton