Поля Zendesk Custom User/Organization
Итак, у меня возникла проблема в zendesk с двумя возможными решениями, но я не знал, сработает ли одно из них. Наша система построена с настраиваемыми полями, созданными для каждого из наших клиентов и организаций. Сначала я попытался использовать оболочку C#, однако нет способа получить доступ к настраиваемым полям с помощью этих методов, если я не могу найти его.
Так что, если нет способа сделать это через оболочку C#, я пытаюсь сделать это с помощью полного отдыха. Вот этот код.
string url = "https://{mydomain}.zendesk.com/api/v2/user_fields/7.json";
string creds = Convert.ToString(Encoding.UTF8.GetBytes(EMAIL + "/"+ TOKEN));
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Headers.Add("Authorization", "Basic" + creds);
request.Method = "GET";
HttpWebResponse resp = request.GetResponse() as HttpWebResponse;
if (resp.StatusCode == HttpStatusCode.OK)
{
using (Stream respStream = resp.GetResponseStream())
{
StreamReader reader = new StreamReader(respStream, Encoding.UTF8);
string test = reader.ReadToEnd();
}
}
else
{
Console.WriteLine(string.Format("Status Code: {0}, Status Description: {1}", resp.StatusCode, resp.StatusDescription));
}
Прямо сейчас все, что я должен сделать, это получить ответ, который вернет мне имя всех столбцов, однако я продолжаю получать 401 несанкционированный ответ. Любые предложения относительно того, что я делаю не так?
1 ответ
Для обёртки Zendesk C#...
IndividualTicketResponse tr = zapi.Tickets.GetTicket(9);
var customField = tr.Ticket.CustomFields.Where(x => x.Id == 23653058).Single();//.Select(x => x.Id).Single();
customField.Value = "Updated via c# wrapper";
IndividualTicketResponse ticketResponse = zapi.Tickets.UpdateTicket(tr.Ticket);
Я не использую токен, но если не использовать оболочку, это сработало для меня...
string serverURL = "https://myzensubdomain.zendesk.com/api/v2/tickets/9.json";
string userName = "username@domain.com";
string userPassword = "mySecretPassword";
TicketCustomFieldUpdate dataTicket = new TicketCustomFieldUpdate();
CustomField cf = new CustomField();
cf.id = 23653058;
cf.value = "It worked!";
dataTicket.ticket = new Ticket();
dataTicket.ticket.custom_fields = new List<CustomField>();
dataTicket.ticket.custom_fields.Add(cf);
string stJSON = clsJSONHelper.JsonSerializer<TicketCustomFieldUpdate>(dataTicket);
NetworkCredential myCred = new NetworkCredential(userName, userPassword, serverURL);
CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri(serverURL), "Basic", myCred);
HttpWebRequest wreq = (HttpWebRequest)HttpWebRequest.Create(serverURL);
wreq.Credentials = new NetworkCredential(userName, userPassword);
wreq.ContentLength = 0;
wreq.Method = "PUT";
wreq.ContentType = "application/json";
wreq.PreAuthenticate = true;
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] byte1 = encoding.GetBytes(stJSON);
wreq.ContentLength = byte1.Length;
using (Stream strm = wreq.GetRequestStream())
{
strm.Write(byte1, 0, byte1.Length);
}
var wresp = (HttpWebResponse)wreq.GetResponse();
using (var strmr = new StreamReader(wresp.GetResponseStream()))
{
var responseText = strmr.ReadToEnd();
context.Response.Write(responseText);
}