Sincronizar contatos do usuário com o Campaign Monitor

Na Charity Map, nós tropeçamos um pouco ao escolher Mailchimp ou Campaign Monitor como nossa plataforma de newsletter por e-mail. No final, o Campaign Monitor ganhou um jogo apertado por sua incrível API e documentação . E aqui vou mostrar como manter a tabela de usuários e a lista de assinantes do Campaign Monitor em sincronia para evitar tarefas manuais, como adicionar novos assinantes à lista de vez em quando.

Primeiro, adicione o wrapper Ruby do Campaign Monitor em seu Gemfile

gem 'createsend'

Em segundo lugar, vamos usar concernsem seu Usermodelo (mais: por que isso? )

# models/user.rb
class User < ActiveRecord::Base
include
Monitored
validates
:email, presence: true, uniqueness: true
end

Terceiro, adicione um novo arquivo chamado monitored.rbparaapps/models/concerns

# models/concerns/monitored.rb
require 'createsend'
module Monitored
extend
ActiveSupport::Concern

included
do
after_create
:add_new_subscriber_to_list
end

def add_new_subscriber_to_list
auth
= {api_key: ENV['CAMPAIGN_MONITOR_API_KEY']}
begin
CreateSend::Subscriber.add auth, '76dc691d424ceab2f5d1ea2f68da79972', self.email, '', [], true
rescue CreateSend::BadRequest => br
p
'Error: #{br}'
end
end

handle_asynchronously
:add_new_subscriber_to_list
end

Algumas coisas estão acontecendo aqui.

  1. Eu adiciono um after_createmétodo de retorno de chamada chamado add_new_subscriber_to_list, que ocorrerá quando você criar um novo usuário
  2. Em add_new_subscriber_to_list, CreateSend::Subscriberrecebe a chave API, o ID da lista, o e-mail e mais três parâmetros. Mais sobre os parâmetros necessários aqui
  3. Já que você não quer que seu usuário espere um pouco depois de se inscrever para uma conta (depois de criar, você envia um POST para o terminal da API do Campaign Monitor), estou transferindo esta tarefa para um trabalhador em segundo plano aqui usando um trabalho atrasado comhandle_asynchronously

E isso é tudo. Agora, as informações de seus usuários estarão sempre sincronizadas com a lista do Campaign Monitor. Feliz envio de e-mail!