paint-brush
Como eu construí um agendador de eventos no NodeJspor@arindam1729
303 leituras
303 leituras

Como eu construí um agendador de eventos no NodeJs

por Arindam Majumder 12m2024/08/18
Read on Terminal Reader

Muito longo; Para ler

Neste artigo, mostrarei como criar um aplicativo Node.js que pode criar eventos e enviar convites por e-mail automaticamente com links do Google Meet. Usaremos a estrutura Express para criar o agendador de eventos. Para começar, precisamos configurar um ambiente node.js e configurar um servidor Express.
featured image - Como eu construí um agendador de eventos no NodeJs
Arindam Majumder  HackerNoon profile picture

Introdução

Desde a COVID, minha agenda tem estado cheia de reuniões de equipe, reuniões de equipe e ligações com clientes.


No entanto, agendar um evento e convidar convidados são tarefas chatas. Uma sexta-feira, depois de gastar muito tempo com isso, pensei –

Por que estou gastando tanto tempo com isso?

frustrado seriamente GIF

Foi assim que tive a ideia de criar um agendador de eventos para simplificar meu trabalho!


Neste artigo, mostrarei como criar um aplicativo Nodejs que pode criar eventos e enviar convites por e-mail automaticamente com links do Google Meet.


Animado? Eu também.


Então, sem mais delongas!


Vamos COMEÇAR!

Configuração do projeto:

1. Crie um projeto Node.js:

Para iniciar nosso projeto, precisamos configurar um ambiente Node.js. Então, vamos criar um projeto node. Execute o seguinte comando no Terminal.

 npm init -y


Isso inicializará um novo projeto Node.js.

2. Instalar dependências:

Agora, instalaremos as dependências necessárias do nosso projeto.

 npm install express googleapis dotenv


Isso instalará os seguintes pacotes:

  • express: uma estrutura web popular para Node.js


  • dotenv: carrega variáveis de ambiente de um arquivo .env .


  • googleapis: Fornece acesso a várias APIs do Google

3. Configurar variáveis de ambiente:

Em seguida, criaremos uma pasta .env para armazenar com segurança nossas informações confidenciais, como credenciais de API.

 //.env PORT = YOUR_PORT || 8000 CLIENT_ID = YOUR_CLIENT_ID CLIENT_SECRET = YOUR_CLIENT_SECRET REDIRECT_URL = http://localhost:8000/auth/redirect API_KEY = YOUR_API_KEY

4. Crie o Express Server:

Agora, criaremos um arquivo index.js no diretório raiz e configuraremos um servidor express básico. Veja o código a seguir:

 const express = require("express"); const dotenv = require("dotenv"); dotenv.config(); const app = express(); const port = process.env.PORT || 8000; app.get("/", (req, res) => { res.send("Hello World"); }); app.listen(port, () => { console.log(`Server running on port ${port}`); });

Aqui, estamos usando o pacote "dotenv" para acessar o número da PORTA do arquivo .env .


No topo do projeto, estamos carregando variáveis de ambiente usando dotenv.config() para torná-lo acessível em todo o arquivo.

Configurando o Google Console

Primeiro, iremos para o Google Cloud Console .


Então teremos este Painel. (Eu já criei um projeto anteriormente, é por isso que estou recebendo isto, você pode receber outra coisa).

Console do Google Cloud

Agora, clicaremos no botão "Novo Projeto" para iniciar um novo projeto.

Nova página do projeto


A seguir, teremos algo assim. Aqui, adicionaremos o nome e a organização do nosso Projeto. Para este projeto, estou mantendo isso como "Mail-integration-Demo". Então clicaremos no botão criar para prosseguir


Detalhes do novo projeto

Em seguida, na barra de navegação lateral, teremos "APIs e serviços". Dentro desta seção, há um submenu para habilitar APIs e serviços. Clicaremos nele para prosseguir.

APIs e Serviços

Em seguida, habilitaremos a API que usaremos neste projeto, ou seja, a API do Google Calender.

API do Google Agenda

Depois disso, iremos para a Tela de Consentimento OAuth. Aqui, selecionaremos o Tipo de Usuário como Externo. E pressionaremos o botão Criar para prosseguir.

Tela de consentimento OAuth


Então, iremos para a página de registro do aplicativo. Aqui, adicionaremos mais informações sobre nosso aplicativo. Começamos adicionando o nome do nosso aplicativo e um endereço de e-mail para suporte ao usuário.


Para este projeto, vou chamá-lo de "Integração de e-mail do Arindam" e usar meu próprio endereço de e-mail para suporte.

Página de informações do aplicativo

Em seguida, temos que definir o escopo da Aplicação.

Página de escopos

Nos Escopos, adicionaremos permissões necessárias, como userinfo.email e userinfo.profile para este projeto.

escopos selecionados

Depois disso, adicionaremos um usuário de teste ao nosso aplicativo.

Página de teste do usuário

Pronto. Nosso aplicativo está registrado na plataforma.


Agora, criaremos nosso segredo OAuth Client ID. Para isso, iremos para a parte Create Credential.

Painel do Google Console

Aqui, adicionaremos o tipo do nosso aplicativo e seu nome. Para este projeto, é um aplicativo web, e seu nome é Arindam's Mail Demo.

ID do cliente OAuth

Também adicionamos uma URL de redirecionamento. Para este projeto, será http://localhost:8000/auth/redirect .

URLs de redirecionamento

E então obteremos a credencial OAuth.

Cliente OAuth criado

Em seguida, criaremos chaves de API.

Página de geração de chave de API

Depois de fazer tudo isso, atualizaremos nosso arquivo .env com as chaves de API e as credenciais OAuth que geramos anteriormente.


Com isso, configuramos nosso console do Google Cloud para este projeto, agora vamos para a próxima seção

Autenticação OAuth 2:

Até agora, fizemos nossa configuração básica do projeto. Agora, integraremos a Autenticação OAuth2 em nosso Projeto. Isso permite que nosso aplicativo interaja com segurança com os serviços do Google. Para isso, primeiro, importaremos os pacotes necessários para o arquivo index.js .

 const express = require('express'); const { google } = require('googleapis'); const dotenv = require('dotenv');


Em seguida, definiremos o escopo de acesso necessário para a API do Google Agenda.

 const scopes = ['https://www.googleapis.com/auth/calendar'];


Em seguida, configuraremos o cliente OAuth 2 usando as credenciais que armazenamos no arquivo .env .

 // OAuth 2 configuration const oauth2Client = new google.auth.OAuth2 ( process.env.CLIENT_ID, process.env.CLIENT_SECRET, process.env.REDIRECT_URL );


Após a configuração do OAuth 2, criaremos uma rota para autenticar nossos usuários.

 app.get('/auth', (req, res) => { const url = oauth2Client.generateAuthUrl ({ access_type: 'offline', scope: scopes }); res.redirect(url); } );

Quando nossos usuários seguirem esse caminho, eles serão redirecionados para a página de autenticação do Google, onde serão solicitadas permissões específicas para nosso aplicativo.


Após a autenticação bem-sucedida, o Google redirecionará o usuário para nossa URL de redirecionamento ( /auth/redirect )

 app.get("/auth/redirect", async (req, res) => { const {tokens} = await oauth2Client.getToken(req.query.code); oauth2Client.setCredentials(tokens); res.send('Authentication successful! Please return to the console.'); } );


Aqui, estamos obtendo os tokens de atualização da Query e armazenando-os como credenciais no oauth2Client . Essas credenciais nos ajudarão a fazer solicitações à API do Google Calendar.


Aqui está o código completo para index.js :

 //index.js const express = require('express'); const { google } = require('googleapis'); const dotenv = require('dotenv'); const app = express(); dotenv.config(); const port = process.env.PORT || 8000; app.get('/', (req, res) => { res.send('Hello World'); } ); // Define the scope of access for the Google Calendar API. const scopes = ['https://www.googleapis.com/auth/calendar']; // OAuth 2 configuration const oauth2Client = new google.auth.OAuth2 ( process.env.CLIENT_ID, process.env.CLIENT_SECRET, process.env.REDIRECT_URL ); app.get('/auth', (req, res) => { const url = oauth2Client.generateAuthUrl ({ access_type: 'offline', scope: scopes }); res.redirect(url); } ); app.get("/auth/redirect", async (req, res) => { const {tokens} = await oauth2Client.getToken(req.query.code); oauth2Client.setCredentials(tokens); res.send('Authentication successful! Please return to the console.'); } );

Agendando eventos no Google Agenda

Aqui vem a parte mais importante! Nesta seção, vamos agendar um evento no Google Calendar!


Para começar, inicializaremos o cliente da API do Google Agenda.

 const calendar = google.calendar({ version: 'v3', auth: oauth2Client });


Em seguida, criaremos um objeto de evento onde adicionaremos todos os detalhes do evento, como Resumo, Local, Hora de Início e Término, etc.

 const event = { summary: 'Tech Talk with Arindam', location: 'Google Meet', description: "Demo event for Arindam's Blog Post.", start: { dateTime: "2024-03-14T19:30:00+05:30", timeZone: 'Asia/Kolkata' }, end: { dateTime: "2024-03-14T20:30:00+05:30", timeZone: 'Asia/Kolkata' }, };

Depois disso, criaremos uma Rota ( /create-event ) onde criaremos o evento.


Aqui estamos inserindo um evento no Calendário do usuário usando o método calendar.events.insert() .

 app.get('/create-event', async (req, res) => { try { const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client, resource: event }); res.send({ status: 200, message: 'Event created', }); } catch (err) { console.log(err); res.send(err); } } );

Com isso, podemos agendar eventos dinamicamente no Google Agenda.

Adicionando link do Google Meet:

Até agora, exploramos como criar um evento simples no Google Calendar. Nesta seção, exploraremos como adicionar um Google Meet Link a esse Evento!


Para isso, atualizaremos o objeto event que criamos na seção anterior. Adicionaremos uma propriedade conferenceData para especificar a solicitação de criação de um link do Google Meet.

 conferenceData: { createRequest: { requestId: uuid(), } },


Também adicionaremos uma propriedade attendees para convidar pessoas para o Event. Aqui está um exemplo simples disso:

 attendees: [ {email: '[email protected]'}, ]


Agora, o objeto Event se parece com isto:

 const event = { summary: 'Tech Talk with Arindam', location: 'Google Meet', description: "Demo event for Arindam's Blog Post.", start: { dateTime: "2024-03-14T19:30:00+05:30", timeZone: 'Asia/Kolkata' }, end: { dateTime: "2024-03-14T20:30:00+05:30", timeZone: 'Asia/Kolkata' }, colorId: 1, conferenceData: { createRequest: { requestId: uuid(), } }, attendees: [ {email: '[email protected]'}, ] };


Em seguida, na etapa de inserção do evento, adicionaremos o parâmetro conferenceDataVersion a ele.

 const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client , conferenceDataVersion: 1, resource: event });


Isso criará um Evento com um Link do Google Meet. Também podemos compartilhar o link como uma resposta como esta:

 res.send({ status: 200, message: 'Event created', link: result.data.hangoutLink });

Enviando lembrete aos participantes:

Então, estamos quase terminando nosso projeto, falta apenas o toque final. Até agora, nosso projeto adicionará o evento diretamente ao calendário dos convidados.


No entanto, para notificá-los sobre esses eventos, temos que enviar um Mail. Para isso, temos que adicionar um parâmetro sendUpdates: 'all', na parte de criação do evento. Com isso, o aplicativo enviará automaticamente e-mails para os convidados.

 const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client , conferenceDataVersion: 1 , sendUpdates: 'all', resource: event });

Com essa adição, nosso projeto agora gerencia perfeitamente tanto a criação de eventos quanto as notificações por e-mail.

Testando o aplicativo:

A parte de codificação do nosso projeto está concluída. Agora, vamos ver se está funcionando ou não!


Para isso, vamos começar o projeto!

 npm run start


E iniciamos nosso Servidor na porta 8000! Agora, iremos para a rota http://localhost:8000/auth/ para autenticar o usuário. Ele nos redirecionará para algo assim:

Página de login

Ele pedirá alguma permissão para o aplicativo.

Página de permissão

Ele redirecionará para a rota /auth/redirect com o parâmetro de consulta code .

/auth/rota de redirecionamento

Após autenticar o usuário com sucesso, iremos para a rota http://localhost:8000/create-event para agendar o Evento.

http://localhost:8000/create-event rota

Incrível! Isso significa que nosso evento é criado com um link do Google Meet.


Para verificar se o processo de criação de eventos está funcionando corretamente, vamos verificar nosso Google Agenda

Calendário Google

Incrível! Nosso Evento foi criado, o que significa que a rota de criação de Eventos está funcionando perfeitamente! E também recebemos um e-mail de Convite:

Convite para evento por e-mail.

Ótimo! Nosso aplicativo está funcionando perfeitamente!


Com isso, integramos o Google Calendar ao nosso aplicativo Node.js. Nos artigos a seguir, exploraremos mais casos de uso com o Google Calendar.


Até lá, fique ligado!

Conclusão

Se você achou este post de blog útil, considere compartilhá-lo com outras pessoas que possam se beneficiar. Você também pode me seguir para mais conteúdo sobre Javascript, React e outros tópicos de desenvolvimento web.


Para colaboração paga, envie um e-mail para: [email protected]


Conecte-se comigo no Twitter , LinkedIn , YouTube e GitHub .


Obrigado pela leitura :)

Obrigado