Beispiel #1
0
        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));
            }
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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;
                }
            }
        }
Beispiel #4
0
        // [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));
            }
        }
Beispiel #5
0
        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;
                        }
                    }
                }
            }
        }