MailChimp i Rails

Lige så snart man laver websites, hvor brugere kan registrere sig på den ene eller anden måde, løber man også ind i, at det kunne være rart at kunne kommunikere med dem via mails – enten som enkeltstående mails med vigtige oplysninger eller som deciderede kampagner, hvor man gerne vil kunne følge med i, om kampagnerne virker. Til dette er MailChimp som skræddersyet – man får en masse værktøjer til styring af maillists, kampagner, til statistik osv. Og de tilbyder tilmed, at man gratis kan gemme op til 500 mailadresser og sende op til 3000 mails om måneden!

Hele administrationen af mails, kampagner og lister er pakket pænt ind i et API, der bruger HTTP-protokollen til kommunikationsmedie, og dokumentationsniveauet af API’et er faktisk forbilledligt – alle metoder, parametre og returværdier er rimeligt godt beskrevet. Så hvis man vil, kan man selv skrive hele integrationen selv.

Men der er også en anden mulighed, hvis man arbejder med Rails – gem’en Hominid fungerer som en komplet Ruby wrapper af version 1.2 af MailChimp API’et. Dvs. at der ikke er decideret integration med ActiveRecord, ActionController osv. HTTP-kommunikationen er blot abstraheret væk, og så er Hominid også environment aware, så man nemt kan bruge forskellige MailChimp-konti i de forskellige miljøer.

I config/hominid.yml angiver man bl.a. brugernavn, password og api-nøgle på samme måde som man angiver databaseoplysninger i config/database.yml:

development:
	username: usrnme
	password: pw
	api_key: apikey
	send_goodbye: false
	send_notify: false
	double_opt_in: false

Tilsvarende kan man lave konfiguration til test og production (og alle de andre miljøer, man måtte have defineret).

Jeg vil ikke gå så meget i dybden med API’et – der er et eksempel på Github. Til gengæld vil jeg blot vise et lille eksempel på en praktisk anvendelse af Hominid.

På MailChimp har man mulighed for selv at oprette navngivne felter til forskellige slags data, man ønsker modtagere skal oprettes med; såkaldte merge tags. Følgende er blot et lille eksempel på, hvordan man registrerer en ny modtager vha. et ActiveRecord callback (i dette tilfælde after_save), hvor man samtidig sender data med, som skal knyttes til merge tags. Det er ikke raketvidenskab, og det er i høj grad eksempelkode, da der ikke er nogen former for fejlhåndtering eller validering.

class User < ActiveRecord::Base
  after_save :send_to_mailchimp

protected
  def send_to_mailchimp
    list = Hominid::List.find_by_name("users")
    list.subscribe(self.email, :merge_tags => {"NAME" => self.name, "CNAME" => self.company_name})
  end
end

Det interessante her foregår i linie 7, hvor man kan se, at jeg som andet argument til list.subscribe sender et hash med, hvor den eneste value er et andet hash – i det andet hash skal man blot angive navnene på de ønskede merge tags som keys i hashet. Mere er der sådan set ikke i det.

Mere skal der ikke til for at oprette modtagere i MailChimp – og lige som man kan oprette modtagere, kan man naturligvis opdatere dem og slette dem igen. Foruden alle de andre ting, som API’et også giver mulighed for.

Hvis jeg dog skulle nævne en enkelt ting, jeg godt kunne ønske mig (eller selv lave), så er det at kunne integrere MailChimp helt med ActiveRecord – f.eks. vha. en acts_as_subscriber-metode, hvor man kan angive hvilke af modelobjektets attributer, man ønsker at sende over til MailChimp, og så sørger den ellers for at registrere de nødvendige callbacks.

Del med andre:
  • Print
  • email
  • Facebook
  • Twitter
  • Google Bookmarks
  • FriendFeed

Related posts:

  1. Rails testing
  2. En dag med Ruby, Rails og Cucumber
  3. acts_as_publishable Rails Gem
  4. JRuby on Rails blandet med Java
  5. i18n og L10n
Ingen Kommentarer
Tagged , , , , ,

Skriv et svar

 

Bruger Gravatarer i kommentarerne - få din egen idag og bliv genkendt!

XHTML: Dette er nogle af de tags, du kan bruge: <a href=""> <b> <blockquote> <code> <em> <i> <strike> <strong>