DevGang
Авторизоваться

Добавление рассылки с функциями Mailjet и Netlify

Я перешел из Mailchimp несколько лет назад, потому что стоимость должна была стать серьезным бременем, особенно после того, как они изменили способ расчета цен (все, с кем вы общались, даже если они отписались, и вам не разрешено общаться). В то время ActiveCampaign был более дешевым, но все же полнофункциональным вариантом. Тем не менее, мне никогда не были нужны все функции (особенно в отношении автоматизации кампаний), и снова пришло время, когда мне нужно двигаться. Как оказалось, переход с ActiveCampaign на Mailjet дает мне те функции, которые мне нужны, на 100 долларов меньше в месяц.

В этом посте я просто хочу поделиться кодом для добавления нового контакта в Mailjet через функцию Netlify.

Создание функции Netlify

Mailjet предоставляет JavaScript SDK, который на самом деле делает интеграцию с его API довольно простой. Вам понадобится ваш ключ API Mailjet и секретный ключ, которые вы можете найти в Mailjet в разделе «Account Settings», а затем выберите «API Key Management (основная и дополнительная учетная запись)» в REST API. Поместите их в переменную среды.

Одна причуда Mailjet заключается в том, что у вас могут быть контакты, но если они не добавлены в список, вы не можете отправлять им рассылки. Чтобы добавить их в список, вам понадобится идентификатор списка, который вы можете найти в разделе «Contacts», а затем «Contact Lists» в своей учетной записи. Я не помещал это в переменную среды, хотя мог бы. Это не конфиденциальная информация, но это может упростить управление. Однако стоит отметить, что у вас может быть несколько списков, и вы можете захотеть добавить пользователя более чем в один список.

Как вы увидите в приведенном ниже коде, процесс состоит из двух шагов:

  • Добавьте пользователя в свои контакты и получите его новый идентификатор пользователя.
  • Добавьте пользователя в соответствующие списки.

В остальном код довольно прост. Странно ли, что я использую then, а затем await в результате? Может быть, но это работает, и мне было легко к этому прийти.

const Mailjet = require("node-mailjet");

const mailjet = new Mailjet({
  apiKey: process.env.MAILJET_API_KEY,
  apiSecret: process.env.MAILJET_SECRET_KEY,
});
const listID = 12345678;

exports.handler = async (event, context, callback) => {
  try {
    if (!event.body) {
      return {
        statusCode: 500,
        body: "email query parameter required",
      };
    }
    const body = JSON.parse(event.body);
    const email = body.email;
    const firstName = body.firstName ? body.firstName : "";
    const lastName = body.lastName ? body.lastName : "";
    if (!email) {
      return {
        statusCode: 500,
        body: "email query parameter required",
      };
    }

    return mailjet
      .post("contact")
      .request({
        Email: email,
        IsExcludedFromCampaigns: false,
        Name: firstName + " " + lastName,
      })
      .then(async (res) => {
        const addedToList = mailjet
          .post("contact")
          .id(res.body.Data[0].ID)
          .action("managecontactslists")
          .request({
            ContactsLists: [
              {
                ListID: listID,
                Action: "addnoforce",
              },
            ],
          });
        const response = { msg: "Good news! You've been added." };
        return {
          statusCode: 200,
          body: JSON.stringify(response),
        };
      })
      .catch((err) => {
        console.log(err);
        const response = { errorMsg: err.response.statusText };
        return {
          statusCode: 200,
          body: JSON.stringify(response),
        };
      });
  } catch (err) {
    console.log(err);
    return { statusCode: 500, body: err.toString() };
  }
};

Следует отметить, что я возвращаю сообщение об ошибке от Mailjet, если пользователь не был добавлен в список, но, в отличие от ActiveCampaign, это не самое удобное для пользователя сообщение. Как правило, это если вы уже в списке, но, возможно, стоит проверить сообщения и ответить чем-то более дружелюбным (это в моем списке дел).

Использование функции

Итак, CFE — полностью статичный сайт, поэтому мне нужно вызвать эту функцию через клиентский JavaScript.

Каждая функция Netlify имеет URL-адрес, по которому вы можете опубликовать сообщение, так что это просто вопрос HTTP-запроса. Сценарий довольно прост, он добавляет в форму прослушиватель событий отправки, собирает данные, а затем использует Axios для выполнения запроса к функции. Нужен ли мне Axios? Нет, но это работает.

registerForm.addEventListener("submit", (e) => {
  e.preventDefault();

  let form = e.target;
  let name = form.elements["join-name"].value;
  let email = form.elements["join-email"].value;
  let firstName = "";
  let lastName = "";
  const errorMessage = document.getElementById("errorMessage");

  if (email === "") errorMessage.innerHTML = "Please fill in all fields";

  if (name !== "") {
    const nameArray = name.split(" ");
    if (nameArray.length) firstName = nameArray[0];

    if (nameArray.length > 1) {
      nameArray.shift();
      lastName = nameArray.join(" ");
    }
  }
  axios
    .post("/.netlify/functions/mailjet", {
      email: email,
      firstName: firstName,
      lastName: lastName,
    })
    .then(function (response) {
      if (response.data.errorMsg && errorMessage)
        errorMessage.innerHTML = response.data.errorMsg;
      else if (response.data.msg && errorMessage)
        errorMessage.innerHTML = response.data.msg;
    })
    .catch(function (error) {
      if (errorMessage) {
        errorMessage.innerHTML =
          "The request failed. Please try again in a moment.";
      } else {
        console.log("Failed to login user: %o", error);
        throw error;
      }
    });
});

Вот и все!

Так что здесь нет ничего революционного, и определенно есть способы улучшить код (это побочный проект, поэтому часто «это работает» — это все, на что у меня есть время). Но если вы ведете список рассылки и хотите использовать Mailjet, надеюсь, этот код вам поможет.

Источник:

#JavaScript
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу