如果某人尚不存在,请订阅他们到 Mailchimp 列表

Posted

技术标签:

【中文标题】如果某人尚不存在,请订阅他们到 Mailchimp 列表【英文标题】:Subscribe someone to Mailchimp list if they don't already exist 【发布时间】:2015-08-09 06:57:37 【问题描述】:

我最近添加了使用 Gibbon gem 从我的 rails 应用程序订阅人们到 mailchimp 列表的功能。

在人们注册时订阅列表非常有效,当他们登录时它会更新他们在 mailchimp 列表中的信息(例如登录次数和 last_login_date)。

但是有其他用户在使用我想添加到 mailchimp 列表中的应用程序,但因为他们已经有一个帐户,他们不会再次注册,因此不会被订阅。

我正在尝试向登录页面添加一个 if 语句,如果它们尚不存在,则将它们订阅到列表中,但无法弄清楚语法。

例如,如果我测试它以查找我知道不存在的用户,如下所示:

Gibbon::API.lists.member_info(:id => list_id, :emails => [:email => "d@duncanma.com"])

然后它返回这个:

"success_count"=>0, "error_count"=>1, "errors"=>["email"=>"email"=>"d@duncanma.com", "error"=>"The id passed does not exist on this list", "code"=>232], "data"=>[]

但我需要的只是一个真假...

我试过了:

Gibbon::API.lists.member_info(:id => list_id, :emails => [:email => "d@duncanma.com"]).include("success_count"=>0)?

但这显然不起作用,因为它说未定义方法 include? for Hash...

关于如何将其转换为真或假布尔值的任何想法?

【问题讨论】:

我可以提出一个有点尴尬的解决方案,但我已经使用Gibbon::API.lists.members(:id => list_id) 获取列表的所有成员并手动解析响应以检查特定用户是否存在。 嗯,我想我可以这样做,但就像你说的那样,这感觉有点尴尬……这个名单已经包括了几千人,所以这可能会减慢这个过程有点,对吧? 【参考方案1】:

好吧,在尝试了一些不同的事情之后,我最终通过这样做解决了这个问题:

begin
  @list_member = Gibbon::API.lists.member_info(:id => list_id,
                             :emails => [:email => current_user.email]
                             )
  if @list_member["success_count"] = 1
    Gibbon::API.lists.update_member(:id => list_id,
              :email => :email => current_user.email,
              :merge_vars => :MMERGE4 => current_user.trips.count,
              :MMERGE13 => Date.today,
              :MMERGE5 => current_user.miles_sailed
              )
  elsif @list_member["success_count"] = 0
    Gibbon::API.lists.subscribe(:id => list_id,
              :email => :email => current_user.email,
              :merge_vars => :FNAME => current_user.name,
              :LNAME => current_user.last_name,
              :MMERGE3 => current_user.login,
              :double_optin => false)
  end
rescue Gibbon::MailChimpError => e
  return redirect_to root_path, :flash => error: e.message
end

【讨论】:

【参考方案2】:

如果您的目标只是发现电子邮件是否在您的列表中,那么最后一个答案效果很好。如果您的最终目标是“创建或更新”,那么您只需将 update_existing 参数传递给 subscribe 调用。

有关详细信息,请参阅API Docs for /lists/subscribe

【讨论】:

以上是关于如果某人尚不存在,请订阅他们到 Mailchimp 列表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用他们的 api 3.0 创建/更新大量电子邮件到 Mailchimp 列表?

使用 Mailchimp 的 API 将订阅者添加到列表

使用 Mailchimp api v3.0 将订阅者添加到分段

取消订阅后将用户重新订阅到 MailChimp 列表

sql 如果值尚不存在,请插入值

如何让已经订阅的用户再次订阅 Mailchimp/Aweber/GetResponse 列表