您的广告系列尚未准备好使用C#发送mailchimp api v3。

问题描述 投票:2回答:1
我创建了代码,以使用C#控制台使用mailchimp api v3.0来立即发送活动。当我尝试免费帐户时,一切都会顺利进行,但是当我以高级身份升级帐户时,出现了此问题(仅添加2个成员)。

我的场景:

    创建受众群体=>成功
  1. 将会员订阅者添加到我创建的受众中=>成功
  2. 使用特殊模板创建广告系列=>成功
  3. 在已创建的广告系列中发送cehcklist =>返回is_ready false
  4. 发送广告系列=>返回您的广告系列尚未准备好发送
  5. [当我尝试使用控制台C#运行控制台程序时,我使用mailchimp api收到了返回消息:

====Error======== Type: http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/ Title: Bad Request Status: 400 Detail: Your Campaign is not ready to send. instance: 214b85f4-a288-44e7-b890-35925d8601ac

当我将活动登录到mailchimp网站门户时,我看到了这样的消息:

To send, you need at least 1 subscriber in your list.

表示我的广告系列中没有收件人,这是详细图片:enter image description here

请任何人像我一样面对,每一个暗示我真的很欣赏它。

在发送露营广告之前,有什么方法可以解决该问题?因为当我检查mailchimp门户(基于上面的图像)时,我返回到广告系列列表,然后在问题自动打开的上方打开我的广告系列,这使我感到困惑。

因为mailchimp api v3.0在一个调用中仅限制了500个成员订阅者,最后我创建了一个类来对列表进行分区:

//partition list of members more than 500 public static class Extensions { public static List<List<T>> SplitPartition<T>(this IEnumerable<T> collection, int size) { var chunks = new List<List<T>>(); var count = 0; var temp = new List<T>(); foreach (var element in collection) { if (count++ == size) { chunks.Add(temp); temp = new List<T>(); count = 1; } temp.Add(element); } chunks.Add(temp); return chunks; } }

这是我的使用几种方案处理单个方法的主要代码,可以通过多种方式调用:

public class MailChimpProcessor { static MailChimpProcessor() { //initialize ApiHelper.InitializeClient(baseUrl, apiKey); } public class MailChimpResponse { public string result { get; set; } public GlobalErrorResponseModel error { get; set; } } public static MailChimpResponse MailChimpSendCampaign(SendEmailCampaignModel model) { MailChimpResponse mailchimpResult = new MailChimpResponse(); #region PROPERTY OBJECT AUDIENCE Contact contact = new Contact() { company = model.audience_company, address1 = model.audience_address1, address2 = model.address2Config, city = model.audience_city, state = model.audience_state, zip = model.audience_zip, country = model.audience_country, phone = model.phoneConfig }; CampaignDefaults campaign = new CampaignDefaults() { from_name = model.campaign_from_name, from_email = model.campaign_reply_to, subject = model.campaign_subject, language = "en" }; AudienceRequestModel audienceModel = new AudienceRequestModel(); audienceModel.name = model.audience_name; audienceModel.contact = contact; audienceModel.permission_reminder = permissionReminderConfig; audienceModel.use_archive_bar = true; audienceModel.campaign_defaults = campaign; audienceModel.notify_on_subscribe = ""; audienceModel.notify_on_unsubscribe = ""; audienceModel.email_type_option = true; #endregion #region PROPERTY OBJECT MEMBER List<Member> members = new List<Member>(); //prevent duplicate email_address var queryMemberList = model.members.GroupBy(x => x.email_address).Select(x => x.First()); foreach (var item in queryMemberList) { members.Add(new Member { email_address = item.email_address.ToLower(), status = "subscribed", status_if_new = "subscribed", merge_fields = new MergeFields() { FNAME = item.merge_fields.FNAME, LNAME = item.merge_fields.LNAME } }); } bool isUploadContact = false; int offset = 0; const int numberPerBatch = 500; // maximum member per execution. double LoopMax = Math.Ceiling(members.Count / (double)numberPerBatch); //partition array var PartitionMembers = members.SplitPartition(numberPerBatch); #endregion //create audience using post method var audienceResult = AudienceProcessor.PostAudienceAsync(audienceModel).Result; #region PROPERTY OBJECT CAMPAIGN Recipients recipient = new Recipients() { list_id = audienceResult.ResponseModel != null ? audienceResult.ResponseModel.id : "0" }; Settings setting = new Settings() { subject_line = model.campaign_subject, title = model.campaign_title, reply_to = model.campaign_reply_to, from_name = model.campaign_from_name, template_id = model.campaign_template_id }; CampaignRequestModel campaignModel = new CampaignRequestModel(); campaignModel.recipients = recipient; campaignModel.type = "regular"; campaignModel.settings = setting; #endregion if (audienceResult.ResponseModel != null) { MemberProcessor.MemberResponse memberResult = new MemberProcessor.MemberResponse(); while (offset < LoopMax) { MemberRequestModel memberModel = new MemberRequestModel(); memberModel.members = PartitionMembers[offset];//list based on index of array memberModel.update_existing = true; //post contact member memberResult = MemberProcessor.PostContatcAsync(memberModel, audienceResult.ResponseModel.id).Result; if (memberResult.ResponseModel != null) { isUploadContact = true; } else { isUploadContact = false; } offset++;//increament } //create campaign if (isUploadContact)//belum tereksekusi { //sleep thread 20 seconds after upload subcriber members System.Threading.Thread.Sleep(20000); //create campaign using post method var campaignResult = CampaignProcessor.PostCampaignAsync(campaignModel).Result; if (campaignResult.ResponseModel.id != null) { #region USING ITERATION TO CHECK CAMPAIGN CampaignProcessor.CampaignResponseCheckList campaignChecklist = new CampaignProcessor.CampaignResponseCheckList(); bool isReadySend = false; int check = 0; while (check <= 10) //maksimum 10 iteration { //check campaign using get method campaignChecklist = CampaignProcessor.GetCheckListCampaign(campaignResult.ResponseModel.id).Result; if (campaignChecklist.ResponseModel.is_ready == true) //when error model is not null { isReadySend = true; break; } else { isReadySend = false; } System.Threading.Thread.Sleep(1000); // will puase every 1 second check++; } if (isReadySend) { //sleep action before send campaign System.Threading.Thread.Sleep(2000); //send campaign var sendCampaignResult = CampaignProcessor.SendCampaignAsync(campaignResult.ResponseModel.id).Result; if (sendCampaignResult.ErrorModel == null) mailchimpResult.result = sendCampaignResult.ResponseModel; else mailchimpResult.error = sendCampaignResult.ErrorModel; //i got this return indicate that my campaign is not ready } else { mailchimpResult.error = campaignChecklist.ErrorModel; mailchimpResult.result = $"failed Check List Campaign / Your Campaign is not ready to send."; } #endregion } else { mailchimpResult.error = campaignResult.ErrorModel; mailchimpResult.result = "failed create Campaign"; } } else { mailchimpResult.result = $"failed create contact: {offset}"; mailchimpResult.error = memberResult.ErrorModel; } } else { mailchimpResult.error = audienceResult.ErrorModel; mailchimpResult.result = "failed create Audience"; } return mailchimpResult; } }

我创建了代码,以使用C#控制台使用mailchimp api v3.0来立即发送活动。当我尝试使用免费帐户时,一切都会顺利进行,但是当我以高级帐户升级帐户时,我得到了此...
c# mailchimp-api-v3.0
1个回答
1
投票
在下面尝试此代码
© www.soinside.com 2019 - 2024. All rights reserved.