Untitled

mail@pastecode.io avatar
unknown
plain_text
21 days ago
5.0 kB
18
Indexable
Never
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"
  );
}
Leave a Comment