Как подписать новых пользователей с помощью Mailchimp API 3.0 и Gibbon 2.x

В моем приложении я хочу автоматически подписывать пользователей на список MailChimp, когда они создаются. Вся документация, которую я нашел, фокусируется на MailChip API 2.0 и Gibbon 1.x.

Вот что у меня так далеко:

Я создал файл.env с:

MAILCHIMP_API_KEY = "my_api_key"
MAILCHIMP_LIST_ID = "my_list_id"

Я создал инициализатор gibbon.rb с:

Gibbon::Request.api_key = ENV["MAILCHIMP_API_KEY"]
Gibbon::Request.timeout = 15

Затем создал работу:

class SubscribeUserToMailingListJob < ActiveJob::Base
  queue_as :default

  def perform(user)
    gibbon = Gibbon::Request.new
    # I am getting errors from this line
    gibbon.lists(ENV["MAILCHIMP_LIST_ID"]).members.create(body: {email_address: user.email, status: "subscribed", merge_fields: {FNAME: user.name, LNAME: ""}})
  end
end

В моем user.rb я это после проверки

after_create :subscribe_user_to_mailing_list

И добавил это под частным:

def subscribe_user_to_mailing_list
  SubscribeUserToMailingListJob.perform_later(self)
end

Я получаю ошибку 400 от gibbon.lists(ENV["MAILCHIMP_LIST_ID"]).members.create(body: {email_address: user.email, status: "subscribed", merge_fields: {FNAME: user.name, LNAME: ""}})

********РЕДАКТИРОВАТЬ********

За этот разговор.

Я думаю, что ошибка произошла, потому что адрес электронной почты уже существовал в списке. Когда я впервые получил сообщение об ошибке, адрес электронной почты был добавлен в список MailChimp, но пользователь не был создан в моем приложении из-за другой ошибки. Теперь, когда я пытаюсь создать пользователя с тем же адресом электронной почты, появляется ошибка 400, потому что электронная почта уже существует. Это также предотвращает создание пользователя в моем приложении.

Может кто-нибудь с немного большим опытом, пожалуйста, проверьте, правильно ли это?

1 ответ

Вы правы - если вы делаете POST позвоните, и то, что вы публикуете, уже существует, вы получите сообщение об ошибке. Пока API не поддерживает PUTОбновление или подписка - это двухэтапная операция. Проверьте, существует ли подписчик, и затем используйте соответствующий метод. Или вы можете просто попытаться PATCH сначала и сделай POST если это не с 404.

Другие вопросы по тегам