bidireccionalgmailcontacts-celerex
v1.7.4
Published
## Acerca De
Downloads
86
Readme
Bidireccional Library (GMAIL CONTACTS)
Acerca De
La libreria fue creada con el proposito de tener un codigo mantenible para un futuro, dentro estan las funciones para:
- RefreshAllGmailTokens
- RefreshSingleGmailToken
- RefreshZohoToken
- BidireccionalGmailContacts
La explicacion de este proyecto esta dividida en varias partes para su compresion.
Objetos
- auth
Objeto que contiene infomacion importante de cada usuario, todo lo esencial que involucra a un cliente esta aqui
{
token: String,
refreshToken: String,
type: String,
email: String,
loginUserUsuario: String,
pendingConnections: Number,
clientIdProjectGoogle: String,
clientSecretGoogleProject: String,
isActive:Boolean
}
token: Token de gmail que contiene los permisos necesarios para manipular los contactos, vence en 50 Minutos
refreshToken: Token el cual nos permite actualizar el token, este no tiene vencimiento
type: Puede tener 3 valores GMAIL,zoho o "OUTLOOK", para esta libreria solo nos interesa los tipo "GMAIL" y "zoho"
email: correo electronico en el cual los contactos son guardados
loginUserUsuario: loginUserUsuario proveniente de zoho, este es usado para saber a que usuario en el CRM le pertenece el contacto
pendingConnections: Numero de contactos que estan en la cola
clientIdProjectGoogle:Proyecto de Google al cual el contacto pertenece
clientSecretGoogleProject: Secret de google al cual el usuario pertenece.
isActive: Bandera que sirve para ignorar al usuario temporalmente
Como Funciona
RefreshAllGmailTokens (workflowRefreshAccessTokensGmail)
Esta funcion es la que se debe llamar cada vez que se quiera hacer una actualizacion de los token de los usuarios en la tabla auth con valor "GMAIL" en la key "type".
Steps:
obtener de la base de datos los usuarios a actualizar el token
Por cada usuario hace una peticion al api de google de refresh token.
si todo salio correcto el nuevo token es replazado por el viejo y se guarda en la base de datos
En caso de Error se enviara a la tabla de logs de la base de datos y se mandara un correo electronico
Cosideracciones:
No se puede hacer un numero indefinido de peticiones a la api, por lo cul debe limitarse las peticiones, o mandar peticiones por trozos.
RefreshSingleGmailToken(refreshSingleUserGoogleToken)
Esta funcion Fue creada a fin de que cuando el refresh token de 1-X usuarios falla, para que en lugar de ejecutar una actualizacion masiva de tokens de usuarios que no lo necesitan se haga unade manera selectiva. Cada destacar que si fallan muchos regresh lo mejor es correr la funcion anterior
Steps:
Encontrar por Id de la BD el usuario al que se le hara la actualizacion
Hacer la peticion a la Api de Google para refreshToken
Guardar el nuevo token en la base de datos en el registro del usuario
En caso de Error se enviara a la tabla de logs de la base de datos y se mandara un correo electronico
Cosideracciones:
No se puede hacer un numero indefinido de peticiones a la api, por lo cul debe limitarse las peticiones, o mandar peticiones por trozos.
RefreshZohoToken(workFlowRefreshZohoToken)
Esta Funcion tiene la reponsabilidad de actualizar el token se zoho el que brinda todos lo permisos para poder insertar registros por medio de la API
Steps:
Se saca de la base de datos de la tabla auth el registro que tiene "type" : "zoho"
con el refresh token se hace una peticion a endpoint de zoho para actualizar
guardamos el nuevo token en la base de datos del registro de zoho
BidireccionalGmailContacts(startWorkFlow)
Esta funcion es la de mayor peso, la encargada de hacer la conexion biidreccional entre GMAIL y ZOHO CREATOR, se compone de varios pasos y sub funciones asi como de varias tecnologias.
Tecnologias
- GMAIL CONTACTS API
- PIPEDREAM
- AWS LAMBDA
- MONGODB
- ZOHO CREATOR API
Diagrama
Steps(Simplificado)
- sacar de la base de datos de la tabla auth usuarios con "type" : "GMAIL"
- hacer una peticion al api de google para obtener contactos en los ultimos X minutos(puede ser cambiado en el codigo)
- cuando los contactos son mas de 30, los contactos siguientes se guardaran en una cola dentro de la base de datos(Ver consideraciones).
- los 30 contactos son enviados a la lambda llamada (createandupdatecontact)
- se llama la lambda de zohoinjection la cual tiene como objectivo sacar todo de la tabla zohotodo y mandarlo a CRM.
- eliminar de la tabla zohotodo los contactos ya enviados al CRM
Consideraciones
- para evitar que se consuma memoria la cola es limitada a la cantidad de "400"
- No es posible consultar el API de contactos de GMAIL mas 100 veces por lo que, es necesario crear mas de un workflow para manejar esta situacion
Como usarlo "Ambos" (hacer estos pasos antes que todo)
- Descargar el codigo o clonar el repositorio
- Descomprimir el achivo desacargado
- Ejecutar dentro de la carpeta que se genero el comando npm intall esto debio descargar los modulos (carpeta node_modules)
Como Usarlo Local (Testing y actualizaciones)
Antes de usar
Crear un archivo dentro del folder constants con el nombre de myEnviromentVars.js
en el archivo creado previamente copiar los siguiente
const serverMyMongo = "......."; const dbMyMongo = "...."; const lambdaSendEmailErrorUrl = "....."; const dataEmail = { to: "[email protected]", from: [email protected]", subject: ".....", message: "....", }; const lamU = "...../contacts"; const lamZO = "...../sendTozoho"; const ZOHO_CLIENT_ID = `.....`; const ZOHO_CLIENT_SECRET = `.....`; const ZOHO_REFRESH_TOKEN = `......`; const ZOHO_TOKEN_URI = `https://accounts.zoho.com/oauth/v2/token`; module.exports = { serverMyMongo, dbMyMongo, lambdaSendEmailErrorUrl, dataEmail, lamU, lamZO, ZOHO_CLIENT_ID, ZOHO_CLIENT_SECRET, ZOHO_REFRESH_TOKEN, ZOHO_TOKEN_URI, };
Cambiar valores de variables por :
dbMyMongo: nombre de la base de datos de mongo lambdaSendEmailErrorUrl: url de la lambda que envia el correo de error dataEmail: es un objecto, remplazar el correo en "to" y "from" por el que se usara, debe ser el mismo en ambos. lamU: url de la lambda "createupdateContact" lamZO: url de la lambda que inyecta a zoho la informacion de los contactos ZOHO_CLIENT_ID : El client id del usuario de zoho del API ; ZOHO_CLIENT_SECRET : El Client secret de zoho del API ; ZOHO_REFRESH_TOKEN : Token para poder actualizar el access token; ZOHO_TOKEN_URI = usar el valor **https://accounts.zoho.com/oauth/v2/token** ya que esta es el endpoint real;
Dentro del folder del proyecto ejecute el comando node nombreDelarchivo.js
ejemplo
node app.js
Como usarlo PROD (Conectarlo para PROD)
RefreshAllGmailTokens
Dentro del workflow correspndiente compiar el siguiente Codigo, si las variables de entorno ya estan creadas no deberia haber ningun problema al ejecutarlo.
const { workflowRefreshAccessTokensGmail } = require("bidireccionalgmailcontacts-celerex");
const serverMongoDb = process.env.SERVERMONGODBDEV;
const database = process.env.DATABASEDEV;
const lambdaSendEmailErrorUrl = process.env.LAMBDASENDEMAILERRORURL_DEV
const emailForError = process.env.EMAIL_RECIVER_AND_EMITTER_FOT_ERROR_DEV
const dataEmail = {
to: emailForError,
from: emailForError,
subject: "ERROR IN UPDATE GMAIL TOKENS",
message: "Hubo un error en el workflow de update refresh gmail token ",
};
await workflowRefreshAccessTokensGmail(
serverMongoDb,
database,
dataEmail,
lambdaSendEmailErrorUrl);
console.log("Finished");
Notas
Esta libreria esta en npm siempre que se haga un cambio permanente al codigo para tener la version mas reciente en npm se debe hacer un npm publish
guardar en Logs y enviar correos son llamados en casi todas las funciones al momento de un error
El limite de contactos que se envian al CRM por ejecucion es de 100.
El limite de la cola es 400
-El Limite de peticiones a google que se pueden hacer por usuario es aproximdamente 100, usar menos siempre por ejemplo 80