我正在后台启动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
答案 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 }
})