app2-api/helpers/sendinblue.helper.js

189 lines
6.1 KiB
JavaScript

const SibApiV3Sdk = require('sib-api-v3-sdk');
const config = require('../config');
const defaultClient = SibApiV3Sdk.ApiClient.instance;
// Configure API key authorization: api-key
const apiKey = defaultClient.authentications['api-key'];
apiKey.apiKey = config.sendinblue.API_KEY;
/**
* Enviar un email transaccional
* @header
* @param {number} data.to - Email destino
* @param {number} data.name - Nombre del contacto destino
* @param {number} data.subject - Asunto
* @body
* @param {number} data.TemplateID
* @param {number} data.Variables
* @return {Promise}
*
*/
function sendEmailTransactional(header, body) {
if (header === undefined || header === null) {
throw new Error("Missing the required parameter 'header' when calling sendEmailTransactional");
};
if (body === undefined || body === null) {
throw new Error("Missing the required parameter 'body' when calling sendEmailTransactional");
};
let apiInstance = new SibApiV3Sdk.TransactionalEmailsApi();
let sendSmtpEmail = new SibApiV3Sdk.SendSmtpEmail();
sendSmtpEmail.templateId = body.TemplateID;
sendSmtpEmail.sender = { name: 'Fundación Lo Que De Verdad Importa', email: 'info@loquedeverdadimporta.org' };
sendSmtpEmail.to = [{ name: header.name, email: header.to }];
if (header.bcc) { sendSmtpEmail.bcc = [{ name: header.bccName, email: header.bcc }] };
sendSmtpEmail.subject = header.subject;
sendSmtpEmail.params = body.Variables;
apiInstance.sendTransacEmail(sendSmtpEmail).then(function (data) {
console.log('API called successfully. Returned data: ' + JSON.stringify(data));
}, function (error) {
console.error(error);
});
}
function _createMember(member) {
const api = new SibApiV3Sdk.ContactsApi();
return new Promise(function (resolve, reject) {
const createContact = new SibApiV3Sdk.CreateContact(); // CreateContact | Values to create a contact
createContact.email = member.email;
createContact.updateEnabled = true; // <- Actualiza el contacto si existe ese email
createContact.attributes = {
NOMBRE: member.name,
APELLIDOS: member.surname,
SMS: member.phone,
SOURCE: member.source,
USERID: member.userId,
ENTITYNAME: (member.entity) ? member.entity : '',
RESERVATIONCODE: (member.reservation_code) ? member.reservation_code : '',
TICKETCODE: member.code_ticket,
//VALIDATED: (member.validated) ? 1 : 0,
//COLOR: (member.color) ? member.color : '',
//DESCOLOR: member.description,
}
console.debug('_createMember:');
console.debug(createContact);
api.createContact(createContact)
.then(function (data) {
console.debug('API called successfully. Returned data: ' + data);
if (data && data.id) {
// Se ha dado de alta el contacto porque no existía
createContact.ID = data.id;
}
resolve(createContact);
})
.catch(function (error) {
console.error(error);
reject(error);
});
});
};
function _addMemberToList(member, listId) {
const api = new SibApiV3Sdk.ContactsApi();
const contactEmails = new SibApiV3Sdk.AddContactToList(); // AddContactToList | Emails addresses of the contacts
contactEmails.emails = [member.email];
return new Promise(function (resolve, reject) {
api.addContactToList(listId, contactEmails)
.then(function (data) {
console.debug('API called successfully. Returned data: ' + data);
if ((data.contacts.success) && (data.contacts.success[0] === member.email)) {
resolve(data.contacts.success[0])
} else reject()
})
.catch(function (error) {
reject(error)
})
});
}
function _removeMemberFromList(member, listId) {
const api = new SibApiV3Sdk.ContactsApi();
const contactEmails = new SibApiV3Sdk.RemoveContactFromList(); // RemoveContactFromList | Emails adresses of the contact
contactEmails.emails = [member];
return new Promise(function (resolve, reject) {
api.removeContactFromList(listId, contactEmails)
.then(function (data) {
console.debug('API called successfully. Returned data: ' + data);
if ((data.contacts.success) && (data.contacts.success[0] === member)) {
resolve(data.contacts.success[0])
} else reject()
})
.catch(function (error) {
reject(error)
})
});
}
function getLists() {
const api = new SibApiV3Sdk.ContactsApi();
return new Promise(function (resolve, reject) {
api.getAccount().then(function (data) {
console.debug('API called successfully. Returned data: ' + data);
var opts = {
'limit': 10, // Number | Number of documents per page
'offset': 0 // Number | Index of the first document of the page
};
api.getLists(opts)
.then(function (data) {
resolve(data.lists);
})
.catch(function (error) {
reject(error)
})
}, function (error) {
reject(error)
});
});
};
function addMember(listId, member) {
return new Promise(function (resolve, reject) {
_createMember(member)
.then(function (contact) {
console.debug('añadir a lista: ' + listId + ' * ' + contact);
return _addMemberToList(contact, listId);
})
.then(function () {
resolve(true);
})
.catch(function (error) {
console.error(error);
reject(error);
});
})
};
function deleteMember(listId, member) {
return _removeMemberFromList(member, listId);
}
module.exports = {
sendEmailTransactional,
getLists,
addMember,
deleteMember,
}