ЯндСкс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡΡ‹Π»Π°ΡŽΡ‚ ΠΏΠΎΡ‡Ρ‚Ρƒ

ЯндСкс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡΡ‹Π»Π°ΡŽΡ‚ ΠΏΠΎΡ‡Ρ‚Ρƒ

БСгодня ΠΌΡ‹ создадим Ρ‚.Π½. ЯндСкс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Yandex Cloud Functions), которая вступив Π² сговор с сСрвисом ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… рассылок SendGrid Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π°Ρ‚ΡŒ Β«ΠΌΡ‹Π»ΠΎΒ» ΠΌΠΈΡ€Π½ΠΎ спящим ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ (ΡˆΡƒΡ‚ΠΊΠ° β€” я знаю, Ρ‡Ρ‚ΠΎ всС ΠΌΡ‹ ΠΏΡ€ΠΎΡ‚ΠΈΠ² спама).

А Π΅Ρ‰Ρ‘ я ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ (Π½ΠΎ Π±Π΅Π· Ρ„Π°Π½Π°Ρ‚ΠΈΠ·ΠΌΠ°) Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… сСрвСров, ΠΈ сторонник Ρ‚.Π½. serverless (бСссСрвСрных) Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅ люблю (Π΄Π° ΠΈ Ρ‚ΠΎΠ»ΠΊΠΎΠΌ Π½Π΅ ΡƒΠΌΠ΅ΡŽ) Π°Π΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСрвСра, Π° Π΅Ρ‰Ρ‘ большС β€” ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ Π·Π° Ρ‚ΠΎ врСмя, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π½Π΅ Π½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹. Π”Ρ€ΡƒΠ³ΠΎΠ΅ Π΄Π΅Π»ΠΎ β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π˜Ρ… ΠΊΡ‚ΠΎ-Ρ‚ΠΎ обслуТиваСт Π±Π΅Π· мСня, Π° я ΠΏΠ»Π°Ρ‡Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π° Π²Ρ‹Π·ΠΎΠ²Ρ‹. Π’ Π½Π°Ρ‡Π°Π»Π΅ октября 2019 Π³. ЯндСкс прСдставил свои Yandex Cloud Functions β€” каТСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π² Π Π€ serverless. И Ρ‡Ρ‚ΠΎ особо приятно β€” для Π½Π°Π²Ρ‹ΠΊΠΎΠ² Алисы ΠΎΠ½ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ бСсплатны, поэтому с Ρ‚Π΅Ρ… ΠΏΠΎΡ€ находятся Π² ΠΏΠΎΠ»Π΅ ΠΌΠΎΠ΅Π³ΠΎ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ зрСния. Но Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΠΆΠ΅ приступим.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ Ρ‚Π°ΠΊΠΎΠΉ сцСнарий. Π’Π°ΡˆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π°Π²Ρ‹ΠΊ Алисы Π—Π°ΠΏΠΎΠΌΠ½ΠΈ ΠΈ Π—Π°Π±ΡƒΠ΄ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, кстати, Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ЯндСкс-функциях) ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΊΡƒΠΏΠΈΡ‚ΡŒ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ Ρ‚ΠΎΠ²Π°Ρ€, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ, ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠΏΠ»Π°Ρ‚Ρƒ. НСкая платСТная систСма (схоТая Π΄ΠΎ стСпСни смСшСния с ЯндСкс.Π”Π΅Π½ΡŒΠ³ΠΈ) ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ»Π°Ρ‚Π΅ΠΆ, ΠΈ ΡˆΠ»Ρ‘Ρ‚ Π½Π° прСдоставлСнный Π²Π°ΠΌΠΈ адрСс (Π° Ρƒ нас это Π±ΡƒΠ΄Π΅Ρ‚ ссылка для Π²Ρ‹Π·ΠΎΠ²Π° ЯндСкс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) HTTP-запрос, содСрТащий Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ°, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ сумма, ЀИО, Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ ΠΈ элСктронная ΠΏΠΎΡ‡Ρ‚Π° ΠΏΠ»Π°Ρ‚Π΅Π»ΡŒΡ‰ΠΈΠΊΠ°. ΠœΡ‹ ΠΆΠ΅ Ρ…ΠΎΡ‚ΠΈΠΌ эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ сумму, Π΄Π΅Π»Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ записи Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ SMS ΠΈ Email с ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ получСния ΠΎΠΏΠ»Π°Ρ‚Ρ‹ ΠΈ дальнСйшими инструкциями. Π’Π°ΠΊΠΎΠΉ сСбС микросСрвис.

О Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΠ· ЯндСкс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄Π΅Π»Π°Ρ‚ΡŒ записи Π² Π‘Π” Cloud Firestore ΠΌΡ‹ ΡƒΠΆΠ΅ рассматривали Π² Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»Π΅ Алиса ΠΏΠΎΠΌΠ½ΠΈΡ‚ всё (ΠΈ Π² дальнСйшСм, Π΄ΡƒΠΌΠ°ΡŽ, рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π‘Π” β€” Yandex Database). О Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ SMS ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ЯндСкс.Π”Π΅Π½ΡŒΠ³Π°ΠΌΠΈ β€” Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Π² Π½Π΅Π΄Π°Π»Ρ‘ΠΊΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. БСйчас займёмся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ писСм.

1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° Π² SendGrid

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅SendGrid β€” это лишь ΠΌΠΎΠΉ Π²Ρ‹Π±ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я сдСлал ΠΏΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, ΠΈ главная ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… β€” Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρƒ Π½ΠΈΡ… Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ SDK для Node.js. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ сСрвис ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… рассылок.

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π½Π° страницу рСгистрации Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° ΠΈ заполняСм Ρ‚Π°ΠΌ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ. Π—Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π² Dashboard, Π² Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Email API -> Integration Guide, Π° Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ β€” Web API ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡƒ Choose. Всё ΠΊΠ°ΠΊ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅:

ЯндСкс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡΡ‹Π»Π°ΡŽΡ‚ ΠΏΠΎΡ‡Ρ‚Ρƒ

На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ шагС Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Node.js:

ЯндСкс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡΡ‹Π»Π°ΡŽΡ‚ ΠΏΠΎΡ‡Ρ‚Ρƒ

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°Π΅ΠΌ для своСго API-ΠΊΠ»ΡŽΡ‡Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ (Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² консоли Π² спискС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΈ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚; я Π²ΠΎΡ‚ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π» Π½Π΅Ρ‚Π»Π΅Π½Π½ΠΎΠ΅ demo-api-key) ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡƒ Create Key:

ЯндСкс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡΡ‹Π»Π°ΡŽΡ‚ ΠΏΠΎΡ‡Ρ‚Ρƒ

ΠšΠ»ΡŽΡ‡ΠΈΠΊ сгСнСрируСтся, ΠΌΡ‹ Π΅Π³ΠΎ скопируСм ΠΈ сохраним Π² Π³Π»ΡƒΠ±ΠΎΡ‡Π°ΠΉΡˆΠ΅ΠΉ Ρ‚Π°ΠΉΠ½Π΅. А Ρƒ нас появится экран с ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ Verify Integration, ΠΊΠ°ΠΊ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ Π½ΠΈΠΆΠ΅, Π½ΠΎ ΠΌΡ‹ Π΅Ρ‘ ΠΏΠΎΠΊΠ° Π½Π°ΠΆΠΈΠΌΠ°Ρ‚ΡŒ Π½Π΅ станСм, Π° ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ написанию ΠΊΠΎΠ΄Π°:

ЯндСкс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡΡ‹Π»Π°ΡŽΡ‚ ΠΏΠΎΡ‡Ρ‚Ρƒ

2. НаписаниС кода

А самого ΠΊΠΎΠ΄Π°, ΠΊΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π΄ΠΎ смСшного ΠΌΠ°Π»ΠΎ β€” 22 строки!

ЯндСкс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡΡ‹Π»Π°ΡŽΡ‚ ΠΏΠΎΡ‡Ρ‚Ρƒ

Π’ строкС #8 Ρ…Π°Ρ€Π΄ΠΊΠΎΠ΄ΠΎΠΌ прописана моя ΠΏΠΎΡ‡Ρ‚Π° (ΠΈ поэтому стыдливо ΠΏΡ€ΠΈΠΊΡ€Ρ‹Ρ‚Π°) β€” Π²Ρ‹ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ свою. Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠ΅ ΠΆΠΈΠ·Π½ΠΈ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ всС Π΄Π°Π½Π½Ρ‹Π΅ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ email) ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° event. НапримСр, Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ POST Π² Π½Π°ΡˆΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ отправляСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ user с ΠΏΠΎΠ»Π΅ΠΌ (свойством) email, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого поля ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:

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

А Ссли адрСс ΠΏΠΎΡ‡Ρ‚Ρ‹ пСрСдаётся Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ GET, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: https://functions.yandexcloud.net/123abc?[email protected]
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° email ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ эдак:

const email = event.queryStringParameters.email;

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ содСрТится Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ event, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΡƒΡŽ ЯндСкс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ ΠΏΠΎΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ Π΅Ρ‘ запросами:

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

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ (Π½ΠΎ ΠΌΠ΅Π½Π΅Π΅ Π΄ΠΎΡ…ΠΎΠ΄Ρ‡ΠΈΠ²ΠΎ) ΠΎΠ± этом говорится Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ здСсь.

Π˜Ρ‚Π°ΠΊ, создаём ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, mailer), ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π² Π½Π΅Π³ΠΎ, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, устанавливаСм зависимости:

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

Π—Π΄Π΅ΡΡŒ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ являСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ @sendgrid/mail. ΠŸΠ°ΠΊΠ΅Ρ‚ email-validator провСряСт Π½Π° Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ адрСс ΠΏΠΎΡ‡Ρ‚Ρ‹ (ΠΊΠ°ΠΊ я сразу Π½Π΅ догадался?), Π½ΠΎ Ссли ΠΌΡ‹ Π² Π½Ρ‘ΠΌ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ (Π΄Π°Π²Π½ΠΎ ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ Π±Π΅Π· нас), Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ (ΠΈ Π² ΠΊΠΎΠ΄Π΅, СстСствСнно, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ). ΠŸΠ°ΠΊΠ΅Ρ‚ dotenv ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для чтСния записСй ΠΈΠ· Ρ„Π°ΠΉΠ»Π° .env ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… срСды выполнСния. Но Π² ЯндСкс-функциях имССтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ нСпосрСдствСнно Π² срСду Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Как? β€” я ΠΏΠΎΠΊΠ°ΠΆΡƒ это Π½ΠΈΠΆΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠ°ΠΊΠ΅Ρ‚ dotenv Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, ΠΈ Ρ„Π°ΠΉΠ» .env β€” Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, ΠΈ ΠΏΡ€ΠΈ этом ΠΊΠΎΠ΄ Π² Ρ„Π°ΠΉΠ»Π΅ index.js Π½Π΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ. Но здСсь ΠΌΡ‹ этот ΠΏΠ°ΠΊΠ΅Ρ‚ установили, поэтому создаём Ρ„Π°ΠΉΠ»Ρ‹ index.js ΠΈ .env:

touch index.js
touch .env

Π’ Ρ„Π°ΠΉΠ»Π΅ index.js пишСм 22 строки ΠΊΠΎΠ΄Π°, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π½Π° ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π΅ Π²Ρ‹ΡˆΠ΅ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² строкС #8 помСняйтС ΠΏΠΎΡ‡Ρ‚Ρƒ), Π° Π² Ρ„Π°ΠΉΠ»Π΅ .env β€” (Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ ΠΈ Π·Π½Π°ΠΊΠΎΠ² прСпинания) ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΏΠ°Ρ€Ρƒ β€” имя/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π² консоли SendGrid:
SENDGRID_API_KEY=your-very-secret-sendgrid-api-key

А Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»ΠΎ помСньшС β€” склонируйтС Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, установитС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹:

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

Π’ Ρ„Π°ΠΉΠ»Π΅ index.js, Π² строкС #8 помСняйтС ΠΏΠΎΡ‡Ρ‚Ρƒ; Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ создайтС Ρ„Π°ΠΉΠ» .env, ΠΈ Π² Π½Ρ‘ΠΌ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ имя/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° API, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Ρ‡ΡƒΡ‚ΡŒ Π²Ρ‹ΡˆΠ΅.

3. Π”Π΅ΠΏΠ»ΠΎΠΉ

Π‘ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ внятно ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ ЯндСкс.ОблакС ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ‚Π°ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ЯндСкс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ рассказано Π² ΠΌΠΎΠ΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Алиса Π² странС Битрикс β€” нСсвСдущих ΠΎΡ‚ΡΡ‹Π»Π°ΡŽ Π² эту страну, Π° для всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… (ΠΈ Π²Π΅Ρ€Π½ΡƒΠ²ΡˆΠΈΡ…ΡΡ) β€” Π΄Π°Π»Π΅Π΅ нСбольшой комикс (Ρ‚.Π΅. сСрия ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ ΠΈ тСкста).

Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ zip-Π°Ρ€Ρ…ΠΈΠ² (Π½Π°Π·ΠΎΠ²Ρ‘ΠΌ Π΅Π³ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, mailer.zip), Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ node_modules ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ .env, index.js β€” всС ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° нашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

ЯндСкс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡΡ‹Π»Π°ΡŽΡ‚ ΠΏΠΎΡ‡Ρ‚Ρƒ

Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с названиСм… ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ β€” mailer, Π² Π»Π΅Π²ΠΎΠΌ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ мСню Π²Π±ΠΈΡ€Π°Π΅ΠΌ Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, заполняСм Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ поля, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠ²ΡˆΠΈΡΡŒ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡƒ ZIP-Π°Ρ€Ρ…ΠΈΠ² Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ наш Π°Ρ€Ρ…ΠΈΠ² mailer.zip:

ЯндСкс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡΡ‹Π»Π°ΡŽΡ‚ ΠΏΠΎΡ‡Ρ‚Ρƒ

А Π²ΠΎΡ‚ ΠΈ упомянутая Ρ€Π°Π½Π΅Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ API-key нСпосрСдствСнно здСсь, Π° Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Ρ„Π°ΠΉΠ» .env, ΠΈ Π½Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ dotenv. Но ΠΌΡ‹ всё это ΡƒΠΆΠ΅ сдСлали, поэтому ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽ просто для ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π’ΠΎ Π΅ΡΡ‚ΡŒ β€” Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Π½Π°Π΄ΠΎ!

ЯндСкс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡΡ‹Π»Π°ΡŽΡ‚ ΠΏΠΎΡ‡Ρ‚Ρƒ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² ΠΏΡ€Π°Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ, ΠΈ ΠΆΠ΄Ρ‘ΠΌ ΠΏΠ°Ρ€Ρƒ сСкунд. Когда всё Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ²ΠΎ, ΠΌΡ‹ автоматичСски ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ Π² Ρ€Π°Π·Π΄Π΅Π» ΠžΠ±Π·ΠΎΡ€. Π’Π°ΠΌ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ ΠΎΠΏΡ†ΠΈΡŽ ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Π°Ρ функция, Ρ‡Ρ‚ΠΎΠ±Ρ‹ с Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ· внСшнСго ΠΌΠΈΡ€Π°.

ЯндСкс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡΡ‹Π»Π°ΡŽΡ‚ ΠΏΠΎΡ‡Ρ‚Ρƒ

Π’ΠΈΠ΄ΠΈΡ‚Π΅ синюю ссылку Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ² надписи Бсылка для Π²Ρ‹Π·ΠΎΠ²Π°? НаТмитС Π΅Ρ‘. ΠžΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ΡΡ пустоС ΠΎΠΊΠ½ΠΎ браузСра… Но ΠΏΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅ β€” ΠΌΠ½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎ письмо:

ЯндСкс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡΡ‹Π»Π°ΡŽΡ‚ ΠΏΠΎΡ‡Ρ‚Ρƒ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π² консоль SendGrid, ΠΈ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Verify Integration. БистСма ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ всё ΠΏΠΎ своим ΠΊΠ°Π½Π°Π»Π°ΠΌ, ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Π²ΠΎΡ‚ экран:

ЯндСкс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡΡ‹Π»Π°ΡŽΡ‚ ΠΏΠΎΡ‡Ρ‚Ρƒ

Π’ΠΎΡ‚ Ρ‚Π°ΠΊ, рСбята (ΠΈ Π΄Π΅Π²Ρ‡Π°Ρ‚Π°, разумССтся) β€” всё Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ просто ΠΈ элСгантно! Π‘ΡƒΠ΄ΡƒΡ‚ Π΅Ρ‰Ρ‘ ΡΡ‚Π°Ρ‚ΡŒΠΈ. ΠšΠΎΠΌΡƒ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ интСрСсно β€” ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ.

4. Π”ΠΎΠ½Π°Ρ‚Ρ‹

ЯндСкс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡΡ‹Π»Π°ΡŽΡ‚ ΠΏΠΎΡ‡Ρ‚Ρƒ

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com