Funções Yandex enviam email

Recursos do Yandex

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


Nota
O 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:

Console no SendGrid

Na próxima etapa, selecione Node.js :

Escolhendo o Node.js no SendGrid

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 :

Criando uma API de chave no SendGrid

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:

Pedido de confirmação da integração com o SendGrid

2. Escrita de código


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

Código

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-chave

E 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:

Arquivo do 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 :

Baixar arquivo

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!

Variáveis ​​de ambiente

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.

Visão geral dos recursos

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

E-mail

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:

Confirmação de integração

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


Donat

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


All Articles