
Hoje vamos criar o chamado
A função Yandex (o nome oficial do
Yandex Cloud Functions ), que conspira com o
serviço de correspondência
SendGrid, enviará "sabão" a usuários que dormem pacificamente (
brincadeirinha - sei que somos todos contra o spam).
Eu também sou um oponente (mas sem fanatismo) dos servidores tradicionais e um defensor dos chamados soluções sem
servidor (sem servidor), porque eu não gosto (e realmente não sei como) administrar o servidor e ainda mais - para pagar pelo tempo em que eles não são carregados. Funções são outra questão. Alguém os atende sem mim, e eu pago apenas pelas ligações. No início de outubro de 2019, a Yandex introduziu suas
funções de nuvem Yandex - parece o primeiro
sem servidor na Federação Russa. E o que é especialmente bom - para as habilidades de Alice, elas geralmente são gratuitas, e desde então estão no campo da minha visão periférica. Mas vamos começar.
Imagine esse cenário. Seu aplicativo (por exemplo, a habilidade
Lembrar e esquecer de Alice, que também funciona nas
funções Yandex ) oferece ao usuário a compra de produtos digitais, por exemplo, opções adicionais e o usuário faz um pagamento. Um determinado sistema de pagamento (semelhante ao grau de confusão com o
Yandex.Money ) processa o pagamento e o envia para o endereço que você forneceu (e teremos um link para chamar a
função Yandex ) solicitação
HTTP contendo detalhes do pagamento, como valor, nome, telefone e e-mail do pagador. Mas queremos processar esses dados de alguma forma, por exemplo: verifique o valor, faça as entradas apropriadas no banco de dados, envie
SMS e e-
mail aos usuários com confirmação do recebimento do pagamento e mais instruções. Um
microsserviço .
Alice se lembra de tudo sobre como gravar as
funções do
Yandex no banco de dados do
Cloud Firestore no tutorial (e no futuro, acho, consideraremos um exemplo para outro banco de dados - o
Yandex Database ). Analisaremos como enviar
SMS aos usuários e integraremos nosso aplicativo com o
Yandex.Money em um futuro próximo. Agora vamos lidar apenas com o envio de cartas.
1. Crie uma conta no SendGrid
NotaO SendGrid é apenas a minha escolha, que fiz por algum motivo, e o principal é a disponibilidade de um SDK pronto para o Node.js. Você pode escolher qualquer outro serviço de lista de endereçamento.
Vamos
para a página de registro da conta e preenchemos o formulário de registro. Em seguida, vamos para o
Painel , no painel de navegação, selecione
API de Email -> Guia de Integração e, no painel principal -
API da Web, e clique no botão
Escolher . Tudo está como na imagem:

Na próxima etapa, selecione
Node.js :

Em seguida, criamos um nome para nossa chave de
API (ela será exibida apenas no console da lista de chaves e não tem nada a ver com nosso código futuro; acabei de criar uma chave
demo-api-key imperecível) e clique no botão
Create Key :

A chave é gerada, nós a copiamos e mantemos no mais profundo segredo. E teremos uma tela com o botão
Verificar integração , como na figura abaixo, mas por enquanto não iremos pressioná-lo, mas continuaremos escrevendo o código:

2. Escrita de código
E o próprio código, como você vê, é ridiculamente pequeno - 22 linhas!

Na linha
8, meu e-mail é registrado com um código rígido (e, portanto, é timidamente coberto) - você indica o seu. Na vida real, receberemos todos os dados do objeto de
evento . Por exemplo, se o método
POST (
"Content-Type": "application/json"
) passa o campo de
email (propriedade):
{ ... "email": "user@example.com", ... }
O valor desse campo pode ser obtido da seguinte maneira:
const body = JSON.parse(event.body); const email = body.email;
E se o campo de
email for uma propriedade de outro campo - o objeto de
usuário (coleção):
{ ... "user": { ... "email": "user@example.com", ... }, ... }
O valor desse campo pode ser obtido ainda mais facilmente:
const { user } = event; const email = user.email;
Se o endereço de email for passado para a função no URL (a chamada
string de consulta do URL ), por exemplo:
https://functions.yandexcloud.net/123abc? email=user@example.com
https://functions.yandexcloud.net/123abc? email=user@example.com
O valor do parâmetro
email será:
const email = event.queryStringParameters.email;
Para dar uma olhada no que exatamente está contido no objeto de
evento , você pode criar uma
função Yandex simples e alterá-la com solicitações:
module.exports.handler = async function (event) { return { 'statusCode': 200, 'headers': { 'Content-Type': 'application/json; charset=utf-8' }, 'body': JSON.stringify(event), 'isBase64Encoded': false }; };
Mais (mas menos inteligível) isso é afirmado na documentação oficial
aqui .
Portanto, crie o diretório do projeto (por exemplo,
mala direta ), vá para ele, inicialize o projeto, instale as dependências:
mkdir mailer cd mailer npm init -y npm i @sendgrid/mail email-validator dotenv
Aqui, apenas o pacote
@ sendgrid / mail é
necessário . O
pacote validador de email verifica a validade do endereço de email (como eu não adivinhei imediatamente?), Mas se tivermos certeza disso (há muito tempo foi verificado sem a gente), não podemos instalá-lo (e, é claro, não verificamos o código). O pacote
dotenv foi projetado para ler entradas do arquivo
.env como variáveis de
tempo de execução . Mas as
funções Yandex têm a capacidade de colocar essas variáveis diretamente no ambiente de execução. Como - Vou mostrá-lo abaixo. Portanto, o pacote
dotenv também não
pode ser instalado e o arquivo
.env não
deve ser criado, e o código no arquivo
index.js não
deve ser alterado. Mas aqui instalamos este pacote e
criamos os arquivos index.js e
.env :
touch index.js touch .env
No arquivo
index.js , escrevemos 22 linhas de código mostradas na captura de tela acima (alterar email apenas na linha
8 ) e no arquivo
.env (sem aspas e sinais de pontuação) especifique um par - o nome / valor da chave da
API , que chegamos recentemente ao console do
SendGrid :
SENDGRID_API_KEY = sua-muito-secreta-sendgrid-api-chaveE se você quiser menos trabalho, clone o repositório, instale os pacotes:
git clone https://github.com/stmike/ycf-sendgrid-mailer-tutorial.git cd ycf-sendgrid-mailer-tutorial npm i
No arquivo
index.js , na linha
8, altere o email; crie o arquivo
.env no diretório raiz e especifique o nome / valor da chave da
API , como mostrado um pouco acima.
3. Implantar
Mais ou menos distintamente e em detalhes sobre o
Yandex.Cloud e como colocar
as funções do Yandex descritas no meu artigo
Alice no país de Bitrix - eu o envio para os ignorantes deste país e para todo o resto (e aqueles que retornaram) - daqui em diante, um pequeno quadrinho (ou seja, uma série de figuras e texto).
Criamos um arquivo
zip (vamos chamá-lo, por exemplo,
mailer.zip ), no qual incluímos o diretório
node_modules e os
arquivos .env, index.js - todos no diretório do nosso projeto:

Criamos uma função com o nome ... corretamente -
mailer , selecione o
Editor no menu de navegação esquerdo, preencha os campos obrigatórios e alterne para a guia
Arquivo ZIP e carregue nosso arquivo
mailer.zip :

E aqui está a oportunidade mencionada anteriormente para baixar a
chave da
API diretamente aqui, e não criar o arquivo
.env no projeto e não instalar o pacote
dotenv . Mas já fizemos tudo isso, por isso estou mostrando apenas para obter informações. Ou seja - não há necessidade de duplicar!

Agora, no canto superior direito, clique no botão
Criar versão e aguarde alguns segundos. Quando tudo estiver pronto, iremos automaticamente para a seção
Visão geral . Lá, habilitaremos a opção
Função pública para que você possa interagir com ela do mundo exterior.

Veja o link azul
ao lado
do link de chamada ? Clique nela. Uma janela vazia do navegador será aberta ... Mas espere - recebi uma carta:

Agora você pode retornar ao console do
SendGrid e clicar no botão
Verificar integração . O sistema irá verificar tudo em seus canais e, como resultado, deve retornar uma tela assim:

Então, rapazes (e meninas, é claro) - tudo é realmente muito simples e elegante! Haverá mais artigos. Para quem é interessante ler, inscreva-se para não perder. Você pode se inscrever aqui ou no
Telegram .
4. Donuts
