J'essaie d'abonner des utilisateurs à Mailchimp avec Gibbon 2.2.4 avec un générique subscribe
que j'ai utilisée, et peu de temps après, je souhaite ajouter quelques champs supplémentaires pour suivre les résultats d'un quiz auquel ils ont répondu.
Je souhaite stocker ces données sur Mailchimp car j'aimerais gérer les courriels que j'envoie directement à partir du tableau de bord de Mailchimp.
Le service que j'ai créé pour gérer mes abonnements :
class MailchimpService
def subscribe(list_id,email,first_name)
GIBBON.lists(list_id).members.create({
body: {
email_address: email,
status: 'subscribed',
merge_fields: {
FNAME: first_name,
},
double_optin: false,
update_existing: true
}
})
end
def subscribe_to_quiz(first_name, email, user_id, quiz_id)
list_id = ENV['QUIZ_MAILCHIMP_LIST_ID']
if subscribe(list_id,email,first_name)
attempt = QuizAttempt.where("user_id = ? AND quiz_id = ?", user_id, quiz_id).last
correct = attempt.correct_answer_count
total = attempt.questions_answered
successful = attempt.successful?
send_quiz_results(list_id, email, correct, total, successful)
end
end
def send_quiz_results(list_id, email, correct, total, successful)
GIBBON.lists(list_id).members(email).upsert(
body: {
email_address: email,
status: 'subscribed',
merge_fields: {
correct_answers: correct,
total_answers: total,
successful: successful
},
update_existing: true
})
end
end
En subscribe_to_quiz
Je suis en train d'abonner l'utilisateur à ma liste de quiz dans Mailchimp. Les valeurs des champs que je mets à jour ici ne sont pas pertinentes, mais je pense qu'elles sont assez explicites. Lorsque j'essaie d'exécuter ma déclaration upsert dans send_quiz_results
J'obtiens l'erreur suivante :
the server responded with status 400
@title="Member Exists",
@detail="foo@bar.baz is already a list member. Use PUT to insert or update list members.",
@body={"type"=>"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/", "title"=>"Member Exists", "status"=>400, "detail"=>"foo@bar.baz is already a list member. Use PUT to insert or update list members.", "instance"=>""},
@raw_body="{\"type\":\"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/\",\"title\":\"Member Exists\",\"status\":400,\"detail\":\"foo@bar.baz is already a list member. Use PUT to insert or update list members.\",\"instance\":\"\"}",
@status_code=400
Je n'ai aucune idée de la raison pour laquelle il ne me permet pas de le faire... Il semble qu'il se réfère à un create
mais la source extraite de l'erreur fait référence à mon upsert
déclaration.
Je sais que j'utilise le verbe PUT correspondant pour Gibbon, puisque ce qui suit est tiré directement de la documentation :
Bien entendu, le corps n'est pris en charge que pour les appels de création, de mise à jour et d'insertion. Ceux-ci correspondent respectivement aux verbes HTTP POST, PATCH et PUT.
Je n'ai aucune idée de la raison pour laquelle cela ne fonctionne pas... J'ai essayé d'enlever les autres champs et d'ajouter simplement ceux que je mets à jour. J'ai également essayé de l'exécuter directement depuis le terminal pour m'assurer que rien ne se chevauche.