public void CanCreateRequestWithEmailCCs() { var emailCCs = new List <EmailCC> { new EmailCC { UserEmail = "*****@*****.**" }, new EmailCC { UserEmail = "*****@*****.**" } }; var req = new Request { Subject = "end user request test", Type = RequestType.incident, Comment = new Comment { Body = "end user test", HtmlBody = "end user test with </br> new line", Public = true }, Requester = new Requester { Name = "Test Name" }, Tags = new List <string> { "tag1", "tag2" }, EmailCCs = emailCCs }; var res = _api.Requests.CreateRequest(req); try { Assert.IsNotNull(res); Assert.IsNotNull(res.Request); Assert.IsTrue(res.Request.Id.HasValue); Assert.True(res.Request.Id.Value > 0); IndividualUserResponse user = _api.Users.GetUser(res.Request.RequesterId.Value); Assert.AreEqual("Test Name", user.User.Name); IndividualTicketResponse ticket = _api.Tickets.GetTicket(res.Request.Id.Value); CollectionAssert.AreEquivalent(new[] { "tag1", "tag2" }, ticket.Ticket.Tags); IList <long> collaboratorsIds = ticket.Ticket.CollaboratorIds; GroupUserResponse collaborators = _api.Users.GetMultipleUsers(collaboratorsIds.AsEnumerable()); CollectionAssert.AreEquivalent(emailCCs.Select(e => e.UserEmail), collaborators.Users.Select(u => u.Email)); } finally { Assert.True(_api.Tickets.Delete(res.Request.Id.Value)); } }
public ActionResult contact(ContactUsViewModel model) { ViewData["Page"] = "contact"; if (ModelState.IsValid) { if (_zendeskSettings.enable) { ZendeskApi_v2.ZendeskApi api = new ZendeskApi_v2.ZendeskApi(_zendeskSettings.url, _zendeskSettings.user, _zendeskSettings.token, _zendeskSettings.locale); string encodedEmail = System.Net.WebUtility.UrlEncode(model.EmailAddress); long id = 0; /*ZendeskApi_v2.Models.Search.SearchResults resultsOld = api.Search.SearchFor(string.Format("requester:{0}", encodedEmail)); * * if (resultsOld != null && resultsOld.Count > 0) * id = resultsOld.Results[0].Id;*/ // Ticket is not already created. lets create it now. try { IndividualTicketResponse response = api.Tickets.CreateTicket ( new ZendeskApi_v2.Models.Tickets.Ticket { Status = "new", Subject = "Contact Us", Tags = new List <string>() { "contactus" }, Comment = new ZendeskApi_v2.Models.Tickets.Comment { Body = model.Message, Public = false, }, Requester = new Requester() { LocaleId = 1, Name = model.SenderName, Email = model.EmailAddress }, Priority = "normal" } ); if (response == null || response.Ticket == null) { return(null); } else { id = (long)response.Ticket.Id; } model.Message = "Thank you for your request! A member of the our team will be in touch with you shortly."; model.AlertType = AlertTypes.Success; } catch (Exception ex) { // generate log Jugnoon.BLL.ErrorLgBLL.Add(_context, "Problem occured while submitting your request, please try again.", "/contact", ex.Message); model.Message = "Problem occured while submitting your request, please try again."; } } else { // Normal Email Sending Procedure _emailSender.ContactUsEmailAsync(_context, Configs.GeneralSettings.admin_mail, model); model.Message = SiteConfig.generalLocalizer["_message_sent"].Value; model.AlertType = AlertTypes.Success; } return(View("~/Views/Home/index.cshtml", model)); } return(View(model)); }
static void Main() { Console.WriteLine("Connecting to Zendesk"); //set up the API var api = new ZendeskApi("https://greenworkstools1552039260.zendesk.com/api/v2", "*****@*****.**", "713apipassword"); Console.WriteLine("Retrieving List of Fields"); //create an empty list of CustomField types to be populated with Custom Field IDs and Values IList <CustomField> customfields = new List <CustomField>(); IList <TicketField> allfields = new List <TicketField>(); //retrieve ticket fields from Zendesk GroupTicketFieldResponse fields = api.Tickets.GetTicketFields(); //populate field list with fields from Zendesk foreach (TicketField fielddata in fields.TicketFields) { allfields.Add(fielddata); } Console.WriteLine("Fields retrieved succesfully"); //print fields to make sure list of fields was retrieved succesfully /*foreach (TicketField fieldlistdata in allfields) * { * Console.WriteLine("The Ticket Field ID is: " + fieldlistdata.Id); * Console.WriteLine("The Ticket Field Name is: " + fieldlistdata.TitleInPortal); * Console.WriteLine("The Ticket Field Type is : " + fieldlistdata.Type); * Console.WriteLine("This Ticket Field is Required :" + fieldlistdata.Required); * Console.WriteLine("Field List Index of: " + allfields.IndexOf(fieldlistdata)); * }*/ while (true) { Console.WriteLine("Enter 'search' to search a ticket, 'create' to create a ticket, or 'quit' to exit program"); string task = Console.ReadLine(); if (task.Equals("create")) { long?tickettypeid = 0; bool creating = true; while (creating == true) { Console.WriteLine("Choose type of ticket:"); Console.WriteLine("Ticket form options are:"); Console.WriteLine("1. -- Contact Us"); Console.WriteLine("2. -- Warranty Request"); Console.WriteLine("Enter the number of the ticket form: (1 or 2):"); string tickettype = Console.ReadLine(); if (tickettype.Equals("1")) { tickettypeid = 360000343991; } else if (tickettype.Equals("2")) { tickettypeid = 360000437791; } else { Console.WriteLine("That's not a valid entry"); } Console.WriteLine("Enter the email address for correspondance:"); string email = Console.ReadLine(); Console.WriteLine("Enter the Subject for your ticket:"); string subject = Console.ReadLine(); Console.WriteLine("Enter the Description:"); string description = Console.ReadLine(); foreach (TicketField ticketField in allfields) { if (allfields.IndexOf(ticketField) > 6 && ticketField.Required == true) //testing using ONLY required custom fields { long? fieldid = ticketField.Id; bool required = ticketField.Required; string type = ticketField.Type; string name = ticketField.TitleInPortal; Console.WriteLine("Enter the value for " + name); //commented out these lines, as we're just testing fields that are required /*if (required == true) * { * Console.WriteLine("This Field is required!"); * } * else * { * Console.WriteLine("This fiend is NOT required"); * }*/ if (type.Equals("tagger")) { Console.WriteLine("This field is a Dropdown Field. Input MUST be a dropdown TAG"); Console.WriteLine("Example: 'tecnical_question' for custom field 'Topic'"); } else if (fieldid.Equals(360019766211)) { Console.WriteLine("Already entered email address earlier"); CustomField emailaddress = new CustomField() { Id = fieldid, Value = email }; customfields.Add(emailaddress); continue; } else { Console.WriteLine("This field takes a data type of: " + type); } var entry = Console.ReadLine(); CustomField enteredfield = new CustomField() { Id = fieldid, Value = entry }; customfields.Add(enteredfield); continue; } else { continue; } } //List all the entries to check if values actually got saved and match the correct IDs //commented out as indexes do not currently match /*foreach (CustomField fieldlistitem in customfields) * { * //increase index by 7, since the first 7 fields are Zendesk system fields, and unimportant to testing * int index = customfields.IndexOf(fieldlistitem) + 7; * if (fieldlistitem.Value != null) * { * * Console.WriteLine("Custom Field: " + allfields[index].Title + " Value: " + fieldlistitem.Value.ToString() + " Field ID: " + allfields[index].Id); * } * else * { * Console.WriteLine("Custom Field: " + allfields[index].Title + " VALUE IS NULL FOR THIS ENTRY. Field ID: " + allfields[index].Id); * } * }*/ Console.WriteLine("Testing complete, enter 'q' to quit without uploading, 'upload' to upload ticket, or 'add' to add an attachment"); string quitentry = Console.ReadLine(); if (quitentry.Equals('q')) { break; } else if (quitentry.Equals("upload")) { var ticket = new Ticket() { Subject = subject, TicketFormId = 360000437791, Comment = new Comment() { Body = description, Public = true }, Priority = TicketPriorities.Normal, Requester = new Requester() { Email = email }, CustomFields = customfields }; //create the new ticket var res = api.Tickets.CreateTicket(ticket); Console.WriteLine("Uploaded Ticket. Program quits after 5 second delay"); Thread.Sleep(5000); creating = false; } else if (quitentry.Equals("add")) { var selectimage = new SelectFile(); selectimage.FileSelect(); Console.WriteLine("Selected File Path: " + selectimage.fileSelected); if (!selectimage.fileSelected.Equals(String.Empty)) { Console.WriteLine("Selected Image Path: " + selectimage.fileSelected); var attachment = api.Attachments.UploadAttachment(new ZenFile() { ContentType = "image/png", FileName = selectimage.fileSelected, FileData = File.ReadAllBytes(selectimage.fileSelected) }); var ticket = new Ticket() { Subject = subject, Priority = TicketPriorities.Normal, TicketFormId = tickettypeid, Comment = new Comment() { Body = description, Public = true, Uploads = new List <string>() { attachment.Token } //Add the attachment token here }, Requester = new Requester() { Email = email }, CustomFields = customfields }; var res = api.Tickets.CreateTicket(ticket); Console.WriteLine("Uploaded Ticket. Program quits after 5 second delay"); Thread.Sleep(5000); creating = false; } else { Console.WriteLine("No File Selected!"); } } } } //Search for an existing ticket else if (task.Equals("search")) { bool searching = true; while (searching == true) { Console.WriteLine("Enter the ID to search"); string inputid = Console.ReadLine(); long ticketid = Convert.ToInt64(inputid); IndividualTicketResponse returnedticket = api.Tickets.GetTicket(ticketid); //print ticket fields Console.WriteLine("Ticket Title: " + returnedticket.Ticket.Subject.ToString()); Console.WriteLine("Ticket Description: " + returnedticket.Ticket.Description.ToString()); foreach (CustomField returnedfields in returnedticket.Ticket.CustomFields) { Console.WriteLine("Ticket Custom Field ID: " + returnedfields.Id.ToString()); if (returnedfields.Value == null) { Console.WriteLine("This value is null"); } else { Console.WriteLine("Ticket Custom Field Value: " + returnedfields.Value.ToString()); } } break; } Console.WriteLine("Press 'q' to quit search function"); string entry = Console.ReadLine(); if (entry.Equals('q')) { searching = false; } } else if (task.Equals("quit")) { break; } } }
// [Ignore("")] public void CanCreateAndUpdateRequests() { var req = new Request { Subject = "end user request test", Type = RequestType.incident, Comment = new Comment { Body = "end user test", HtmlBody = "end user test with </br> new line", Public = true }, Requester = new Requester { Name = "Test Name" }, Tags = new List <string> { "tag1", "tag2" } }; var res = _api.Requests.CreateRequest(req); try { Assert.IsNotNull(res); Assert.IsNotNull(res.Request); Assert.IsTrue(res.Request.Id.HasValue); Assert.That(res.Request.Type == RequestType.incident); Assert.True(res.Request.Id.Value > 0); IndividualUserResponse user = _api.Users.GetUser(res.Request.RequesterId.Value); Assert.AreEqual("Test Name", user.User.Name); IndividualTicketResponse ticket = _api.Tickets.GetTicket(res.Request.Id.Value); CollectionAssert.AreEquivalent(new[] { "tag1", "tag2" }, ticket.Ticket.Tags); var res1 = _api.Requests.GetRequestById(res.Request.Id.Value); Assert.AreEqual(res1.Request.Id, res.Request.Id); res1.Request.Subject = "new subject"; res1.Request.Comment = new Comment { Body = "something more to say", Public = true }; var res2 = _api.Requests.UpdateRequest(res1.Request); var res3 = _api.Requests.GetRequestCommentsById(res.Request.Id.Value); Assert.AreEqual(res3.Comments.Last().Body.Replace("\n", ""), "something more to say"); var res4 = _api.Requests.GetSpecificRequestComment(res.Request.Id.Value, res3.Comments.Last().Id.Value); res1.Request.RequesterId = 56766413L; var res5 = _api.Requests.UpdateRequest(res1.Request); var res6 = _api.Requests.GetRequestById(res.Request.Id.Value); Assert.AreEqual(res5.Request.RequesterId, res6.Request.RequesterId); Assert.AreEqual(res4.Comment.Id, res3.Comments.Last().Id); } finally { Assert.True(_api.Tickets.Delete(res.Request.Id.Value)); } }
static void Main() { Console.WriteLine("Connecting to Zendesk"); //set up the API var api = new ZendeskApi("https://greenworkstools1552039260.zendesk.com/api/v2", "*****@*****.**", "713apipassword"); Console.WriteLine("Retrieving List of Fields"); //create an empty list of CustomField types to be populated with Custom Field IDs and Values IList <CustomField> customfields = new List <CustomField>(); IList <TicketField> allfields = new List <TicketField>(); //retrieve ticket fields from Zendesk GroupTicketFieldResponse fields = api.Tickets.GetTicketFields(); //populate field list with fields from Zendesk foreach (TicketField fielddata in fields.TicketFields) { allfields.Add(fielddata); } Console.WriteLine("Fields retrieved succesfully"); //print fields to make sure list of fields was retrieved succesfully /*foreach (TicketField fieldlistdata in allfields) * { * Console.WriteLine("The Ticket Field ID is: " + fieldlistdata.Id); * Console.WriteLine("The Ticket Field Name is: " + fieldlistdata.TitleInPortal); * Console.WriteLine("The Ticket Field Type is : " + fieldlistdata.Type); * Console.WriteLine("This Ticket Field is Required :" + fieldlistdata.Required); * Console.WriteLine("Field List Index of: " + allfields.IndexOf(fieldlistdata)); * }*/ Console.WriteLine("Enter 'search' to search a ticket, or 'create' to create a ticket"); string task = Console.ReadLine(); if (task == "create") { while (true) { Console.WriteLine("Enter the Subject for your ticket:"); string subject = Console.ReadLine(); Console.WriteLine("Enter the Description:"); string description = Console.ReadLine(); foreach (TicketField ticketField in allfields) { if (allfields.IndexOf(ticketField) > 6 && ticketField.Required == true) //testing using ONLY required custom fields { long? fieldid = ticketField.Id; bool required = ticketField.Required; string type = ticketField.Type; string name = ticketField.TitleInPortal; Console.WriteLine("Enter the value for " + name); //commented out these lines, as we're just testing fields that are required /*if (required == true) * { * Console.WriteLine("This Field is required!"); * } * else * { * Console.WriteLine("This fiend is NOT required"); * }*/ if (type == "tagger") { Console.WriteLine("This field is a Dropdown Field. Input MUST be a dropdown TAG"); Console.WriteLine("Example: 'tecnical_question' for custom field 'Topic'"); } else { Console.WriteLine("This field takes a data type of: " + type); } var entry = Console.ReadLine(); CustomField enteredfield = new CustomField() { Id = fieldid, Value = entry }; customfields.Add(enteredfield); continue; } else { continue; } } //List all the entries to check if values actually got saved and match the correct IDs //commented out as indexes do not currently match /*foreach (CustomField fieldlistitem in customfields) * { * //increase index by 7, since the first 7 fields are Zendesk system fields, and unimportant to testing * int index = customfields.IndexOf(fieldlistitem) + 7; * if (fieldlistitem.Value != null) * { * * Console.WriteLine("Custom Field: " + allfields[index].Title + " Value: " + fieldlistitem.Value.ToString() + " Field ID: " + allfields[index].Id); * } * else * { * Console.WriteLine("Custom Field: " + allfields[index].Title + " VALUE IS NULL FOR THIS ENTRY. Field ID: " + allfields[index].Id); * } * }*/ Console.WriteLine("Testing complete, enter 'q' to quit without uploading or 'upload' to upload ticket"); string quitentry = Console.ReadLine(); if (quitentry == "q") { break; } if (quitentry == "upload") { var ticket = new Ticket() { Subject = subject, TicketFormId = 360000437791, Comment = new Comment() { Body = description }, Priority = "Normal", Requester = new Requester() { Email = "*****@*****.**" }, CustomFields = customfields }; //create the new ticket var res = api.Tickets.CreateTicket(ticket).Ticket; Console.WriteLine("Uploaded Ticket. Program quits after 5 second delay"); Thread.Sleep(5000); break; } } //Search for an existing ticket if (task == "search") { while (true) { Console.WriteLine("Enter the ID to search"); string inputid = Console.ReadLine(); long ticketid = Convert.ToInt64(inputid); IndividualTicketResponse returnedticket = api.Tickets.GetTicket(ticketid); //print ticket fields Console.WriteLine("Ticket Title: " + returnedticket.Ticket.Subject.ToString()); Console.WriteLine("Ticket Description: " + returnedticket.Ticket.Description.ToString()); foreach (CustomField returnedfields in returnedticket.Ticket.CustomFields) { Console.WriteLine("Ticket Custom Field ID: " + returnedfields.Id.ToString()); if (returnedfields.Value == null) { Console.WriteLine("This value is null"); } else { Console.WriteLine("Ticket Custom Field Value: " + returnedfields.Value.ToString()); } } Console.WriteLine("Press 'q' to quit"); string entry = Console.ReadLine(); if (entry == "q") { break; } } } } }