@kiina/node-zendesk
Version:
zendesk API client wrapper
149 lines (115 loc) • 5.85 kB
JavaScript
//tickets.js: Client for the zendesk API.
var util = require('util'),
Client = require('./client').Client;
var Tickets = exports.Tickets = function (options) {
this.jsonAPINames = ['tickets', 'ticket', 'audits'];
this.sideLoadMap = [
{ field: 'assignee_id', name: 'assignee', dataset: 'users'},
{ field: 'requester_id', name: 'requester', dataset: 'users'},
{ field: 'submitter_id', name: 'submitter', dataset: 'users'},
{ field: 'organization_id', name: 'organization', dataset: 'organizations'},
{ field: 'id', name: 'sharing_agreements', dataset: 'sharing_agreements'},
];
Client.call(this, options);
};
// Inherit from Client base object
util.inherits(Tickets, Client);
// ######################################################## Tickets
// ====================================== Listing Tickets
Tickets.prototype.list = function (cb) {
return this.requestAll('GET', ['tickets'], cb);//all
};
Tickets.prototype.listAssigned = function (userID, cb) {
return this.requestAll('GET', ['users', userID, 'tickets', 'assigned'], cb);//all?
};
Tickets.prototype.listByOrganization = function (orgID, cb) {
return this.requestAll('GET', ['organizations', orgID, 'tickets'], cb);//all
};
Tickets.prototype.listByUserRequested = function (userID, cb) {
return this.requestAll('GET', ['users', userID, 'tickets', 'requested'], cb);//all
};
Tickets.prototype.listByUserCCD = function (userID, cb) {
return this.requestAll('GET', ['users', userID, 'tickets', 'ccd'], cb);//all
};
Tickets.prototype.listWithFilter = function (type, value, cb) {
return this.requestAll('GET', ['tickets', {type: value}], cb);
};
Tickets.prototype.listRecent = function (cb) {
return this.requestAll('GET', ['tickets', 'recent'], cb);//all?
};
Tickets.prototype.listCollaborators = function (ticketID, cb) {
return this.requestAll('GET', ['tickets', ticketID, 'collaborators'], cb);//all?
};
Tickets.prototype.listIncidents = function (ticketID, cb) {
return this.requestAll('GET', ['tickets', ticketID, 'incidents'], cb);//all
};
Tickets.prototype.listMetrics = function (ticketID, cb) {
return this.request('GET', ['tickets', ticketID, 'metrics'], cb);//all
};
// ====================================== Viewing Tickets
Tickets.prototype.show = function (ticketID, cb) {
return this.request('GET', ['tickets', ticketID], cb);
};
Tickets.prototype.showMany = function (ticket_ids, cb) {
return this.request('GET', ['tickets', 'show_many', '?ids=' + ticket_ids.toString()], cb);
};
// ====================================== Creating Tickets
Tickets.prototype.create = function (ticket, cb) {
return this.request('POST', ['tickets'], ticket, cb);
};
Tickets.prototype.createMany = function (tickets, cb) {
return this.request('POST', ['tickets', 'create_many'], tickets, cb);
};
// ====================================== Updating Tickets
Tickets.prototype.update = function (ticketID, ticket, cb) {
return this.request('PUT', ['tickets', ticketID], ticket, cb);
};
Tickets.prototype.updateMany = function (ticket_ids, ticket, cb) {
return this.request('PUT', ['tickets', 'update_many', '?ids=' + ticket_ids.toString()], ticket, cb);
};
// ====================================== Deleting Tickets
Tickets.prototype.delete = function (ticketID, cb) {
return this.request('DELETE', ['tickets', ticketID], cb);
};
Tickets.prototype.deleteMany = function (ticket_ids, cb) {
return this.request('DELETE', ['tickets', 'destroy_many', '?ids=' + ticket_ids.toString()], cb);
};
// ====================================== Merging tickets
Tickets.prototype.merge = function (ticketID, mergedTicket, cb) {
return this.request('POST', ['tickets', ticketID, 'merge'], mergedTicket, cb);
};
// ######################################################## Ticket export (max 1000 tickets per request in 5 min intrvals)
// ====================================== Ticket Export
Tickets.prototype.export = function (startTime, cb) {
return this.request('GET', ['exports', 'tickets', {start_time: startTime}], cb);
};
// ====================================== Ticket Export Sample (max 50 tickets per request)
Tickets.prototype.exportSample = function (startTime, options) {
return this.request('GET', ['exports', 'tickets', 'sample', {start_time: startTime}], cb);
};
// ====================================== New Incremental Ticket Export
Tickets.prototype.incremental = function (startTime, cb) {
return this.request('GET', ['incremental', 'tickets', {start_time: startTime}], cb);
};
// ====================================== New Incremental Ticket Export with include
Tickets.prototype.incrementalInclude = function (startTime, include, cb) {
return this.request('GET', ['incremental', 'tickets', {start_time: startTime, include: include}], cb);
};
// ====================================== New Incremental Ticket Export Sample
Tickets.prototype.incrementalSample = function (startTime, cb) {
return this.request('GET', ['incremental', 'tickets', 'sample', {start_time: startTime}], cb);
};
// ====================================== Listing Ticket Comments
Tickets.prototype.getComments = function (ticketID, cb) {
return this.requestAll('GET', ['tickets', ticketID, 'comments'], cb);
};
// ######################################################## Ticket Audits
// ====================================== Listing Audits
Tickets.prototype.exportAudit = function (ticketID, cb) {
return this.requestAll('GET', ['tickets', ticketID, 'audits'], cb);
};
// ######################################################## Ticket Tags
// ====================================== Add Tags to Ticket
Tickets.prototype.addTags = function (ticketID, tags, cb) {
return this.requestAll('PUT', ['tickets', ticketID, 'tags'], tags, cb);
};