2016-09-09 5 views
2

MailchimpにGibbon 2.2.4というユーザーを登録しようとしていますが、使用していた一般的なsubscribeメソッドを使用しました。その後、追加のフィールドを追加して彼らが取ったクイズ。既存のメンバーでupsertを使用できません

Mailchimpのダッシュボードから直接送信したメールを管理したいので、このデータをMailchimpに保存します。

私は私のサブスクリプションを処理するために作成したサービス:subscribe_to_quiz

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 

、私はMailchimpの私quiz_listにユーザーをサブスクライブしています。私がここで更新しているフィールドの値は無関係ですが、私はそれらが非常に説明的だと思います。私はsend_quiz_resultsで私UPSERTステートメントを実行しようとすると、私は次のエラーを取得する:

the server responded with status 400 
@title="Member Exists", 
@detail="[email protected] 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"=>"[email protected] 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\":\"[email protected] is already a list member. Use PUT to insert or update list members.\",\"instance\":\"\"}", 
@status_code=400 

私はそれは私がこれをやらせない理由見当もつかない...それはcreate文を参照しているように思えるが、抽出されたエラーの原因は、私のupsertステートメントを参照しています。

私はギボンのために、対応するPUT動詞を使用しています知っている次はストレートの文書から取られているので、:もちろん

、ボディのみが作成、更新、およびUPSERTコールでサポートされています。これらはそれぞれHTTP POST、PATCH、およびPUT動詞に対応します。

私はこれがうまくいかない理由を知りません...私は他のフィールドを取り出して、単に私が更新しているものを投げ込もうとしました。私はまた、何も重なっていないことを確認するために端末からまっすぐ走ってみました。

+0

は、あなたがこれを知っているかを教えてもらえますか?しかし、抽出されたエラーのソースは私のupsertステートメントを参照しています。「エラーの抽出元はどういう意味ですか? –

+1

これは、エラーが示す行です。私はもっ​​と明確にすべきだったと思うし、ちょうどupsertコールがトレースの一番上にあると言いました。 – Doug

+0

私はまた、メンバーからの*作成*をしようとしていないことを確認するために、ターミナルから明示的にupsertを呼び出しました。それはまだPOSTや何かをしているようですが... – Doug

答えて

5

MailChimp API docsは、メンバの更新時に、メンバの電子メールアドレスの小文字バージョンのMD5ハッシュであるメンバのsubscriber_hashを提供する必要があることを示しています。 MD5とメールアドレスハッシュする

使用Digest::MD5.hexdigest

GIBBON.lists(list_id).members(Digest::MD5.hexdigest(email.downcase)).upsert 
+0

私の場合はmd5ハッシュを使用しています –

+2

oops、downcaseが私のためにトリックをしました –

関連する問題