Это последняя неделя перед закрытием службы рассылки новостей Ревю.

Это сервис, которым я пользуюсь последние 7 месяцев для публикации своей рассылки. Он работал прилично, имел несколько приятных функций, которые делились со мной сводкой за неделю, и он напрямую интегрировался с Twitter, чтобы люди могли регистрироваться из моего профиля. Лучше всего то, что это было бесплатно!

Но 18 января он уходит. Поэтому мне пришлось придумать другой вариант публикации моего бюллетеня. Я не хочу перерыва в обслуживании всех моих любимых читателей, это несправедливо по отношению к вам.

Я немного покопался в службах рассылки новостей, таких как MailChimp, Sendinblue и ConvertKit, и они работали, за исключением того, что я не собирался платить больше. Большинство служб рассылки новостей, которые я изучал, поддерживали до 300 читателей на бесплатном уровне, и мне повезло, что на рассылку Serverless Picks of the Week подписалось больше людей.

У меня была полноценная карьера инженера-программиста, и некоторые сказали бы, что я знаю свой путь в бессерверной разработке, поэтому я решил написать свою собственную платформу для рассылки новостей. Бессерверные сервисы недороги, они автоматически масштабируются в соответствии со спросом и являются одним из самых быстрых способов создания программного обеспечения.

Я также недавно закончил автоматизацию, которая перекрестно публикует мои блоги, которую я мог бы использовать в качестве основы для запуска публикации информационных бюллетеней. Мне показался бестолковым!

Если вам нужен tl;dr — вы можете пропустить прямо в репозиторий с открытым исходным кодом и начать работу.

Поиск почтового движка

Первая проблема, которую мне пришлось решить, чтобы создать собственное приложение для рассылки новостей, — это отправка фактического электронного письма. Существует множество библиотек, которые отправляют электронные письма, но в духе собирание и сборка я хотел использовать управляемый сервис.

Отправка писем, которые не попадают в спам, сложна и требует опыта и постоянного обслуживания, чего у меня нет. Поэтому я изучил два варианта: Amazon SES и SendGrid. Есть и другие, но с этими двумя я был знаком лучше всего.

По умолчанию я предпочитаю сервисы AWS. Все остальное, что я создаю, размещается и управляется в AWS, так почему бы и нет?

Я посмотрел на некоторые функции, и они не совсем соответствовали тому, что я искал. У него есть управление репутацией и неплохая информация о доставляемости и метрики, но большая функция, которую я искал и не нашел, — это управление кампаниями.

Я отслеживаю каждый выпуск своей рассылки как отдельную маркетинговую кампанию. Это позволяет мне получать статистику по каждой проблеме, например, скольким людям я отправляю эту проблему, сколько из них было открыто, сколько отказов и сколько ссылок было нажато внутри проблемы.

Имея эту информацию в кармане, я взглянул на SendGrid. У них было именно то, что мне было нужно. Они предлагают возможность создать Одиночную отправку, которая представляет собой одноразовое сообщение электронной почты, доставляемое в список контактов. Звучит точно так же, как выпуск информационного бюллетеня для меня!

SendGrid также предлагает замечательный бесплатный уровень — он управляет до 2000 контактов и позволяет отправлять до 6000 сообщений Single Send в месяц. Идеально подходит для размера моего информационного бюллетеня и прогнозируемого роста в этом году!

После этого я остановился на SendGrid в качестве механизма управления электронной почтой для бессерверного приложения, которое я собирался создать.

Построение рабочего процесса

Последние несколько лет я имел поверхностное представление о SendGrid. Мы используем его на самом базовом уровне на работе для отправки уведомлений пользователям. Но это была степень моего воздействия.

Когда я начал создавать свое приложение с функциями, которые никогда раньше не использовал, я быстро понял, что вы не можете опубликовать одиночную отправку через SendGrid программно. Требуется, чтобы человек вручную нажимал кнопку расписания/отправки.

Сначала это меня немного раздражало, но, подумав об этом, я понял, что это отличная функция безопасности. Я бы не хотел публиковать электронное письмо для тысяч людей с явной опечаткой или серьезной ошибкой форматирования. Это привело меня к следующему рабочему процессу:

Рабочий процесс получения информационного бюллетеня от создания до публикации

Я пишу весь свой контент в Markdown. Когда я фиксирую новую запись в блоге или информационный бюллетень, она компилируется в html с помощью Hugo framework в конвейере CI моего проекта AWS Amplify. Когда сборка завершается успешно, Amplify публикует событие в EventBridge, где его подхватывает рабочий процесс.

  1. Напишите информационный бюллетень в Markdown и нажмите на основную ветку в репозитории GitHub.
  2. Сборка Amplify компилируется в html и публикует контент на моем сайте.
  3. Запускается функция Lambda, которая загружает файл Markdown из моего репозитория.
  4. Запускается рабочий процесс пошаговой функции, который анализирует содержимое, запускает его через преобразование для SendGrid и создает одиночную отправку.
  5. Я получаю электронное письмо со ссылкой для просмотра созданной одиночной отправки и нажимаю кнопку Подтвердить.
  6. SendGrid позаботится о запланированной доставке всем моим читателям

Это довольно удобный рабочий процесс, который экономит мне массу времени каждую неделю. С Revue мне приходилось предварительно просматривать html-контент локально на моем сайте, копировать и вставлять контент в Revue, затем реорганизовывать контент и повторно отправлять изображения и встроенную информацию.

Этот процесс не был особенно сложным, но он занимал некоторое время и был подвержен ошибкам.

Автоматизируя этот процесс с помощью кода, он экономит мне все время и гарантирует, что я ничего не забуду каждую неделю.

Преобразование данных

SendGrid имеет удобную функцию под названием динамические шаблоны, которая позволяет вам создавать параметризованное сообщение электронной почты с помощью Handlebars.

Используя динамические шаблоны, вы можете передавать необработанные данные и форматировать их в согласованный структурированный HTML. SendGrid имеет удобный пользовательский интерфейс для создания этих шаблонов, который предоставляет интерфейс перетаскивания для компонентов бюллетеня, который вы можете расширить с помощью кода. Он также предоставляет испытательный стенд, чтобы вы могли видеть объединенные шаблоны по мере создания.

Я решил разместить свой шаблон информационного бюллетеня в SendGrid. Используя конструктор, я могу быстро настроить формат и увидеть, как изменения отразятся на лету. В моем приложении для рассылки новостей шаблон загружается через API SendGrid, а данные объединяются через пакет Handlebars npm.

Однако для объединения данных в динамический шаблон содержимое должно быть в определенном формате. Лямбда-функция выполняется как часть рабочего процесса пошаговой функции, которая преобразует уценку информационного бюллетеня в отформатированный объект json со следующим форматом:

{
  "metadata": {
    "number": 1,
    "title": "My first newsletter!",
    "date": "2023-01-01",
    "url": "https://readysetcloud.io/newsletter/1"
  },
  "content": {
    "sections": [
      {
        "header": "Serverless Superhero",
        "text": "<p>Congrats to our serverless superhero!</p>"
      }
    ]
  }
}

Структурируя содержимое информационного бюллетеня как объект json, мы позволяем пакету Handlebars подставлять значения в шаблон сообщения. Это приводит к простоте сопровождения в будущем за счет изоляции данных отдельно от форматирования. Если мне нужно настроить стиль определенного компонента, нет проблем! Мне не нужно трогать данные и добавлять риск к моим изменениям.

После того как данные объединены в шаблон, приложение информационного бюллетеня использует API SendGrid для создания одиночной отправки. После этого он отправляет мне электронное письмо для проверки!

Другие интересные функции

Revue предложил хорошую функцию, которую мне было жаль терять. Через несколько дней он пришлет мне сводку о том, насколько хорош мой информационный бюллетень. Это заставило меня задуматься о некоторых других функциях, которыми я хотел бы управлять для себя, которые я взял на себя.

  • Спонсорская поддержка
  • Автоматические напоминания
  • Краткое описание проблемы
  • Отслеживание количества подписчиков

Все это встроено в приложение для рассылки новостей, так что вы можете взять и уйти, не задумываясь об этом.

Спонсоры

У меня часто есть спонсор для выпусков моего информационного бюллетеня. Но я ужасно напоминаю им о предстоящей рекламе. Спонсоры часто хотят показывать разную рекламу неделю за неделей, поэтому напоминание о том, чтобы вернуть мне свежую рекламу, всегда ценно, чтобы им не приходилось карабкаться за день до выпуска выпуска.

Это приложение отслеживает всех спонсоров вашего информационного бюллетеня и управляет календарем проблем на основе json. За пять дней до публикации нового выпуска приложение ищет следующего спонсора и отправляет контактному лицу электронное письмо с напоминанием о предстоящем объявлении. Когда они возвращаются ко мне с рекламой, которую хотят запустить, я добавляю ее в метаданные информационного бюллетеня, и все!

Чтобы объявление отображалось в содержании информационного бюллетеня, я добавил короткий код, который вставляет его куда угодно. Просто добавив короткий код где-нибудь в контент, автоматизация подберет его и заменит отформатированное объявление расширенным контентом о спонсоре.

Информационный бюллетень Метрики

Неделю за неделей мне нравится отслеживать индивидуальную статистику эффективности моей рассылки. SendGrid отслеживает множество метрик вместе с отслеживанием кликов, что дает ценную информацию о том, как читатели взаимодействуют с моим контентом.

Проблема в том, что новостная рассылка не является моей основной работой, и я часто забываю проверять статистику. К тому времени, когда я проверяю их, у меня заканчивается время, чтобы принять меры в следующем информационном бюллетене для лучшего взаимодействия.

У меня есть рабочий процесс Step Function, который запускается по расписанию, чтобы проверять статистику каждую неделю. Он загружает последний информационный бюллетень, использует API SendGrid для получения метрик и текущего количества подписчиков, а затем отправляет мне электронное письмо со сводкой и прямой ссылкой на страницу подробного анализа.

Они приходят ко мне по пятницам. К тому времени, когда я сажусь за свой компьютер в течение дня, в моем почтовом ящике есть электронное письмо, ожидающее, чтобы сообщить мне, как мой последний информационный бюллетень работал четыре дня назад, и сообщить о тенденции подписчиков по сравнению с прошлой неделей!

Краткое содержание

Это был забавный проект, который решил ряд головных болей. Как и моя автоматизация кросс-постинга, это решение экономит мне значительное количество времени каждую неделю.

Я уже говорил это много раз, исключайте человеческий фактор при каждом удобном случае. Люди совершают ошибки. Я, конечно, не исключение. Я больше не забываю отправить напоминание по электронной почте спонсору или проверить статистику своей рассылки. Я также случайно не ошибаюсь в правильном форматировании электронной версии моего информационного бюллетеня, когда копирую и вставляю что-то неправильное.

Эта платформа с открытым исходным кодом, и я бы хотел, чтобы вы попробовали ее и вносили обновления по своему усмотрению. Это требует от вас создания учетной записи SendGrid, но это единственная внешняя вещь, которую вам нужно сделать. Вы можете найти все инструкции по установке в README.

Благодаря бесплатному уровню SendGrid и низкой стоимости бессерверной реализации AWS, которая его обеспечивает, запуск этого решения будет бесплатным до тех пор, пока вы не наберете более 2000 подписчиков (или не будете отправлять более 6000 сообщений в месяц).

Спасибо, что следите за новостями, и удачи вам в вашем путешествии по новостям!

Удачного кодирования!