Обзор сервиса SendWithUs

В наши дни трудно представить какой-либо крупный сервис без e-mail рассылок. Сколько в день пользователь получает писем с пометкой "do-not-reply"? Уведомления об обновлениях и разных событиях, новостная рассылка, поздравления подписчиков с праздниками — тут нужен хороший специализированный сервис, способный справиться с современными объёмами информации. Речь пойдет об одном из них - о SendWithUs.

Сервис SendWithUs является прослойкой между приложением и сервисом отправки писем. Все шаблоны писем хранятся на сервисе, поддерживают версионирование и A/B тестирование. Отправка писем из приложения осуществляется при помощи вызова функций API. SendWithUs представляет официальные библиотеки API-клиентов для интеграции с основными современными технологиями WEB-разработки. В том числе и с интересующими нас Ruby on Rails. Рассмотрим небольшой пример создания и отправки письма из приложения на RoR.

Редактор шаблонов SendWithUs.

Сначала необходимо создать шаблон письма на SendWithUs. Со статическим текстом и разметкой все просто. А для динамических переменных реализована поддержка шаблонизатора Jinja. Пример шаблона приветственного письма пользователя:

SendWithUs template editor

Редактор удобен, сразу виден результат письма со всеми стилями. Есть возможность посмотреть письмо с подстановкой данных из Lorem ipsum, ручным вводом или же вводом JSON-объекта.

Простейший шаблон готов. В правом верхнем углу находится уникальный идентификатор шаблона который пригодится нам в Rails приложении. Переменные в шаблон передаются JSON-параметром в вызове API. В данном случае ожидается структура

"user": { "name":"John", "created_at":"07/07/17" }

Мы подготовим ее в нашем приложении.

Использование gem sendwithus_ruby_action_mailer

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

Далее представлен короткий пример инициализации письма:

class SendWithUs::Notifier < SendWithUsMailer::Base

  def welcome(user)
    assign(:user, { name: user.name, created_at: user.created_at })

    mail(
      # version_name: 'New Version',
      # tags: [array, of, tags], #Тэги пробрасываются как категории вашему сервису электронной почты
      # headers: { "X-HEADER-ONE": "header-value" },
      # cc: [{ address: 'cc@swuexample.com' }],
      # bcc: [{ address: 'bcc@swuexample.com' }],
      # locale:  'en-US',
      # files: [{id: 'image.png', data: Base64.encode64(‘file_data’)}],

      email_id: 'tem_XpniNepFNFHA2hw4n32MQB',
      reply_to: 'support@swuexample.com',
      from_name: 'Support',
      from_address: 'support@swuexample.com',
      recipient_name: user.name,
      recipient_address: user.email,
    )
  end
end

Метод assign добавляет пару ключ-значение к JSON объекту данных API запроса, который передается в шаблон письма на SendWithUs. В метод mail передаются остальные опции. Обязательными из них являются recipient_address и email_id.

Такие атрибуты, как from_name, from_address и reply_to при передаче в метод mail могут иметь значение по умолчанию. Эти значения можно выставить в нескольких местах. Вот они в порядке приоритета:

  1. В контексте класса: default from_address: 'support@swuexample.com'
  2. В настройках отдельно для каждого шаблона.
  3. В глобальных настройках отправки писем на SendWithUs.

Синтаксис отправки письма аналогичен ActionMailer:

SendWithUs::Notifier.welcome(user).deliver

При вызове метода deliver отправляется запрос на сервер SendWithUs с JSON параметрами.

Как вы могли заметить, параметры "cc" и "bcc" - массивы электронных адресов. Но "recipient_address" - одиночный параметр, ожидающий только одного получателя. Из-за этого появляется проблема невозможности отправки письма с несколькими адресами в поле "To". Если приложение позволяет отправлять такие письма, то возникнет необходимость самостоятельно решать эту ситуацию. Например, только первый получатель передается в параметр "recipient_address", остальные - в "cc".

Интерфейс SendWithUs позволяет устанавливать PreHeaders - короткие тексты, которые следуют сразу за темой письма в папке inbox. Они используются для передачи краткого содержания письма. Если этот текст не указать, email-клиенты подставят в эту строку первые N символов из тела письма, где N зависит от клиента. Обычно это около 100 символов.

Маркетинговые письма

SendWithUs может создавать маркетинговые кампании электронных писем. Для этого используется сервис segment.com, где устанавливаются события, которые инициируют отправку письма из кампании. Для реализации этого на SendWithUs создаются пользователи каждый раз, когда в поле recipient_address появляется новый адрес. Так же есть возможность управлением данными пользователей с помощью API или WEB-интрефейса. Каждому пользователю можно расширить набор параметров, что позволит создавать маркетинговые рассылки пользователям, сгруппированным по определенным правилам.

Зачем вообще это нужно

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

SendWithUs собирает статистику по каждому шаблону и строит диаграммы. Информация собирается об открытии (переоткрытии) письма, кликах (повторных кликах) по ссылкам в письме и о других данных. Хотя набор данных мало отличается от предоставляемых другими сервисами сбора статистики.

SendWithUs значительно упрощает рассылки — достаточно открыть сервис, выбрать нужные функции, нажать на кнопку и готово! Не нужно знать, как запускать приложение, разбираться в консольной магии или бегать к программистам каждый раз, как нужно отредактировать письмо. SendWithUs берёт все сложности на себя.

Связаться