gitlab_support_readiness 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/support_readiness/client.rb +108 -0
- data/lib/support_readiness/gitlab/client.rb +64 -0
- data/lib/support_readiness/gitlab/configuration.rb +46 -0
- data/lib/support_readiness/gitlab/groups.rb +180 -0
- data/lib/support_readiness/gitlab/issues.rb +410 -0
- data/lib/support_readiness/gitlab/namespaces.rb +190 -0
- data/lib/support_readiness/gitlab/projects.rb +510 -0
- data/lib/support_readiness/gitlab/repositories.rb +267 -0
- data/lib/support_readiness/gitlab/users.rb +488 -0
- data/lib/support_readiness/gitlab.rb +19 -0
- data/lib/support_readiness/pagerduty/client.rb +66 -0
- data/lib/support_readiness/pagerduty/configuration.rb +43 -0
- data/lib/support_readiness/pagerduty/escalation_policies.rb +123 -0
- data/lib/support_readiness/pagerduty/schedules.rb +223 -0
- data/lib/support_readiness/pagerduty/services.rb +132 -0
- data/lib/support_readiness/pagerduty.rb +16 -0
- data/lib/support_readiness/redis.rb +90 -0
- data/lib/support_readiness/zendesk/articles.rb +210 -0
- data/lib/support_readiness/zendesk/automations.rb +304 -0
- data/lib/support_readiness/zendesk/client.rb +84 -0
- data/lib/support_readiness/zendesk/configuration.rb +49 -0
- data/lib/support_readiness/zendesk/group_memberships.rb +256 -0
- data/lib/support_readiness/zendesk/groups.rb +249 -0
- data/lib/support_readiness/zendesk/job_statuses.rb +188 -0
- data/lib/support_readiness/zendesk/macros.rb +267 -0
- data/lib/support_readiness/zendesk/organization_fields.rb +233 -0
- data/lib/support_readiness/zendesk/organization_memberships.rb +257 -0
- data/lib/support_readiness/zendesk/organizations.rb +515 -0
- data/lib/support_readiness/zendesk/roles.rb +194 -0
- data/lib/support_readiness/zendesk/search.rb +159 -0
- data/lib/support_readiness/zendesk/sla_policies.rb +232 -0
- data/lib/support_readiness/zendesk/ticket_fields.rb +222 -0
- data/lib/support_readiness/zendesk/ticket_forms.rb +290 -0
- data/lib/support_readiness/zendesk/tickets.rb +854 -0
- data/lib/support_readiness/zendesk/triggers.rb +269 -0
- data/lib/support_readiness/zendesk/users.rb +946 -0
- data/lib/support_readiness/zendesk/views.rb +469 -0
- data/lib/support_readiness/zendesk.rb +31 -0
- data/lib/support_readiness.rb +29 -0
- metadata +215 -0
@@ -0,0 +1,854 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Defines the module Readiness.
|
4
|
+
module Readiness
|
5
|
+
# Defines the module Zendesk
|
6
|
+
module Zendesk
|
7
|
+
##
|
8
|
+
# Defines the class Tickets within the module {Readiness::Zendesk}.
|
9
|
+
#
|
10
|
+
# @author Jason Colyer
|
11
|
+
# @since 1.0.0
|
12
|
+
class Tickets < Readiness::Client
|
13
|
+
attr_accessor :assignee_id, :additional_tags, :brand_id, :collaborator_ids, :comment, :custom_fields, :custom_status_id, :description, :due_at, :email_cc_ids, :fields, :follower_ids, :followup_ids, :group_id, :has_incidents, :id, :is_public, :organization_id, :priority, :problem_id, :remove_tags, :requester_id, :satisfaction_rating, :status, :subject, :submitter_id, :tags, :ticket_form_id, :type, :via, :via_followup_source_id
|
14
|
+
|
15
|
+
##
|
16
|
+
# Creates a new {Readiness::Zendesk::Tickets} instance
|
17
|
+
#
|
18
|
+
# @author Jason Colyer
|
19
|
+
# @since 1.0.0
|
20
|
+
# @param object [Object] An instance of {Readiness::Zendesk::Tickets}
|
21
|
+
# @example
|
22
|
+
# require 'support_readiness'
|
23
|
+
# Readiness::Zendesk::Tickets.new
|
24
|
+
def initialize(object = {})
|
25
|
+
@assignee_id = object['assignee_id']
|
26
|
+
@additional_tags = object['additional_tags']
|
27
|
+
@brand_id = object['brand_id']
|
28
|
+
@collaborator_ids = object['collaborator_ids']
|
29
|
+
@comment = object['comment']
|
30
|
+
@custom_fields = object['custom_fields']
|
31
|
+
@custom_status_id = object['custom_status_id']
|
32
|
+
@description = object['description']
|
33
|
+
@due_at = object['due_at']
|
34
|
+
@email_cc_ids = object['email_cc_ids']
|
35
|
+
@fields = object['fields']
|
36
|
+
@follower_ids = object['follower_ids']
|
37
|
+
@followup_ids = object['followup_ids']
|
38
|
+
@group_id = object['group_id']
|
39
|
+
@has_incidents = object['has_incidents']
|
40
|
+
@id = object['id']
|
41
|
+
@is_public = object['is_public']
|
42
|
+
@organization_id = object['organization_id']
|
43
|
+
@priority = object['priority']
|
44
|
+
@problem_id = object['problem_id']
|
45
|
+
@remove_tags = object['remove_tags']
|
46
|
+
@requester_id = object['request_id']
|
47
|
+
@satisfaction_rating = object['satisfaction_rating']
|
48
|
+
@status = object['status']
|
49
|
+
@subject = object['subject']
|
50
|
+
@submitter_id = object['submitter_id']
|
51
|
+
@tags = object['tags']
|
52
|
+
@ticket_form_id = object['ticket_form_id']
|
53
|
+
@type = object['type']
|
54
|
+
@via = object['via']
|
55
|
+
@via_followup_source_id = object['via_followup_source_id']
|
56
|
+
end
|
57
|
+
|
58
|
+
##
|
59
|
+
# Lists the collaborators on a ticket
|
60
|
+
#
|
61
|
+
# @author Jason Colyer
|
62
|
+
# @since 1.0.0
|
63
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
64
|
+
# @param ticket [Object] An instance of {Readiness::Zendesk::Tickets}
|
65
|
+
# @return [Array]
|
66
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#list-collaborators-for-a-ticket Zendesk API > Tickets > List Collaborators for a Ticket
|
67
|
+
# @example
|
68
|
+
# require 'support_readiness'
|
69
|
+
# config = Readiness::Zendesk::Configuration.new
|
70
|
+
# config.username = 'alice@example.com'
|
71
|
+
# config.token = 'test123abc'
|
72
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
73
|
+
# client = Readiness::Zendesk::Client.new(config)
|
74
|
+
# ticket = Readiness::Zendesk::Tickets.find!(client, 123456)
|
75
|
+
# users = Readiness::Zendesk::Tickets.collaborators(client, ticket)
|
76
|
+
# pp users.first.name
|
77
|
+
# # => "Johnny Agent"
|
78
|
+
def self.collaborators(client, ticket)
|
79
|
+
response = client.connection.get("tickets/#{ticket.id}/collaborators")
|
80
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
81
|
+
Oj.load(response.body)['users']
|
82
|
+
end
|
83
|
+
|
84
|
+
##
|
85
|
+
# Lists the followers on a ticket
|
86
|
+
#
|
87
|
+
# @author Jason Colyer
|
88
|
+
# @since 1.0.0
|
89
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
90
|
+
# @param ticket [Object] An instance of {Readiness::Zendesk::Tickets}
|
91
|
+
# @return [Array]
|
92
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#list-followers-for-a-ticket Zendesk API > Tickets > List Followers for a Ticket
|
93
|
+
# @example
|
94
|
+
# require 'support_readiness'
|
95
|
+
# config = Readiness::Zendesk::Configuration.new
|
96
|
+
# config.username = 'alice@example.com'
|
97
|
+
# config.token = 'test123abc'
|
98
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
99
|
+
# client = Readiness::Zendesk::Client.new(config)
|
100
|
+
# ticket = Readiness::Zendesk::Tickets.find!(client, 123456)
|
101
|
+
# users = Readiness::Zendesk::Tickets.followers(client, ticket)
|
102
|
+
# pp users.last.name
|
103
|
+
# # => "Peter Admin"
|
104
|
+
def self.followers(client, ticket)
|
105
|
+
response = client.connection.get("tickets/#{ticket.id}/followers")
|
106
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
107
|
+
Oj.load(response.body)['users']
|
108
|
+
end
|
109
|
+
|
110
|
+
##
|
111
|
+
# Lists the CCs on a ticket
|
112
|
+
#
|
113
|
+
# @author Jason Colyer
|
114
|
+
# @since 1.0.0
|
115
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
116
|
+
# @param ticket [Object] An instance of {Readiness::Zendesk::Tickets}
|
117
|
+
# @return [Array]
|
118
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#list-email-ccs-for-a-ticket Zendesk API > Tickets > List Email CCs for a Ticket
|
119
|
+
# @example
|
120
|
+
# require 'support_readiness'
|
121
|
+
# config = Readiness::Zendesk::Configuration.new
|
122
|
+
# config.username = 'alice@example.com'
|
123
|
+
# config.token = 'test123abc'
|
124
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
125
|
+
# client = Readiness::Zendesk::Client.new(config)
|
126
|
+
# ticket = Readiness::Zendesk::Tickets.find!(client, 123456)
|
127
|
+
# users = Readiness::Zendesk::Tickets.ccs(client, ticket)
|
128
|
+
# pp users.last.name
|
129
|
+
# # => "Jane End User"
|
130
|
+
def self.ccs(client, ticket)
|
131
|
+
response = client.connection.get("tickets/#{ticket.id}/email_ccs")
|
132
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
133
|
+
Oj.load(response.body)['users']
|
134
|
+
end
|
135
|
+
|
136
|
+
##
|
137
|
+
# Deletes multiple tickets via a batch job
|
138
|
+
#
|
139
|
+
# @author Jason Colyer
|
140
|
+
# @since 1.0.0
|
141
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
142
|
+
# @param tids [Array] An array of ticket IDs
|
143
|
+
# @return [object] A {Readiness::Zendesk::JobStatuses} instance
|
144
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#bulk-delete-tickets Zendesk API > Tickets > Bulk Delete Tickets
|
145
|
+
# @example
|
146
|
+
# require 'support_readiness'
|
147
|
+
# config = Readiness::Zendesk::Configuration.new
|
148
|
+
# config.username = 'alice@example.com'
|
149
|
+
# config.token = 'test123abc'
|
150
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
151
|
+
# client = Readiness::Zendesk::Client.new(config)
|
152
|
+
# delete = Readiness::Zendesk::Tickets.delete_many!(client, [35436, 35437])
|
153
|
+
# pp delete.id
|
154
|
+
# # => "82de0b044094f0c67893ac9fe64f1a99"
|
155
|
+
def self.delete_many!(client, tids)
|
156
|
+
response = client.connection.delete("tickets/destroy_many?ids=#{tids.join(',')}")
|
157
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Delete many tickets', message: Oj.load(response.body)}) unless response.status == 200
|
158
|
+
JobStatuses.new(Oj.load(response.body)['job_status'])
|
159
|
+
end
|
160
|
+
|
161
|
+
##
|
162
|
+
# Updates multiple tickets via a batch job
|
163
|
+
#
|
164
|
+
# @author Jason Colyer
|
165
|
+
# @since 1.0.0
|
166
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
167
|
+
# @param tickets [Array] An array of {Readiness::Zendesk::Tickets} instances
|
168
|
+
# @return [object] A {Readiness::Zendesk::JobStatuses} instance
|
169
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#update-many-tickets Zendesk API > Tickets > Update Many Tickets
|
170
|
+
# @example
|
171
|
+
# require 'support_readiness'
|
172
|
+
# config = Readiness::Zendesk::Configuration.new
|
173
|
+
# config.username = 'alice@example.com'
|
174
|
+
# config.token = 'test123abc'
|
175
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
176
|
+
# client = Readiness::Zendesk::Client.new(config)
|
177
|
+
# ticket1 = Readiness::Zendesk::Tickets.find!(client, 1)
|
178
|
+
# ticket1.status = 'solved'
|
179
|
+
# ticket2 = Readiness::Zendesk::Tickets.find!(client, 2)
|
180
|
+
# ticket2.status = 'pending'
|
181
|
+
# tickets = [ticket1, ticket2]
|
182
|
+
# updates = Readiness::Zendesk::Tickets.update_many!(client, tickets)
|
183
|
+
# pp updates.id
|
184
|
+
# # => "82de0b044094f0c67893ac9fe64f1a99"
|
185
|
+
def self.update_many!(client, tickets)
|
186
|
+
data = { tickets: tickets.map { |t| to_hash(t).compact } }.to_json
|
187
|
+
response = client.connection.put('tickets/update_many', data)
|
188
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Update many tickets', message: Oj.load(response.body)}) unless response.status == 200
|
189
|
+
JobStatuses.new(Oj.load(response.body)['job_status'])
|
190
|
+
end
|
191
|
+
|
192
|
+
##
|
193
|
+
# Creates multiple tickets via a batch job
|
194
|
+
#
|
195
|
+
# @author Jason Colyer
|
196
|
+
# @since 1.0.0
|
197
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
198
|
+
# @param tickets [Array] An array of {Readiness::Zendesk::Tickets} instances
|
199
|
+
# @return [object] A {Readiness::Zendesk::JobStatuses} instance
|
200
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#create-many-tickets Zendesk API > Tickets > Create Many Tickets
|
201
|
+
# @example
|
202
|
+
# require 'support_readiness'
|
203
|
+
# config = Readiness::Zendesk::Configuration.new
|
204
|
+
# config.username = 'alice@example.com'
|
205
|
+
# config.token = 'test123abc'
|
206
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
207
|
+
# client = Readiness::Zendesk::Client.new(config)
|
208
|
+
# ticket1 = Readiness::Zendesk::Tickets.new
|
209
|
+
# ticket1.comment = { body: 'The smoke is very colorful'}
|
210
|
+
# ticket1.priority = 'urgent'
|
211
|
+
# ticket1.subject = 'My printer is on fire!'
|
212
|
+
# ticket2 = Readiness::Zendesk::Tickets.new
|
213
|
+
# ticket2.comment = { body: 'This is a comment'}
|
214
|
+
# ticket2.priority = 'normal'
|
215
|
+
# ticket2.subject = 'Help'
|
216
|
+
# tickets = [ticket1, ticket2]
|
217
|
+
# creates = Readiness::Zendesk::Tickets.create_many!(client, tickets)
|
218
|
+
# pp creates.id
|
219
|
+
# # => "82de0b044094f0c67893ac9fe64f1a99"
|
220
|
+
def self.create_many!(client, tickets)
|
221
|
+
data = { tickets: tickets.map { |t| to_hash(t).compact } }.to_json
|
222
|
+
response = client.connection.post('tickets/create_many', data)
|
223
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Create many tickets', message: Oj.load(response.body)}) unless response.status == 200
|
224
|
+
JobStatuses.new(Oj.load(response.body)['job_status'])
|
225
|
+
end
|
226
|
+
|
227
|
+
##
|
228
|
+
# Lists the comments on a ticket
|
229
|
+
#
|
230
|
+
# @author Jason Colyer
|
231
|
+
# @since 1.0.0
|
232
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
233
|
+
# @param sort [String] What sorting method to use
|
234
|
+
# - created_at => Sort by created_at ASC
|
235
|
+
# - -created_at => Sort by created_at DESC
|
236
|
+
# @return [Array]
|
237
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_comments/#list-comments Zendesk API > Ticket comments > List Comments
|
238
|
+
# @example
|
239
|
+
# require 'support_readiness'
|
240
|
+
# config = Readiness::Zendesk::Configuration.new
|
241
|
+
# config.username = 'alice@example.com'
|
242
|
+
# config.token = 'test123abc'
|
243
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
244
|
+
# client = Readiness::Zendesk::Client.new(config)
|
245
|
+
# ticket = Readiness::Zendesk::Tickets.find!(client, 123456)
|
246
|
+
# comments = Readiness::Zendesk::Tickets.find!(client, ticket)
|
247
|
+
# pp creates.select { |c| c['public'] == false }.count
|
248
|
+
# # => 12
|
249
|
+
def self.comments(client, ticket, sort = 'created_at')
|
250
|
+
array = []
|
251
|
+
opts = "page[size]=100&sort=#{sort}"
|
252
|
+
loop do
|
253
|
+
response = client.connection.get("tickets/#{ticket.id}/comments?#{opts}")
|
254
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
255
|
+
body = Oj.load(response.body)
|
256
|
+
array += body['comments']
|
257
|
+
break unless body['meta']['has_more']
|
258
|
+
|
259
|
+
opts = body['links'] ['next'].split('?').last
|
260
|
+
end
|
261
|
+
array
|
262
|
+
end
|
263
|
+
|
264
|
+
##
|
265
|
+
# Creates a ticket. Will exit if unsuccessful
|
266
|
+
#
|
267
|
+
# @author Jason Colyer
|
268
|
+
# @since 1.0.0
|
269
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
270
|
+
# @param ticket [Object] An instance of {Readiness::Zendesk::Tickets}
|
271
|
+
# @return [Object] An instance of {Readiness::Zendesk::Tickets}
|
272
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#create-ticket Zendesk API > Tickets > Create Ticket
|
273
|
+
# @example
|
274
|
+
# require 'support_readiness'
|
275
|
+
# config = Readiness::Zendesk::Configuration.new
|
276
|
+
# config.username = 'alice@example.com'
|
277
|
+
# config.token = 'test123abc'
|
278
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
279
|
+
# client = Readiness::Zendesk::Client.new(config)
|
280
|
+
# ticket = Readiness::Zendesk::Tickets.new
|
281
|
+
# ticket.comment = { body: 'The smoke is very colorful'}
|
282
|
+
# ticket.priority = 'urgent'
|
283
|
+
# ticket.subject = 'My printer is on fire!'
|
284
|
+
# create = Readiness::Zendesk::Tickets.create!(client, ticket)
|
285
|
+
# pp create.id
|
286
|
+
# # => 35436
|
287
|
+
def self.create!(client, ticket)
|
288
|
+
response = client.connection.post 'tickets', to_clean_json_with_key(ticket, 'ticket')
|
289
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Create ticket', message: Oj.load(response.body)}) unless response.status == 201
|
290
|
+
Tickets.new(Oj.load(response.body)['ticket'])
|
291
|
+
end
|
292
|
+
|
293
|
+
##
|
294
|
+
# Updates a ticket. Will exit if unsuccessful
|
295
|
+
#
|
296
|
+
# @author Jason Colyer
|
297
|
+
# @since 1.0.0
|
298
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
299
|
+
# @param ticket [Object] An instance of {Readiness::Zendesk::Tickets}
|
300
|
+
# @return [Object] An instance of {Readiness::Zendesk::Tickets}
|
301
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#update-ticket Zendesk API > Tickets > Update Ticket
|
302
|
+
# @example
|
303
|
+
# require 'support_readiness'
|
304
|
+
# config = Readiness::Zendesk::Configuration.new
|
305
|
+
# config.username = 'alice@example.com'
|
306
|
+
# config.token = 'test123abc'
|
307
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
308
|
+
# client = Readiness::Zendesk::Client.new(config)
|
309
|
+
# ticket = Readiness::Zendesk::Tickets.find!(client, 35436)
|
310
|
+
# ticket.status = 'open'
|
311
|
+
# ticket.custom_status_id = 123
|
312
|
+
# ticket.comment = { body: '"The smoke is very colorful', author_id: 494820284 }
|
313
|
+
# update = Readiness::Zendesk::Tickets.update!(client, ticket)
|
314
|
+
# pp update.status
|
315
|
+
# # => "open"
|
316
|
+
def self.update!(client, ticket)
|
317
|
+
response = client.connection.put "tickets/#{ticket.id}", to_clean_json_with_key(ticket, 'ticket')
|
318
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Update ticket', id: ticket.id, message: Oj.load(response.body)}) unless response.status == 200
|
319
|
+
Tickets.new(Oj.load(response.body)['ticket'])
|
320
|
+
end
|
321
|
+
|
322
|
+
##
|
323
|
+
# Marks a ticket as spam and suspends the user. Will exit if unsuccessful
|
324
|
+
#
|
325
|
+
# @author Jason Colyer
|
326
|
+
# @since 1.0.0
|
327
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
328
|
+
# @param ticket [Object] An instance of {Readiness::Zendesk::Tickets}
|
329
|
+
# @return [Boolean]
|
330
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#mark-ticket-as-spam-and-suspend-requester Zendesk API > Tickets > Mark Ticket as Spam and Suspend Requester
|
331
|
+
# @example
|
332
|
+
# require 'support_readiness'
|
333
|
+
# config = Readiness::Zendesk::Configuration.new
|
334
|
+
# config.username = 'alice@example.com'
|
335
|
+
# config.token = 'test123abc'
|
336
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
337
|
+
# client = Readiness::Zendesk::Client.new(config)
|
338
|
+
# ticket = Readiness::Zendesk::Tickets.find!(client, 123456)
|
339
|
+
# mark = Readiness::Zendesk::Tickets.mark_as_spam!(client, ticket)
|
340
|
+
# pp mark
|
341
|
+
# # => true
|
342
|
+
def self.mark_as_spam!(client, ticket)
|
343
|
+
response = client.connection.put "tickets/#{ticket.id}/mark_as_spam"
|
344
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Mark ticket as spam', id: ticket.id, message: Oj.load(response.body)}) unless response.status == 200
|
345
|
+
true
|
346
|
+
end
|
347
|
+
|
348
|
+
##
|
349
|
+
# Deletes a ticket. Will exit if unsuccessful
|
350
|
+
#
|
351
|
+
# @author Jason Colyer
|
352
|
+
# @since 1.0.0
|
353
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
354
|
+
# @param ticket [Object] An instance of {Readiness::Zendesk::Tickets}
|
355
|
+
# @return [Boolean]
|
356
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#delete-ticket Zendesk API > Tickets > Delete Ticket
|
357
|
+
# @example
|
358
|
+
# require 'support_readiness'
|
359
|
+
# config = Readiness::Zendesk::Configuration.new
|
360
|
+
# config.username = 'alice@example.com'
|
361
|
+
# config.token = 'test123abc'
|
362
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
363
|
+
# client = Readiness::Zendesk::Client.new(config)
|
364
|
+
# ticket = Readiness::Zendesk::Tickets.find!(client, 123456)
|
365
|
+
# delete = Readiness::Zendesk::Tickets.delete!(client, ticket)
|
366
|
+
# pp delete
|
367
|
+
# # => true
|
368
|
+
def self.delete!(client, ticket)
|
369
|
+
response = client.connection.delete "tickets/#{ticket.id}"
|
370
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Delete a ticket', id: ticket.id, message: Oj.load(response.body)}) unless response.status == 204
|
371
|
+
true
|
372
|
+
end
|
373
|
+
|
374
|
+
##
|
375
|
+
# Lists the first 100 deleted tickets
|
376
|
+
#
|
377
|
+
# @author Jason Colyer
|
378
|
+
# @since 1.0.0
|
379
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
380
|
+
# @param sort [String] What sorting method to use
|
381
|
+
# - updated_at => Sort by updated_at ASC
|
382
|
+
# - id => Sort by id ASC
|
383
|
+
# - status => Sort by status ASC
|
384
|
+
# - -updated_at => Sort by updated_at DESC
|
385
|
+
# - -id => Sort by id DESC
|
386
|
+
# - -status => Sort by status DESC
|
387
|
+
# @return [Array]
|
388
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#list-deleted-tickets Zendesk API > Tickets > List Deleted Tickets
|
389
|
+
# @example
|
390
|
+
# require 'support_readiness'
|
391
|
+
# config = Readiness::Zendesk::Configuration.new
|
392
|
+
# config.username = 'alice@example.com'
|
393
|
+
# config.token = 'test123abc'
|
394
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
395
|
+
# client = Readiness::Zendesk::Client.new(config)
|
396
|
+
# tickets = Readiness::Zendesk::Tickets.list_deleted(client)
|
397
|
+
# pp tickets.count
|
398
|
+
# # => 1
|
399
|
+
def self.list_deleted(client, sort = 'id')
|
400
|
+
response = client.connection.get("deleted_tickets?page[size]=100&sort=#{sort}")
|
401
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
402
|
+
Oj.load(response.body)['deleted_tickets']
|
403
|
+
end
|
404
|
+
|
405
|
+
##
|
406
|
+
# Lists many deleted tickets. Does not stop until it ends or the page limit is hit.
|
407
|
+
# This method can take a long time to run depending on the parameters used.
|
408
|
+
#
|
409
|
+
# @author Jason Colyer
|
410
|
+
# @since 1.0.0
|
411
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
412
|
+
# @param limit [Integer] The number of pages to stop at. Using 0 means to list all.
|
413
|
+
# @param sort [String] What sorting method to use
|
414
|
+
# - updated_at => Sort by updated_at ASC
|
415
|
+
# - id => Sort by id ASC
|
416
|
+
# - status => Sort by status ASC
|
417
|
+
# - -updated_at => Sort by updated_at DESC
|
418
|
+
# - -id => Sort by id DESC
|
419
|
+
# - -status => Sort by status DESC
|
420
|
+
# @return [Array]
|
421
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#list-deleted-tickets Zendesk API > Tickets > List Deleted Tickets
|
422
|
+
# @example
|
423
|
+
# require 'support_readiness'
|
424
|
+
# config = Readiness::Zendesk::Configuration.new
|
425
|
+
# config.username = 'alice@example.com'
|
426
|
+
# config.token = 'test123abc'
|
427
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
428
|
+
# client = Readiness::Zendesk::Client.new(config)
|
429
|
+
# tickets = Readiness::Zendesk::Tickets.list_many_deleted(client, 3)
|
430
|
+
# pp tickets.count
|
431
|
+
# # => 267
|
432
|
+
def self.list_many_deleted(client, limit = 0, sort = 'id')
|
433
|
+
array = []
|
434
|
+
opts = "page[size]=100&sort=#{sort}"
|
435
|
+
loop do
|
436
|
+
response = client.connection.get("deleted_tickets?#{opts}")
|
437
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
438
|
+
body = Oj.load(response.body)
|
439
|
+
array += body['deleted_tickets']
|
440
|
+
break if limit != 0 && array.count >= (limit * 100)
|
441
|
+
break unless body['meta']['has_more']
|
442
|
+
|
443
|
+
opts = body['links'] ['next'].split('?').last
|
444
|
+
end
|
445
|
+
array
|
446
|
+
end
|
447
|
+
|
448
|
+
##
|
449
|
+
# Restores a deleted ticket. This will exit if unsuccessful
|
450
|
+
#
|
451
|
+
# @author Jason Colyer
|
452
|
+
# @since 1.0.0
|
453
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
454
|
+
# @param tid [Integer] The deleted ticket's ID
|
455
|
+
# @return [Boolean]
|
456
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#restore-a-previously-deleted-ticket Zendesk API > Tickets > Restore a Previously Deleted Ticket
|
457
|
+
# @example
|
458
|
+
# require 'support_readiness'
|
459
|
+
# config = Readiness::Zendesk::Configuration.new
|
460
|
+
# config.username = 'alice@example.com'
|
461
|
+
# config.token = 'test123abc'
|
462
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
463
|
+
# client = Readiness::Zendesk::Client.new(config)
|
464
|
+
# ticket = Readiness::Zendesk::Tickets.restore!(client, 123456)
|
465
|
+
# pp ticket
|
466
|
+
# # => true
|
467
|
+
def self.restore!(client, tid)
|
468
|
+
response = client.connection.put "deleted_tickets/#{tid}/restore"
|
469
|
+
handle_request_error(1, 'Zendesk', response.status) unless response.status == 200
|
470
|
+
true
|
471
|
+
end
|
472
|
+
|
473
|
+
##
|
474
|
+
# Deletes a deleted ticket. This will exit if unsuccessful
|
475
|
+
#
|
476
|
+
# @author Jason Colyer
|
477
|
+
# @since 1.0.0
|
478
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
479
|
+
# @param tid [Integer] The deleted ticket's ID
|
480
|
+
# @return [Object] A {Readiness::Zendesk::JobStatuses} instance
|
481
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#delete-ticket-permanentlyt Zendesk API > Tickets > Delete Ticket Permanently
|
482
|
+
# @example
|
483
|
+
# require 'support_readiness'
|
484
|
+
# config = Readiness::Zendesk::Configuration.new
|
485
|
+
# config.username = 'alice@example.com'
|
486
|
+
# config.token = 'test123abc'
|
487
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
488
|
+
# client = Readiness::Zendesk::Client.new(config)
|
489
|
+
# delete = Readiness::Zendesk::Tickets.delete_permanently!(client, 123456)
|
490
|
+
# pp delete.id
|
491
|
+
# # => "82de0b044094f0c67893ac9fe64f1a99"
|
492
|
+
def self.delete_permanently!(client, tid)
|
493
|
+
response = client.connection.delete "deleted_tickets/#{tid}"
|
494
|
+
handle_request_error(1, 'Zendesk', response.status) unless response.status == 200
|
495
|
+
JobStatuses.new(Oj.load(response.body['job_status']))
|
496
|
+
end
|
497
|
+
|
498
|
+
##
|
499
|
+
# Lists the incident tickets connected to a specific ticket.
|
500
|
+
#
|
501
|
+
# @author Jason Colyer
|
502
|
+
# @since 1.0.0
|
503
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
504
|
+
# @param ticket [Object] an instance of {Readiness::Zendesk::Tickets}
|
505
|
+
# @return [Array]
|
506
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#list-ticket-incidents Zendesk API > Tickets > List Ticket Incidents
|
507
|
+
# @example
|
508
|
+
# require 'support_readiness'
|
509
|
+
# config = Readiness::Zendesk::Configuration.new
|
510
|
+
# config.username = 'alice@example.com'
|
511
|
+
# config.token = 'test123abc'
|
512
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
513
|
+
# client = Readiness::Zendesk::Client.new(config)
|
514
|
+
# ticket = Readiness::Zendesk::Tickets.find!(client, 123456)
|
515
|
+
# incidents = Readiness::Zendesk::Tickets.incidents(client, ticket)
|
516
|
+
# pp incidents.map { |i| i.id }
|
517
|
+
# # => [33, 34]
|
518
|
+
def self.incidents(client, ticket)
|
519
|
+
array = []
|
520
|
+
opts = "page[size]=100&sort=#{sort}"
|
521
|
+
loop do
|
522
|
+
response = client.connection.get("tickets/#{ticket.id}/incidents?#{opts}")
|
523
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
524
|
+
body = Oj.load(response.body)
|
525
|
+
array += body['tickets'].map { |t| Tickets.new(t) }
|
526
|
+
break if limit != 0 && array.count >= (limit * 100)
|
527
|
+
break unless body['meta']['has_more']
|
528
|
+
|
529
|
+
opts = body['links'] ['next'].split('?').last
|
530
|
+
end
|
531
|
+
array
|
532
|
+
end
|
533
|
+
|
534
|
+
##
|
535
|
+
# Lists all problem tickets
|
536
|
+
#
|
537
|
+
# @author Jason Colyer
|
538
|
+
# @since 1.0.0
|
539
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
540
|
+
# @return [Array]
|
541
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#list-ticket-problems Zendesk API > Tickets > List Ticket Problems
|
542
|
+
# @example
|
543
|
+
# require 'support_readiness'
|
544
|
+
# config = Readiness::Zendesk::Configuration.new
|
545
|
+
# config.username = 'alice@example.com'
|
546
|
+
# config.token = 'test123abc'
|
547
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
548
|
+
# client = Readiness::Zendesk::Client.new(config)
|
549
|
+
# problems = Readiness::Zendesk::Tickets.problems(client)
|
550
|
+
# pp problems.map { |p| p.id }
|
551
|
+
# # => [33, 34]
|
552
|
+
def self.problems(client)
|
553
|
+
array = []
|
554
|
+
opts = "page[size]=100&sort=#{sort}"
|
555
|
+
loop do
|
556
|
+
response = client.connection.get("tickets/problems?#{opts}")
|
557
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
558
|
+
body = Oj.load(response.body)
|
559
|
+
array += body['tickets'].map { |t| Tickets.new(t) }
|
560
|
+
break if limit != 0 && array.count >= (limit * 100)
|
561
|
+
break unless body['meta']['has_more']
|
562
|
+
|
563
|
+
opts = body['links'] ['next'].split('?').last
|
564
|
+
end
|
565
|
+
array
|
566
|
+
end
|
567
|
+
|
568
|
+
##
|
569
|
+
# Lists the first 100 non-archived tickets
|
570
|
+
#
|
571
|
+
# @author Jason Colyer
|
572
|
+
# @since 1.0.0
|
573
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
574
|
+
# @param sort [String] What sorting method to use
|
575
|
+
# - updated_at => Sort by updated_at ASC
|
576
|
+
# - id => Sort by id ASC
|
577
|
+
# - status => Sort by status ASC
|
578
|
+
# - -updated_at => Sort by updated_at DESC
|
579
|
+
# - -id => Sort by id DESC
|
580
|
+
# - -status => Sort by status DESC
|
581
|
+
# @return [Array]
|
582
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#list-tickets Zendesk API > Tickets > List Tickets
|
583
|
+
# @example
|
584
|
+
# require 'support_readiness'
|
585
|
+
# config = Readiness::Zendesk::Configuration.new
|
586
|
+
# config.username = 'alice@example.com'
|
587
|
+
# config.token = 'test123abc'
|
588
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
589
|
+
# client = Readiness::Zendesk::Client.new(config)
|
590
|
+
# tickets = Readiness::Zendesk::Tickets.list(client)
|
591
|
+
# pp tickets.first.id
|
592
|
+
# # => 35436
|
593
|
+
def self.list(client, sort = 'id')
|
594
|
+
response = client.connection.get("tickets?page[size]=100&sort=#{sort}")
|
595
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
596
|
+
Oj.load(response.body)['tickets'].map { |t| Tickets.new(t) }
|
597
|
+
end
|
598
|
+
|
599
|
+
##
|
600
|
+
# Lists many tickets. Does not stop until it ends or the page limit is hit.
|
601
|
+
# This method can take a long time to run depending on the parameters used.
|
602
|
+
#
|
603
|
+
# @author Jason Colyer
|
604
|
+
# @since 1.0.0
|
605
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
606
|
+
# @param limit [Integer] The number of pages to stop at. Using 0 means to list all.
|
607
|
+
# @param sort [String] What sorting method to use
|
608
|
+
# - updated_at => Sort by updated_at ASC
|
609
|
+
# - id => Sort by id ASC
|
610
|
+
# - status => Sort by status ASC
|
611
|
+
# - -updated_at => Sort by updated_at DESC
|
612
|
+
# - -id => Sort by id DESC
|
613
|
+
# - -status => Sort by status DESC
|
614
|
+
# @return [Array]
|
615
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#list-tickets Zendesk API > Tickets > List Tickets
|
616
|
+
# @example
|
617
|
+
# require 'support_readiness'
|
618
|
+
# config = Readiness::Zendesk::Configuration.new
|
619
|
+
# config.username = 'alice@example.com'
|
620
|
+
# config.token = 'test123abc'
|
621
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
622
|
+
# client = Readiness::Zendesk::Client.new(config)
|
623
|
+
# tickets = Readiness::Zendesk::Tickets.list_many(client, 5)
|
624
|
+
# pp tickets.count
|
625
|
+
# # => 500
|
626
|
+
def self.list_many(client, limit = 0, sort = 'id')
|
627
|
+
array = []
|
628
|
+
opts = "page[size]=100&sort=#{sort}"
|
629
|
+
loop do
|
630
|
+
response = client.connection.get("tickets?#{opts}")
|
631
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
632
|
+
body = Oj.load(response.body)
|
633
|
+
array += body['tickets'].map { |t| Tickets.new(t) }
|
634
|
+
break if limit != 0 && array.count >= (limit * 100)
|
635
|
+
break unless body['meta']['has_more']
|
636
|
+
|
637
|
+
opts = body['links'] ['next'].split('?').last
|
638
|
+
end
|
639
|
+
array
|
640
|
+
end
|
641
|
+
|
642
|
+
##
|
643
|
+
# Locates a ticket within Zendesk. This will not exit on error (except Authentication errors)
|
644
|
+
#
|
645
|
+
# @author Jason Colyer
|
646
|
+
# @since 1.0.0
|
647
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
648
|
+
# @param tid [Integer] The ticket ID to find
|
649
|
+
# @return [Hash]
|
650
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#show-ticket Zendesk API > Tickets > Show Ticket
|
651
|
+
# @example
|
652
|
+
# require 'support_readiness'
|
653
|
+
# config = Readiness::Zendesk::Configuration.new
|
654
|
+
# config.username = 'alice@example.com'
|
655
|
+
# config.token = 'test123abc'
|
656
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
657
|
+
# client = Readiness::Zendesk::Client.new(config)
|
658
|
+
# ticket = Readiness::Zendesk::Tickets.find(client, 35436)
|
659
|
+
# pp ticket.subject
|
660
|
+
# # => "Help, my printer is on fire!"
|
661
|
+
def self.find(client, tid)
|
662
|
+
response = client.connection.get("tickets/#{tid}")
|
663
|
+
handle_request_error(0, 'Zendesk', response.status, { action: 'get', id: tid }) unless response.status == 200
|
664
|
+
return Tickets.new(Oj.load(response.body)['ticket']) if response.status == 200
|
665
|
+
|
666
|
+
Oj.load(response.body)
|
667
|
+
end
|
668
|
+
|
669
|
+
##
|
670
|
+
# Locates a ticket within Zendesk. This will exit on error
|
671
|
+
#
|
672
|
+
# @author Jason Colyer
|
673
|
+
# @since 1.0.0
|
674
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
675
|
+
# @param tid [Integer] The ticket ID to find
|
676
|
+
# @return [Hash]
|
677
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#show-ticket Zendesk API > Tickets > Show Ticket
|
678
|
+
# @example
|
679
|
+
# require 'support_readiness'
|
680
|
+
# config = Readiness::Zendesk::Configuration.new
|
681
|
+
# config.username = 'alice@example.com'
|
682
|
+
# config.token = 'test123abc'
|
683
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
684
|
+
# client = Readiness::Zendesk::Client.new(config)
|
685
|
+
# ticket = Readiness::Zendesk::Tickets.find!(client, 35436)
|
686
|
+
# pp ticket.subject
|
687
|
+
# # => "Help, my printer is on fire!"
|
688
|
+
def self.find!(client, tid)
|
689
|
+
response = client.connection.get("tickets/#{tid}")
|
690
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Find ticket', id: tid }) unless response.status == 200
|
691
|
+
Tickets.new(Oj.load(response.body)['ticket'])
|
692
|
+
end
|
693
|
+
|
694
|
+
##
|
695
|
+
# Locates up to 100 tickets within Zendesk.
|
696
|
+
#
|
697
|
+
# @author Jason Colyer
|
698
|
+
# @since 1.0.0
|
699
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
700
|
+
# @param tids [Array] The ticket IDs to find
|
701
|
+
# @return [Array]
|
702
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#show-multiple-tickets Zendesk API > Tickets > Show Multiple Tickets
|
703
|
+
# @example
|
704
|
+
# require 'support_readiness'
|
705
|
+
# config = Readiness::Zendesk::Configuration.new
|
706
|
+
# config.username = 'alice@example.com'
|
707
|
+
# config.token = 'test123abc'
|
708
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
709
|
+
# client = Readiness::Zendesk::Client.new(config)
|
710
|
+
# tickets = Readiness::Zendesk::Tickets.find!(client, [35436, 35437])
|
711
|
+
# pp ticket.count
|
712
|
+
# # => 2
|
713
|
+
def self.find_many(client, tids)
|
714
|
+
response = client.connection.get("tickets/show_many?ids=#{tids.join(',')}")
|
715
|
+
handle_request_error(0, 'Zendesk', response.status, { action: 'get', id: tids }) unless response.status == 200
|
716
|
+
Oj.load(response.body)['tickets'].map { |t| Tickets.new(t) }
|
717
|
+
end
|
718
|
+
|
719
|
+
##
|
720
|
+
# Locates all suspended tickets within Zendesk.
|
721
|
+
#
|
722
|
+
# @author Jason Colyer
|
723
|
+
# @since 1.0.0
|
724
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
725
|
+
# @return [Array]
|
726
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/suspended_tickets/#list-suspended-tickets Zendesk API > Suspended Tickets > List Suspended Tickets
|
727
|
+
# @example
|
728
|
+
# require 'support_readiness'
|
729
|
+
# config = Readiness::Zendesk::Configuration.new
|
730
|
+
# config.username = 'alice@example.com'
|
731
|
+
# config.token = 'test123abc'
|
732
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
733
|
+
# client = Readiness::Zendesk::Client.new(config)
|
734
|
+
# tickets = Readiness::Zendesk::Tickets.list_suspended(client)
|
735
|
+
# pp ticket.count
|
736
|
+
# # => 18
|
737
|
+
def self.list_suspended(client)
|
738
|
+
array = []
|
739
|
+
opts = "page[size]=100&sort=#{sort}"
|
740
|
+
loop do
|
741
|
+
response = client.connection.get("suspended_tickets?#{opts}")
|
742
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
743
|
+
body = Oj.load(response.body)
|
744
|
+
array += body['suspended_tickets']
|
745
|
+
break if limit != 0 && array.count >= (limit * 100)
|
746
|
+
break unless body['meta']['has_more']
|
747
|
+
|
748
|
+
opts = body['links'] ['next'].split('?').last
|
749
|
+
end
|
750
|
+
array
|
751
|
+
end
|
752
|
+
|
753
|
+
##
|
754
|
+
# Recovers a suspended ticket within Zendesk.
|
755
|
+
#
|
756
|
+
# @author Jason Colyer
|
757
|
+
# @since 1.0.0
|
758
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
759
|
+
# @param sid [Integer] The ID of the suspended ticket
|
760
|
+
# @return [Object] An instance of {Readiness::Zendesk::Tickets}
|
761
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/suspended_tickets/#recover-suspended-ticket Zendesk API > Suspended Tickets > Recover Suspended Ticket
|
762
|
+
# @example
|
763
|
+
# require 'support_readiness'
|
764
|
+
# config = Readiness::Zendesk::Configuration.new
|
765
|
+
# config.username = 'alice@example.com'
|
766
|
+
# config.token = 'test123abc'
|
767
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
768
|
+
# client = Readiness::Zendesk::Client.new(config)
|
769
|
+
# ticket = Readiness::Zendesk::Tickets.recover_suspended!(client, 123)
|
770
|
+
# pp ticket.subject
|
771
|
+
# # => "Help, my printer is on fire!"
|
772
|
+
def self.recover_suspended!(client, sid)
|
773
|
+
response = client.connection.put("suspended_tickets/#{sid}/recover")
|
774
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Recover suspended ticket', id: sid }) unless response.status == 200
|
775
|
+
Tickets.new(Oj.load(response.body)['ticket'])
|
776
|
+
end
|
777
|
+
|
778
|
+
##
|
779
|
+
# Recover many suspended tickets within Zendesk
|
780
|
+
#
|
781
|
+
# @author Jason Colyer
|
782
|
+
# @since 1.0.0
|
783
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
784
|
+
# @param sids [Array] An Array of suspended ticket IDs to recover
|
785
|
+
# @return [Array] An Array of {Readiness::Zendesk::Tickets} instances
|
786
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/suspended_tickets/#recover-multiple-suspended-tickets Zendesk API > Suspended Tickets > Recover Multiple Suspended Tickets
|
787
|
+
# @example
|
788
|
+
# require 'support_readiness'
|
789
|
+
# config = Readiness::Zendesk::Configuration.new
|
790
|
+
# config.username = 'alice@example.com'
|
791
|
+
# config.token = 'test123abc'
|
792
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
793
|
+
# client = Readiness::Zendesk::Client.new(config)
|
794
|
+
# tickets = Readiness::Zendesk::Tickets.recover_many_suspended!(client, [123, 456, 789])
|
795
|
+
# pp tickets.first.subject
|
796
|
+
# # => "Help, my printer is on fire!"
|
797
|
+
def self.recover_many_suspended!(client, sids)
|
798
|
+
response = client.connection.put("suspended_tickets/recover_many?ids=#{sids.join(',')}")
|
799
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Recover many suspended ticket', id: sids }) unless response.status == 200
|
800
|
+
Oj.load(response.body)['tickets'].map { |t| Tickets.new(t) }
|
801
|
+
end
|
802
|
+
|
803
|
+
##
|
804
|
+
# Deletes a suspended ticket within Zendesk.
|
805
|
+
#
|
806
|
+
# @author Jason Colyer
|
807
|
+
# @since 1.0.0
|
808
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
809
|
+
# @param sid [Integer] The ID of the suspended ticket
|
810
|
+
# @return [Boolean]
|
811
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/suspended_tickets/#delete-suspended-ticket Zendesk API > Suspended Tickets > Delete Suspended Ticket
|
812
|
+
# @example
|
813
|
+
# require 'support_readiness'
|
814
|
+
# config = Readiness::Zendesk::Configuration.new
|
815
|
+
# config.username = 'alice@example.com'
|
816
|
+
# config.token = 'test123abc'
|
817
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
818
|
+
# client = Readiness::Zendesk::Client.new(config)
|
819
|
+
# delete = Readiness::Zendesk::Tickets.delete_suspended!(client, 123)
|
820
|
+
# pp delete
|
821
|
+
# # => true
|
822
|
+
def self.delete_suspended!(client, sid)
|
823
|
+
response = client.connection.delete("suspended_tickets/#{sid}")
|
824
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Delete suspended ticket', id: sid }) unless response.status == 204
|
825
|
+
true
|
826
|
+
end
|
827
|
+
|
828
|
+
##
|
829
|
+
# Deletes many suspended tickets within Zendesk.
|
830
|
+
#
|
831
|
+
# @author Jason Colyer
|
832
|
+
# @since 1.0.0
|
833
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
834
|
+
# @param sids [Array] An Array of suspended ticket IDs to delete
|
835
|
+
# @return [Boolean]
|
836
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/suspended_tickets/#delete-multiple-suspended-tickets Zendesk API > Suspended Tickets > Delete Multiple Suspended Tickets
|
837
|
+
# @example
|
838
|
+
# require 'support_readiness'
|
839
|
+
# config = Readiness::Zendesk::Configuration.new
|
840
|
+
# config.username = 'alice@example.com'
|
841
|
+
# config.token = 'test123abc'
|
842
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
843
|
+
# client = Readiness::Zendesk::Client.new(config)
|
844
|
+
# deletes = Readiness::Zendesk::Tickets.delete_many_suspended!(client, [123, 456])
|
845
|
+
# pp deletes
|
846
|
+
# # => true
|
847
|
+
def self.delete_many_suspended!(client, sids)
|
848
|
+
response = client.connection.delete("suspended_tickets/destroy_many?ids=#{sids.join(',')}")
|
849
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Delete many suspended ticket', id: sids }) unless response.status == 200
|
850
|
+
true
|
851
|
+
end
|
852
|
+
end
|
853
|
+
end
|
854
|
+
end
|