public void ExistingEventCampaign() { // //Test Parameters // string altCustId = ConfigurationManager.AppSettings["AltCustId"]; string eventName = ConfigurationManager.AppSettings["EventName"]; string tokenName = ConfigurationManager.AppSettings["TokenName"]; string tokenValue = ConfigurationManager.AppSettings["TokenValue"]; // BrickStreetConnect brickst = makeClient(); HttpStatusCode status; string statusMessage; string timecode = DateTime.Now.ToLongTimeString(); Customer customer = brickst.GetCustomerByAltId(altCustId, out status, out statusMessage); if (customer == null) { string randomEmail = "user" + timecode + "@example.com"; customer = new Customer(); customer.EmailAddress = randomEmail; customer.AltCustomerId = altCustId; Customer cust2 = brickst.AddCustomer(customer, out status, out statusMessage); if (status != HttpStatusCode.OK) { Console.WriteLine("ERROR: STATUS:" + status.ToString() + " " + statusMessage); throw new Exception("null customer received from add customer"); } } long custId = Convert.ToInt32(customer.Id); if (!string.IsNullOrEmpty(tokenName) && !string.IsNullOrEmpty(tokenValue)) { //fetch attribute metadata BrickStAPI.Connect.Attribute attrDef = brickst.GetCustomerAttribute(tokenName, out status, out statusMessage); if (status != HttpStatusCode.OK) { Console.WriteLine("ERROR: STATUS:" + status.ToString() + " " + statusMessage); } string attrType = attrDef.Type; bool doupdate = false; CustomerAttribute attr = customer.GetChannelAddress(tokenName); if (string.Compare("attribute", attrType, StringComparison.OrdinalIgnoreCase) == 0) { if (attr == null) { attr = new CustomerAttribute(); attr.Name = attrDef.Name; attr.Type = attrDef.Type; attr.DataType = attrDef.DataType; attr.Value = tokenValue; customer.Attributes.Add(attr); doupdate = true; } else { // update if new if (!tokenValue.Equals(attr.Value)) { attr.Value = tokenValue; doupdate = true; } } } else if (string.Compare("preference", attrType, StringComparison.OrdinalIgnoreCase) == 0) { if (attr == null) { attr = new CustomerAttribute(); attr.Name = attrDef.Name; attr.Type = attrDef.Type; attr.DataType = attrDef.DataType; // start with 1 value attr.PreferenceValues = new String[1]; attr.PreferenceValues[0] = tokenValue; customer.ChannelAddresses.Add(attr); doupdate = true; } else { // existing preference record // add the token value if it is not already there // the push channel code will automatically remove invalid device tokens String[] vals = attr.PreferenceValues; bool valuefound = false; for (int i = 0; i < vals.Length; i++) { String val = vals[i]; if (tokenValue.Equals(val)) { valuefound = true; break; } } if (!valuefound) { String[] newVals = new String[vals.Length + 1]; Array.Copy(vals, 0, newVals, 0, vals.Length); newVals[newVals.Length - 1] = tokenValue; attr.PreferenceValues = newVals; doupdate = true; } } } // save updated customer record if necessary if (doupdate) { Customer custSave2 = brickst.UpdateCustomer(customer, out status, out statusMessage); if (custSave2 == null) { throw new Exception("null customer received from updateCustomer"); } customer = custSave2; } } // //create an event record // BrickStreetAPI.Connect.Event eventObj = new BrickStreetAPI.Connect.Event(); eventObj.EventName = eventName; eventObj.CustomerId = custId; eventObj.Subscribe = true; eventObj.Parameters = new List <EventParameter>(); DateTime now = new DateTime(); //event parameter: Message EventParameter ep1 = new EventParameter(); ep1.ParameterName = "Message"; ep1.ParameterValue = "Test at " + now.ToString(); ep1.Encrypted = false; eventObj.Parameters.Add(ep1); //event parameter:Badge EventParameter ep2 = new EventParameter(); ep2.ParameterName = "Badge"; ep2.ParameterValue = "42"; ep2.Encrypted = false; eventObj.Parameters.Add(ep2); //event parameter: AlertID EventParameter ep3 = new EventParameter(); ep3.ParameterName = "AlertID"; ep3.ParameterValue = timecode; ep3.Encrypted = false; eventObj.Parameters.Add(ep3); // //submit event to connect // BrickStreetAPI.Connect.Event posted = brickst.AddEvent(eventObj, out status, out statusMessage); if (status != HttpStatusCode.OK) { Console.WriteLine("ERROR: STATUS:" + status.ToString() + " " + statusMessage); throw new Exception("addEvent returned null"); } long eventQueueId = Convert.ToInt32(posted.Id); long eventId = Convert.ToInt32(posted.EventId); Console.WriteLine("Posted Event;ID=" + eventQueueId + " for CustomerID=" + custId + " and Event ID=" + eventId); }
public void EventReceiptTest() { BrickStreetConnect brickst = makeClient(); HttpStatusCode status; string statusMessage = null; // // verify that conversation exists // // CONV NAME: "TEST ERECEIPT CONVERSATION" // // SPENTLY: SHOULD CREATE A CONVERSATION OBJECT FOR EACH SPENTLY ACCOUNT Conversation conv = brickst.GetConversationByName("TEST ERECEIPT CONVERSATION", out status, out statusMessage); if (status == HttpStatusCode.NotFound) { // conversation not found; create it Assert.IsNull(conv, "Expected null conversation"); conv = new Conversation(); conv.Name = "TEST ERECEIPT CONVERSATION"; conv.DepartmentID = ConnectDepartmentID; Conversation conv2 = brickst.AddConversation(conv, out status, out statusMessage); Assert.AreEqual(HttpStatusCode.OK, status); Assert.IsNotNull(conv2); Assert.IsNotNull(conv2.Id); Assert.AreEqual(conv.Name, conv2.Name); conv = conv2; } Assert.IsNotNull(conv); // // create new campaign // string campaignName = "TEST ERECEIPT " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString(); EventMaster eventMaster = new EventMaster() { Name = campaignName, IncludeXML = true }; // NO EVENT PARAMS EventCampaign camp = new EventCampaign() { Name = campaignName, Type = Campaign.EVENT_CAMPAIGN, ConversationID = conv.Id, DepartmentID = ConnectDepartmentID, Event = eventMaster }; EventCampaign savedCamp = brickst.AddEventCampaign(camp, out status, out statusMessage); Assert.AreEqual(HttpStatusCode.OK, status); Assert.IsNotNull(savedCamp); Assert.IsNotNull(savedCamp.Id); Assert.AreEqual(ConnectDepartmentID, savedCamp.DepartmentID); camp = savedCamp; // // create content // CampaignContent cont = new CampaignContent() { Name = campaignName + " CONTENT", Type = CampaignContent.TYPE_XSL, Subject = "TEST SUBJ LINE FOR " + campaignName, // // NOTE: THIS URL SHOULD BE THE URL OF THE RECEIPT TEMPLATE XSL !!! /// HtmlContentURL = "http://content.brickst.net/eNotify/spently/eReceipt/spently-receipt2.xsl", CampaignID = (long)camp.Id }; CampaignContent cont2 = brickst.AddCampaignContent(cont, out status, out statusMessage); if (statusMessage != null) { Console.WriteLine("ERROR SAVING CONTENT: " + statusMessage); } Assert.AreEqual(HttpStatusCode.OK, status); Assert.IsNotNull(cont2); Assert.IsNotNull(cont2.Id); cont = cont2; // // create message interaction to use the content // CampaignInteraction inter = new CampaignInteraction() { Name = "Test Interaction 1", Type = CampaignInteraction.TYPE_MAIN_MESSAGE, CampaignID = (long)camp.Id, ContentID = (long)cont.Id, SegmentID = 1 }; CampaignInteraction inter2 = brickst.AddMessage(inter, out status, out statusMessage); Assert.AreEqual(HttpStatusCode.OK, status); Assert.IsNotNull(inter2); Assert.IsNotNull(inter2.Id); inter = inter2; // // Prepare to Launch the Interaction // RolloutAction raction = new RolloutAction() { Action = RolloutAction.ACTION_PREPARE_LAUNCH, EffectiveDate = DateTime.Now.ToUniversalTime() }; RolloutActionResponse raresp = brickst.DoRolloutAction((long)camp.Id, (long)inter.Id, raction, out status, out statusMessage); if (statusMessage != null) { Console.WriteLine("ERROR ROLLOUT ACTION 1: " + statusMessage); } Assert.AreEqual(HttpStatusCode.OK, status); Assert.IsNotNull(raresp); Assert.AreEqual(RolloutActionResponse.STATUS_OK, raresp.Status); raction = new RolloutAction() { Action = RolloutAction.ACTION_LAUNCH }; raresp = brickst.DoRolloutAction((long)camp.Id, (long)inter.Id, raction, out status, out statusMessage); if (statusMessage != null) { Console.WriteLine("ERROR ROLLOUT ACTION 2: " + statusMessage); } Assert.AreEqual(HttpStatusCode.OK, status); Assert.IsNotNull(raresp); Assert.AreEqual(RolloutActionResponse.STATUS_OK, raresp.Status); // // event campaign is active; create a customer and submit events // string altCustId = "TEST" + DateTime.Now.Ticks.ToString(); string email = altCustId + "@cmaeda.com"; Customer cust = new Customer { AltCustomerId = altCustId, StatusCode = 1, EmailAddress = email, FirstName = "Test", LastName = "Testman" }; Customer dbCust = brickst.AddCustomer(cust, out status, out statusMessage); if (status != HttpStatusCode.OK) { Console.WriteLine("ERROR: STATUS:" + status.ToString() + " " + statusMessage); } Assert.AreEqual(HttpStatusCode.OK, status); Assert.IsNull(statusMessage); Assert.IsNotNull(dbCust); Assert.IsNotNull(dbCust.Id); Assert.AreEqual(cust.AltCustomerId, dbCust.AltCustomerId); Assert.AreEqual(cust.EmailAddress, dbCust.EmailAddress); Assert.AreEqual(cust.LastName, dbCust.LastName); Assert.AreEqual(cust.FirstName, dbCust.FirstName); cust = dbCust; // // have customer, submit event // StringBuilder bld = new StringBuilder(); bld.Append("<purchase>"); bld.Append("<customer_name>"); bld.Append(cust.FirstName).Append(" ").Append(cust.LastName); bld.Append("</customer_name>"); bld.Append("<line_items>"); // LINE ITEM... bld.Append("<item>"); bld.Append("<item_name>Hat</item_name>"); bld.Append("<item_quantity>1</item_quantity>"); bld.Append("<item_price>9.95</item_price>"); bld.Append("</item>"); // LINE ITEM... bld.Append("<item>"); bld.Append("<item_name>Shoes</item_name>"); bld.Append("<item_quantity>1</item_quantity>"); bld.Append("<item_price>19.95</item_price>"); bld.Append("</item>"); bld.Append("</line_items>"); bld.Append("</purchase>"); string xml = bld.ToString(); Event tstEvent = new Event { EventName = campaignName, CustomerId = (long)cust.Id, Xml = xml, Subscribe = true }; Event dbEvent = brickst.AddEvent(tstEvent, out status, out statusMessage); if (status != HttpStatusCode.OK) { Console.WriteLine("ERROR: STATUS:" + status.ToString() + " " + statusMessage); } Assert.AreEqual(HttpStatusCode.OK, status); Assert.IsNull(statusMessage); Assert.IsNotNull(dbEvent); Assert.IsNotNull(dbEvent.Id); Assert.AreEqual(tstEvent.EventName, dbEvent.EventName); Assert.AreEqual(tstEvent.CustomerId, dbEvent.CustomerId); Assert.AreEqual("1", dbEvent.Status); Console.WriteLine("SUBMITTED EVENT " + dbEvent.Id); }