Fungsi Yandex mengirim email

Fitur Yandex

Hari ini kita akan membuat apa yang disebut Fungsi Yandex (nama resmi Yandex Cloud Functions ), yang berkonspirasi dengan layanan pengiriman SendGrid, akan mengirim "sabun" kepada pengguna yang tidur dengan tenang ( hanya bercanda - Saya tahu bahwa kita semua menentang spam).

Saya juga lawan (tetapi tanpa fanatisme) dari server tradisional, dan pendukung yang disebut solusi serverless (serverless), karena saya tidak suka (dan benar-benar tidak tahu bagaimana) untuk mengelola server, dan bahkan lebih - untuk membayar waktu ketika mereka tidak dimuat. Fungsi adalah masalah lain. Seseorang melayani mereka tanpa saya, dan saya hanya membayar untuk panggilan. Pada awal Oktober 2019, Yandex memperkenalkan Fungsi Cloud Yandex -nya - tampaknya bukan server pertama di Federasi Rusia. Dan apa yang sangat baik - untuk keterampilan Alice mereka umumnya gratis, sehingga mereka telah berada di bidang penglihatan tepi saya. Tapi mari kita mulai.

Bayangkan skenario seperti itu. Aplikasi Anda (misalnya, keterampilan Ingat dan Lupakan Alice yang omong-omong, juga berfungsi pada fungsi Yandex ) menawarkan kepada pengguna untuk membeli barang digital, misalnya, opsi tambahan, dan pengguna melakukan pembayaran. Sistem pembayaran tertentu (mirip dengan tingkat kebingungan dengan Yandex.Money ) memproses pembayaran, dan mengirimkannya ke alamat yang Anda berikan (dan kami akan memiliki tautan untuk memanggil fungsi Yandex ) Permintaan HTTP yang berisi rincian pembayaran, seperti jumlah, nama, telepon dan email pembayar. Tetapi kami ingin memproses data ini dengan beberapa cara, misalnya: memeriksa jumlah, membuat entri yang sesuai dalam database, mengirim SMS dan Email ke pengguna dengan konfirmasi penerimaan pembayaran dan instruksi lebih lanjut. Layanan microser seperti itu.

Alice ingat segala sesuatu tentang cara merekam dari fungsi Yandex di basis data Cloud Firestore di tutorial (dan di masa depan, saya pikir, kami akan mempertimbangkan contoh untuk basis data lain - Database Yandex ). Kami akan menganalisis cara mengirim SMS ke pengguna dan mengintegrasikan aplikasi kami dengan Yandex.Money dalam waktu dekat. Sekarang kita hanya akan berurusan dengan mengirim surat.

1. Buat akun di SendGrid


Catatan
SendGrid hanyalah pilihan saya, yang saya buat untuk beberapa alasan, dan yang utama adalah ketersediaan SDK siap pakai untuk Node.js. Anda dapat memilih layanan milis lainnya.

Kami pergi ke halaman pendaftaran akun dan mengisi formulir pendaftaran di sana. Lalu pergi ke Dasbor , di panel navigasi pilih API Email -> Panduan Integrasi , dan pada panel utama - API Web dan klik tombol Pilih . Semuanya seperti pada gambar:

Konsol di SendGrid

Pada langkah selanjutnya, pilih Node.js :

Memilih Node.js di SendGrid

Selanjutnya, kami datang dengan nama untuk kunci API kami (itu akan ditampilkan hanya di konsol dalam daftar kunci, dan tidak ada hubungannya dengan kode masa depan kami; Saya baru saja datang dengan demo-api-key yang tidak tahan lama) dan klik tombol Create Key :

Membuat API kunci di SendGrid

Kunci dibuat, kami menyalinnya dan menyimpannya dalam kerahasiaan terdalam. Dan kita akan memiliki layar dengan tombol Verifikasi Integrasi , seperti pada gambar di bawah ini, tetapi untuk sekarang kita tidak akan menekannya, tetapi lanjutkan menulis kode:

Permintaan konfirmasi integrasi dengan SendGrid

2. Penulisan kode


Dan kode itu sendiri, seperti yang Anda lihat, sangat kecil - 22 baris!

Kode

Pada baris # 8, email saya terdaftar dengan hardcode (dan karenanya tertutup) - Anda menunjukkannya. Dalam kehidupan nyata, kami akan menerima semua data dari objek acara . Misalnya, jika metode POST ( "Content-Type": "application/json" ) melewati bidang email (properti):
 { ... "email": "user@example.com", ... } 

Nilai bidang ini dapat diperoleh sebagai berikut:
 const body = JSON.parse(event.body); const email = body.email; 

Dan jika bidang email adalah properti dari bidang lain - objek pengguna (koleksi):
 { ... "user": { ... "email": "user@example.com", ... }, ... } 

Nilai bidang ini dapat diperoleh lebih mudah:
 const { user } = event; const email = user.email; 

Jika alamat surat diteruskan ke fungsi dalam URL (yang disebut string kueri URL ), misalnya: https://functions.yandexcloud.net/123abc? email=user@example.com https://functions.yandexcloud.net/123abc? email=user@example.com
Nilai parameter email adalah:
 const email = event.queryStringParameters.email; 

Untuk melihat apa sebenarnya yang terkandung dalam objek acara , Anda dapat membuat fungsi Yandex sederhana dan memelintirnya dengan permintaan:
 module.exports.handler = async function (event) { return { 'statusCode': 200, 'headers': { 'Content-Type': 'application/json; charset=utf-8' }, 'body': JSON.stringify(event), 'isBase64Encoded': false }; }; 

Lebih banyak (tetapi kurang dapat dipahami) ini dinyatakan dalam dokumentasi resmi di sini .

Jadi, buat direktori proyek (misalnya, mailer ), buka, inisialisasi proyek, instal dependensi:

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

Di sini, hanya diperlukan paket @ sendgrid / mail . Paket validator-email memeriksa alamat email untuk validitas (karena saya tidak langsung menebak?), Tetapi jika kita yakin akan hal itu (sudah lama diverifikasi tanpa kita), kita tidak dapat menginstalnya (dan, tentu saja, jangan periksa kode). Paket dotenv dirancang untuk membaca entri dari file .env sebagai variabel runtime . Tetapi fungsi Yandex memiliki kemampuan untuk menempatkan variabel-variabel ini langsung ke lingkungan eksekusi. Bagaimana? - Saya akan menunjukkannya di bawah. Oleh karena itu, paket dotenv juga tidak dapat diinstal, dan file .env tidak boleh dibuat, dan kode dalam file index.js tidak boleh diubah. Namun di sini kami menginstal paket ini, jadi kami membuat file index.js dan .env :

 touch index.js touch .env 

Dalam file index.js , kami menulis 22 baris kode yang ditunjukkan pada tangkapan layar di atas (ubah mail hanya di baris # 8 ), dan dalam file .env (tanpa tanda kutip dan tanda baca) tentukan pasangan - nama / nilai kunci API , yang kami baru saja masuk ke konsol SendGrid :
SENDGRID_API_KEY = kunci-kirim-rahasia-api-Anda

Dan jika Anda ingin lebih sedikit pekerjaan, kloning repositori, instal paket:

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

Dalam file index.js , pada baris # 8, ubah email; buat file .env di direktori root dan tentukan nama / nilai kunci API di dalamnya, seperti yang ditunjukkan sedikit di atas.

3. Menyebarkan


Lebih atau kurang jelas dan terinci tentang Yandex.Cloud dan cara menempatkan fungsi-Yandex ada dijelaskan dalam artikel saya Alice di negara Bitrix - Saya mengirimkannya ke orang-orang bodoh di negara ini, dan untuk semua yang lain (dan mereka yang kembali) - selanjutnya komik kecil (mis. (serangkaian gambar dan teks).

Kami membuat arsip zip (sebut saja, misalnya, mailer.zip ), di mana kami menyertakan direktori node_modules dan file .env, index.js - semua dari direktori proyek kami:

Arsip Proyek

Kami membuat fungsi dengan nama ... dengan benar - mailer , pilih Editor di menu navigasi kiri, isi kolom yang diperlukan, dan beralih ke tab arsip ZIP dan muat arsip mailer.zip kami:

Unduh arsip

Dan di sini adalah kesempatan yang disebutkan sebelumnya untuk mengunduh kunci API langsung di sini, dan tidak membuat file .env di proyek, dan tidak menginstal paket dotenv . Tetapi kami sudah melakukan semua ini, jadi saya menunjukkannya hanya untuk informasi. Yaitu - tidak perlu digandakan!

Variabel lingkungan

Sekarang di sudut kanan atas, klik tombol Buat versi , dan tunggu beberapa detik. Ketika semuanya sudah siap, kita akan secara otomatis pergi ke bagian Gambaran Umum . Di sana kami akan mengaktifkan opsi fungsi Publik sehingga Anda dapat berinteraksi dengannya dari dunia luar.

Ikhtisar Fitur

Lihat tautan biru di sebelah Tautan Panggilan ? Klik dia. Jendela browser yang kosong akan terbuka ... Tapi tunggu - Saya menerima surat:

Email

Sekarang Anda dapat kembali ke konsol SendGrid , dan klik tombol Verifikasi Integrasi . Sistem akan memeriksa semua yang ada di salurannya, dan akibatnya harus mengembalikan layar seperti itu:

Konfirmasi Integrasi

Jadi, cowok (dan cewek, tentu saja) - semuanya benar-benar sangat sederhana dan elegan! Akan ada lebih banyak artikel. Kepada siapa itu menarik untuk dibaca, berlangganan agar tidak ketinggalan. Anda dapat berlangganan di sini atau di Telegram .

4. Donat


Donat

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


All Articles