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 concerns
em seu User
modelo (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.rb
paraapps/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.
- Eu adiciono um
after_create
método de retorno de chamada chamadoadd_new_subscriber_to_list
, que ocorrerá quando você criar um novo usuário - Em
add_new_subscriber_to_list
,CreateSend::Subscriber
recebe a chave API, o ID da lista, o e-mail e mais três parâmetros. Mais sobre os parâmetros necessários aqui - 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 com
handle_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!