Untitled
unknown
plain_text
a year ago
5.0 kB
35
Indexable
const hubspot = require("@hubspot/api-client");
exports.main = async (event, callback) => {
const hubspotClient = new hubspot.Client({
accessToken: process.env.HUBSPOT_ACCESS_TOKEN,
});
const errorField = "validacao_de_telefone";
try {
const results = await hubspotClient.crm.contacts.basicApi.getById(
event.object.objectId,
["phone", "mobilephone", errorField]
);
if (!results || !results.body || !results.body.properties) {
throw new Error("Resposta da API inválida");
}
const phone = results.body.properties.phone;
const mobilephone = results.body.properties.mobilephone;
if (!phone && !mobilephone) {
console.error("Nenhum telefone fornecido.");
callback({ error: "Nenhum telefone fornecido." });
return;
}
let updatedFields = {};
let formatError = false;
if (phone) {
const formattedPhone = formatPhoneNumber(phone);
if (!formattedPhone) {
updatedFields[errorField] = `Telefone errado: ${phone}`;
formatError = true;
} else if (isCellPhone(formattedPhone)) {
updatedFields.mobilephone = formattedPhone;
updatedFields.phone = formattedPhone;
} else {
updatedFields.phone = formattedPhone;
}
}
if (mobilephone) {
const formattedMobilePhone = formatPhoneNumber(mobilephone);
if (!formattedMobilePhone) {
updatedFields[errorField] = `Telefone errado: ${mobilephone}`;
formatError = true;
} else {
updatedFields.mobilephone = formattedMobilePhone;
updatedFields.phone = formattedMobilePhone;
}
}
if (Object.keys(updatedFields).length > 0) {
await hubspotClient.crm.contacts.basicApi.update(event.object.objectId, {
properties: updatedFields,
});
callback({
outputFields: {
message: "Telefones formatados com sucesso.",
formattedPhone: updatedFields.phone || "Nenhum",
formattedMobilePhone: updatedFields.mobilephone || "Nenhum",
formatError: formatError ? updatedFields[errorField] : "Nenhum",
},
});
} else {
callback({
outputFields: {
message: "Nenhuma atualização necessária.",
formattedPhone: "Nenhum",
formattedMobilePhone: "Nenhum",
formatError: "Nenhum",
},
});
}
} catch (err) {
console.error("Erro ao processar contato:", err);
callback({ error: "Falha ao processar informações do contato." });
}
};
function formatPhoneNumber(phone) {
const cleaned = ("" + phone).replace(/\D/g, "");
const countryCode = "+55";
let formattedPhone = "";
if (cleaned.length === 11) {
// Número celular (sem código do país)
const areaCode = cleaned.slice(0, 2);
const firstPart = cleaned.slice(2, 7);
const secondPart = cleaned.slice(7, 11);
formattedPhone = `${countryCode}-${areaCode}-${firstPart}-${secondPart}`;
} else if (cleaned.length === 10) {
// Número fixo (sem código do país)
const areaCode = cleaned.slice(0, 2);
const firstPart = cleaned.slice(2, 6);
const secondPart = cleaned.slice(6, 10);
formattedPhone = `${countryCode}-${areaCode}-${firstPart}-${secondPart}`;
} else if (cleaned.length === 9) {
// Número celular (sem DDD e sem código do país)
const firstPart = cleaned.slice(0, 5);
const secondPart = cleaned.slice(5, 9);
formattedPhone = `${countryCode}-XX-${firstPart}-${secondPart}`;
console.error("Número de telefone inválido (falta DDD):", phone);
return null;
} else if (cleaned.length === 8) {
// Número fixo (sem DDD e sem código do país)
const firstPart = cleaned.slice(0, 4);
const secondPart = cleaned.slice(4, 8);
formattedPhone = `${countryCode}-XX-${firstPart}-${secondPart}`;
console.error("Número de telefone inválido (falta DDD):", phone);
return null;
} else if (cleaned.length === 13 && cleaned.startsWith("55")) {
// Número com código do país
if (cleaned[4] === "9") {
// Celular
const areaCode = cleaned.slice(2, 4);
const firstPart = cleaned.slice(4, 9);
const secondPart = cleaned.slice(9, 13);
formattedPhone = `${countryCode}-${areaCode}-${firstPart}-${secondPart}`;
} else {
// Telefone fixo
const areaCode = cleaned.slice(2, 4);
const firstPart = cleaned.slice(4, 8);
const secondPart = cleaned.slice(8, 12);
formattedPhone = `${countryCode}-${areaCode}-${firstPart}-${secondPart}`;
}
} else {
console.error("Número de telefone inválido:", phone);
return null;
}
return formattedPhone;
}
function isCellPhone(phone) {
const cleaned = ("" + phone).replace(/\D/g, "");
return (
cleaned.length === 13 && cleaned.startsWith("55") && cleaned[4] === "9"
);
}Editor is loading...
Leave a Comment