Итак, у меня большие проблемы с созданием приложения, которое работает с Zendesk. По сути, мне нужно найти все билеты в базе данных и подсчитать их количество для каждого конечного пользователя. Конечный пользователь — это текстовое поле в каждом билете.
Итак, вот где я:
«/api/v2/tickets.json» — это список всех билетов в формате JSON — он помещается в переменную «tickets», которую я использую после — я думал, что «tickets» будет массивом, но теперь я этого не делаю. не думаю, что это так, так как же можно пройти через это?
СЕЙЧАС - как я могу получить доступ к значениям в этом файле билетов? Например, как я могу получить доступ к значению «Конечный пользователь» с помощью JavaScript?
Я просмотрел документацию Zendesk по их API и не могу найти ничего полезного для того, чтобы заставить его работать, а их форумы несколько мертвы. Надеюсь, вы, ребята, сможете мне помочь, так как я новичок в JavaScript.
Хорошо, вот пример записи JSON:
{"tickets":[{"url":"https://company.zendesk.com/api/v2/tickets/1.json","id":1,"external_id":null,"via":{"channel":"web","source":{"from":{},"to":{},"rel":null}},"created_at":"2012-10-01T16:06:33Z","updated_at":"2012-10-05T19:21:55Z","type":"incident","subject":"This is a sample ticket requested and submitted by you","description":"This is the first comment. Feel free to delete this sample ticket.","priority":"high","status":"closed","recipient":null,"requester_id":270249903,"submitter_id":270249903,"assignee_id":270249903,"organization_id":22242373,"group_id":20363013,"collaborator_ids":[],"forum_topic_id":null,"problem_id":null,"has_incidents":false,"due_at":null,"tags":["sample","zendesk"],"fields":[{"id":21717236,"value":"10/4/2012"}],"custom_fields":[{"id":21717236,"value":"10/4/2012"}],"satisfaction_rating":null},{"url":"https://company.zendesk.com/api/v2/tickets/2.json","id":2,"external_id":null,"via":{"channel":"email","source":{"from":{"address":"[email protected]","name":"Zendesk"},"to":{"address":"[email protected]","name":"Binary Stream Helpdesk"},"rel":null}},"created_at":"2012-10-01T16:33:58Z","updated_at":"2012-10-05T17:09:37Z","type":null,"subject":"Tudor Hofnar, here is the test ticket you requested","description":" Hello! This is a Zendesk ticket. We are going to go through the basic support ticket operation in Zendesk.\n\n If you are in your email reading this, please click on the link in the header that starts with Ticket #.\n\n If you are in your Zendesk reading this, you will see the ticket number, the customer who sent this ticket in, and drop down menus that allow you to set things like status and priority. You'll also notice a blank text box below this comment. That is for you to respond. Let's do that:\n\n 1. Write: \"Thanks for this information, please tell me more.\"\n 2. Change the drop-down field labeled Status to \"Pending\"\n\n If you follow these instructions, you'll get an email response back from us shortly. You can also always see ticket updates by going back into your unsolved ticket view (click view in the top menu bar).\n","priority":null,"status":"closed","recipient":null,"requester_id":270263553,"submitter_id":270263553,"assignee_id":270249903,"organization_id":null,"group_id":20363013,"collaborator_ids":[],"forum_topic_id":null,"problem_id":null,"has_incidents":false,"due_at":null,"tags":[],"fields":[{"id":21717236,"value":"10/4/2012"}],"custom_fields":[{"id":21717236,"value":"10/4/2012"}],"satisfaction_rating":null},{"url":"https://company.zendesk.com/api/v2/tickets/3.json","id":3,"external_id":null,"via":{"channel":"email","source":{"from":{"address":"[email protected]","name":"Tudor Hofnar"},"to":{"address":"[email protected]","name":"Binary Stream Helpdesk"},"rel":null}},"created_at":"2012-10-01T17:08:37Z","updated_at":"2012-10-05T18:15:01Z","type":null,"subject":"test","description":"test\n\nTudor Hofnar","priority":null,"status":"closed","recipient":"[email protected]","requester_id":270249903,"submitter_id":270249903,"assignee_id":270249903,"organization_id":22242373,"group_id":20363013,"collaborator_ids":[],"forum_topic_id":null,"problem_id":null,"has_incidents":false,"due_at":null,"tags":[],"fields":[{"id":21717236,"value":"10/4/2012"}],"custom_fields":[{"id":21717236,"value":"10/4/2012"}],"satisfaction_rating":null},{"url":"https://company.zendesk.com/api/v2/tickets/5.json","id":5,"external_id":null,"via":{"channel":"web","source":{"from":{},"to":{},"rel":null}},"created_at":"2012-10-01T20:26:34Z","updated_at":"2012-10-06T22:39:09Z","type":"incident","subject":"Window for adding account not opening","description":"The add account window is not opening and it is causing a lot of trouble for our team etc....","priority":"normal","status":"closed","recipient":null,"requester_id":271853958,"submitter_id":271853958,"assignee_id":270249903,"organization_id":22284363,"group_id":20363013,"collaborator_ids":[],"forum_topic_id":null,"problem_id":null,"has_incidents":false,"due_at":null,"tags":["2(function() {
return {
// Here we define AJAX calls
requests: {
fetchTickets: function() {
return {
url: '/api/v2/tickets.json',
type: 'GET'
};
}
},
// Here we define events such as a user clicking on something
events: {
'app.activated': 'requestTickets',
'fetchTickets.always': function(data) {
this.countEndUserTickets((data || {}).tickets);
}
},
// Below this point, you're free to define your own functions used by the app
requestTickets: function() {
this.ajax('fetchTickets');
},
countEndUserTickets: function(tickets) {
var endUser = this.ticket().customField("End-User"); //this will get the end-user of the current ticket that is open in Zendesk
var ticketCounter = 0;
//this is where I have no idea how to access the 'tickets' array or whatever it is
for (var i = 0; i <= tickets.length; i++) {
if (tickets[i].customField("End-User") == endUser){
ticketCounter = ticketCounter + 1;
}
}
alert(endUser);
this.switchTo('list', {
ticketCounter: this.ticketCounter
});
}
};
}());
2","4","ared","end_user_1","var_2"],"fields":[{"id":21704983,"value":"1"},{"id":21708732,"value":"tried this"},{"id":21708742,"value":"1"},{"id":21713331,"value":"10/2/2012"},{"id":21717086,"value":"ared"},{"id":21717236,"value":"10/4/2012"},{"id":21717357,"value":"2(function() {
return {
// Here we define AJAX calls
requests: {
fetchTickets: function() {
return {
url: '/api/v2/tickets.json',
type: 'GET'
};
}
},
// Here we define events such as a user clicking on something
events: {
'app.activated': 'requestTickets',
'fetchTickets.always': function(data) {
this.countEndUserTickets((data || {}).tickets);
}
},
// Below this point, you're free to define your own functions used by the app
requestTickets: function() {
this.ajax('fetchTickets');
},
countEndUserTickets: function(tickets) {
var endUser = this.ticket().customField("End-User"); //this will get the end-user of the current ticket that is open in Zendesk
var ticketCounter = 0;
//this is where I have no idea how to access the 'tickets' array or whatever it is
for (var i = 0; i <= tickets.length; i++) {
if (tickets[i].customField("End-User") == endUser){
ticketCounter = ticketCounter + 1;
}
}
alert(endUser);
this.switchTo('list', {
ticketCounter: this.ticketCounter
});
}
};
}());
2"}],"custom_fields":[{"id":21704983,"value":"1"},{"id":21708732,"value":"tried this"},{"id":21708742,"value":"1"},{"id":21713331,"value":"10/2/2012"},{"id":21717086,"value":"ared"},{"id":21717236,"value":"10/4/2012"},{"id":21717357,"value":"2(function() {
return {
// Here we define AJAX calls
requests: {
fetchTickets: function() {
return {
url: '/api/v2/tickets.json',
type: 'GET'
};
}
},
// Here we define events such as a user clicking on something
events: {
'app.activated': 'requestTickets',
'fetchTickets.always': function(data) {
this.countEndUserTickets((data || {}).tickets);
}
},
// Below this point, you're free to define your own functions used by the app
requestTickets: function() {
this.ajax('fetchTickets');
},
countEndUserTickets: function(tickets) {
var endUser = this.ticket().customField("End-User"); //this will get the end-user of the current ticket that is open in Zendesk
var ticketCounter = 0;
//this is where I have no idea how to access the 'tickets' array or whatever it is
for (var i = 0; i <= tickets.length; i++) {
if (tickets[i].customField("End-User") == endUser){
ticketCounter = ticketCounter + 1;
}
}
alert(endUser);
this.switchTo('list', {
ticketCounter: this.ticketCounter
});
}
};
}());
2"}],"satisfaction_rating":null},{"url":"https://company.zendesk.com/api/v2/tickets/6.json","id":6,"external_id":null,"via":{"channel":"web","source":{"from":{},"to":{},"rel":null}},"created_at":"2012-10-02T21:14:59Z","updated_at":"2012-10-09T18:22:04Z","type":"incident","subject":"Test Ticket","description":"this is a test ticket","priority":"normal","status":"closed","recipient":null,"requester_id":271853958,"submitter_id":271853958,"assignee_id":270249903,"organization_id":22284363,"group_id":20363013,"collaborator_ids":[],"forum_topic_id":null,"problem_id":null,"has_incidents":false,"due_at":null,"tags":["2(function() {
return {
// Here we define AJAX calls
requests: {
fetchTickets: function() {
return {
url: '/api/v2/tickets.json',
type: 'GET'
};
}
},
// Here we define events such as a user clicking on something
events: {
'app.activated': 'requestTickets',
'fetchTickets.always': function(data) {
this.countEndUserTickets((data || {}).tickets);
}
},
// Below this point, you're free to define your own functions used by the app
requestTickets: function() {
this.ajax('fetchTickets');
},
countEndUserTickets: function(tickets) {
var endUser = this.ticket().customField("End-User"); //this will get the end-user of the current ticket that is open in Zendesk
var ticketCounter = 0;
//this is where I have no idea how to access the 'tickets' array or whatever it is
for (var i = 0; i <= tickets.length; i++) {
if (tickets[i].customField("End-User") == endUser){
ticketCounter = ticketCounter + 1;
}
}
alert(endUser);
this.switchTo('list', {
ticketCounter: this.ticketCounter
});
}
};
}());
2","arcb","end_user_1","var_2"],"fields":[{"id":21704983,"value":"1"},{"id":21708732,"value":"tried this"},{"id":21708742,"value":"1"},{"id":21713331,"value":"10/2/2012"},{"id":21717086,"value":"arcb"},{"id":21717236,"value":"10/2/2012"},{"id":21717357,"value":""},{"id":21728942,"value":null},{"id":21732321,"value":"Test End-User"}],"custom_fields":[{"id":21704983,"value":"1"},{"id":21708732,"value":"tried this"},{"id":21708742,"value":"1"},{"id":21713331,"value":"10/2/2012"},{"id":21717086,"value":"arcb"},{"id":21717236,"value":"10/2/2012"},{"id":21717357,"value":""},{"id":21728942,"value":null},{"id":21732321,"value":"Test End-User"}],"satisfaction_rating":null},{"url":"https://company.zendesk.com/api/v2/tickets/7.json","id":7,"external_id":null,"via":{"channel":"web","source":{"from":{},"to":{},"rel":null}},"created_at":"2012-10-09T20:09:50Z","updated_at":"2012-10-11T18:19:42Z","type":"question","subject":"Testing bookmarks","description":"this is a bookmark test\n","priority":"normal","status":"open","recipient":null,"requester_id":270249903,"submitter_id":270249903,"assignee_id":270249903,"organization_id":22242373,"group_id":20363013,"collaborator_ids":[],"forum_topic_id":null,"problem_id":null,"has_incidents":false,"due_at":null,"tags":["2010","psm"],"fields":[{"id":21704983,"value":"0"},{"id":21708732,"value":null},{"id":21708742,"value":"1"},{"id":21713331,"value":"10/9/2012"},{"id":21717086,"value":"psm"},{"id":21717236,"value":"10/31/2012"},{"id":21717357,"value":"2010"},{"id":21728942,"value":"Var 1"},{"id":21732321,"value":"End User 2"}],"custom_fields":[{"id":21704983,"value":"0"},{"id":21708732,"value":null},{"id":21708742,"value":"1"},{"id":21713331,"value":"10/9/2012"},{"id":21717086,"value":"psm"},{"id":21717236,"value":"10/31/2012"},{"id":21717357,"value":"2010"},{"id":21728942,"value":"Var 1"},{"id":21732321,"value":"End User 2"}],"satisfaction_rating":null}],"next_page":null,"previous_page":null,"count":6}
не знаю, как форматировать этот код...
Теперь это мой код JS, я знаю, что это неправильно, что я пытаюсь сделать с «тикетами», но я понятия не имею, как получить к нему доступ...
(function() {
return {
// Here we define AJAX calls
requests: {
fetchTickets: function() {
return {
url: '/api/v2/tickets.json',
type: 'GET'
};
}
},
// Here we define events such as a user clicking on something
events: {
'app.activated': 'requestTickets',
'fetchTickets.always': function(data) {
this.countEndUserTickets((data || {}).tickets);
}
},
// Below this point, you're free to define your own functions used by the app
requestTickets: function() {
this.ajax('fetchTickets');
},
countEndUserTickets: function(tickets) {
var endUser = this.ticket().customField("End-User"); //this will get the end-user of the current ticket that is open in Zendesk
var ticketCounter = 0;
//this is where I have no idea how to access the 'tickets' array or whatever it is
for (var i = 0; i <= tickets.length; i++) {
if (tickets[i].customField("End-User") == endUser){
ticketCounter = ticketCounter + 1;
}
}
alert(endUser);
this.switchTo('list', {
ticketCounter: this.ticketCounter
});
}
};
}());