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?
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!
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.
Agora, instalaremos as dependências necessárias do nosso projeto.
npm install express googleapis dotenv
Isso instalará os seguintes pacotes:
.env
.
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
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.
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).
Agora, clicaremos no botão "Novo Projeto" para iniciar um novo 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
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.
Em seguida, habilitaremos a API que usaremos neste projeto, ou seja, a API do Google Calender.
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.
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.
Em seguida, temos que definir o escopo da Aplicação.
Nos Escopos, adicionaremos permissões necessárias, como userinfo.email
e userinfo.profile
para este projeto.
Depois disso, adicionaremos um usuário de teste ao nosso aplicativo.
Pronto. Nosso aplicativo está registrado na plataforma.
Agora, criaremos nosso segredo OAuth Client ID. Para isso, iremos para a parte Create Credential.
Aqui, adicionaremos o tipo do nosso aplicativo e seu nome. Para este projeto, é um aplicativo web, e seu nome é Arindam's Mail Demo.
Também adicionamos uma URL de redirecionamento. Para este projeto, será http://localhost:8000/auth/redirect
.
E então obteremos a credencial OAuth.
Em seguida, criaremos chaves 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
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.'); } );
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.
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 });
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.
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:
Ele pedirá alguma permissão para o aplicativo.
Ele redirecionará para a rota /auth/redirect
com o parâmetro de consulta code
.
Após autenticar o usuário com sucesso, iremos para a rota http://localhost:8000/create-event para agendar o Evento.
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
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:
Ó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!
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 :)