Gibbon更新电子邮件

时间:2014-02-14 14:25:30

标签: ruby ruby-on-rails-3.2 mailchimp ruby-1.9.3 gibbon

我正在后台启动sidekiq-job,通过after_commit回调在后台更新用户newsletter_info async。因此,如果用户在他的设置中更新了他的语言,那么语言也会在MailChimp中更新。除了emailadresse,一切正常。如果用户更新了他的电子邮件,它将显示在日志消息中,它将在正确的位置,但不会在mailchimp中更新。相反,使用新电子邮件地址的新用户可以使用mailchimp列表......

所以一个选项可能是删除旧的,但我认为解决方案不干净。

我的另一个想法是,虽然订阅者ID可能是emailadresse,但错误可能会出现。

非常感谢你的帮助,

问候,哈立德。

def update_newsletter_info(args)
  NDC.push "KHALED -- "
  Rails.logger.debug "UPDATENEWSLETTERINFO ARGS: #{args}"
  XIXI::Workflow.for(TwitterUsersMaintainer, args) do |workflow, user|
    Rails.logger.debug "INFOS IN UPDATENEWSLETTERINFO #{user.locale} #{user.email}"
    gb = Gibbon::API.new
    cfg = XOXO::Mailchimp.config

    gb.lists.subscribe(
      :id    => cfg.list_id,
      :email => { :email => user.email },
      :merge_vars => {
        :mc_language => user.locale,
        :groupings => [
          { name: cfg.group_name, groups: [ user.recurring_payment? ? 'basic' : 'free' ] }
        ]
      },
      :double_optin    => !!cfg.double_optin,
      :update_existing => true,
      :send_welcome    => !!cfg.send_welcome
    )

    # continue
    workflow.continue_with(user)
  end
  NDC.pop
end

2 个答案:

答案 0 :(得分:1)

我的问题的答案是: 我已经提到电子邮件地址虽然可以是mailchimp订阅者列表中的id。它就是。

因此,我在模型中使用此代码取消订阅旧电子邮件地址,并将新用户添加到订阅者列表中:

if self.previous_changes.include?("email")
      email = self.previous_changes[:email][0]
      UsersMaintainer.perform_async( action: :unsubscribe_newsletter, email: email )
    end
    UsersMaintainer.perform_async( action: :update_newsletter_info, user_id: self.id )

并将新成员添加到列表中。

也许这不是最好的方式,但它正在发挥作用! ;)

感谢任何读过这个问题的人!

答案 1 :(得分:0)

电子邮件地址可以用长臂猿更改:

gibbon.lists(list_id).members(Digest::MD5.hexdigest(old_email))
  .upsert({
    body: { email_address: new_email }
  })