221 lines
7.1 KiB
JavaScript
221 lines
7.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 _updateMember(email, member) {
|
|
const api = new SibApiV3Sdk.ContactsApi();
|
|
|
|
return new Promise(function (resolve, reject) {
|
|
const updateContact = new SibApiV3Sdk.UpdateContact();
|
|
|
|
updateContact.attributes = {
|
|
NOMBRE: member.name,
|
|
APELLIDOS: member.surname,
|
|
SMS: member.phone,
|
|
EMAIL: member.email,
|
|
ENTITYNAME: (member.entity) ? member.entity : '',
|
|
}
|
|
|
|
api.updateContact(email, updateContact)
|
|
.then(function (data) {
|
|
console.debug('API called successfully. Returned data: ' + data);
|
|
resolve(updateContact);
|
|
})
|
|
.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 addMemberToList(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 deleteMemberFromList(listId, member) {
|
|
return _removeMemberFromList(member, listId);
|
|
}
|
|
|
|
function updateMemberByEmail(userEmail, userData) {
|
|
return _updateMember(userEmail, userData);
|
|
}
|
|
|
|
|
|
module.exports = {
|
|
sendEmailTransactional,
|
|
getLists,
|
|
addMemberToList,
|
|
deleteMemberFromList,
|
|
updateMemberByEmail
|
|
}
|
|
|