helpscout 0.0.3 → 0.0.4
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.
- data/Gemfile +1 -1
- data/README.markdown +6 -6
- data/VERSION +1 -1
- data/helpscout.gemspec +7 -7
- data/lib/helpscout.rb +1 -1
- data/lib/helpscout/client.rb +758 -0
- data/lib/helpscout/models.rb +654 -164
- metadata +22 -54
- data/lib/helpscout/base.rb +0 -270
data/Gemfile
CHANGED
data/README.markdown
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Helpscout Developers API gem
|
2
2
|
|
3
|
-
This gem is in
|
3
|
+
This gem is in beta.
|
4
4
|
|
5
5
|
## Usage
|
6
6
|
|
@@ -9,25 +9,25 @@ This gem is in alpha.
|
|
9
9
|
2. Initialize your HelpScout client
|
10
10
|
|
11
11
|
```ruby
|
12
|
-
HelpScout::
|
12
|
+
helpscout = HelpScout::Client.new(HELPSCOUT_API_KEY)
|
13
13
|
```
|
14
14
|
|
15
15
|
#### Fetching Users
|
16
16
|
|
17
17
|
```ruby
|
18
|
-
users =
|
18
|
+
users = helpscout.users
|
19
19
|
```
|
20
20
|
|
21
21
|
#### Fetching Mailboxes
|
22
22
|
|
23
23
|
```ruby
|
24
|
-
mailboxes =
|
24
|
+
mailboxes = helpscout.mailboxes
|
25
25
|
```
|
26
26
|
|
27
27
|
#### Fetching Customers
|
28
28
|
|
29
29
|
```ruby
|
30
|
-
customers =
|
30
|
+
customers = helpscout.customers
|
31
31
|
```
|
32
32
|
|
33
33
|
#### Fetching Conversations
|
@@ -35,6 +35,6 @@ customers = HelpScout::Base.customers
|
|
35
35
|
To fetch active conversations:
|
36
36
|
|
37
37
|
```ruby
|
38
|
-
conversations =
|
38
|
+
conversations = helpscout.conversations(mailboxId, "active", nil)
|
39
39
|
```
|
40
40
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
data/helpscout.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "helpscout"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["H\u{e9}ctor Ramos"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2013-02-11"
|
13
13
|
s.description = ""
|
14
14
|
s.email = "hector@hectorramos.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -22,13 +22,13 @@ Gem::Specification.new do |s|
|
|
22
22
|
"VERSION",
|
23
23
|
"helpscout.gemspec",
|
24
24
|
"lib/helpscout.rb",
|
25
|
-
"lib/helpscout/
|
25
|
+
"lib/helpscout/client.rb",
|
26
26
|
"lib/helpscout/models.rb"
|
27
27
|
]
|
28
28
|
s.homepage = "http://github.com/hramos/helpscout"
|
29
29
|
s.licenses = ["MIT"]
|
30
30
|
s.require_paths = ["lib"]
|
31
|
-
s.rubygems_version = "1.8.
|
31
|
+
s.rubygems_version = "1.8.11"
|
32
32
|
s.summary = "HelpScout API Wrapper"
|
33
33
|
|
34
34
|
if s.respond_to? :specification_version then
|
@@ -36,7 +36,7 @@ Gem::Specification.new do |s|
|
|
36
36
|
|
37
37
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
38
38
|
s.add_runtime_dependency(%q<httparty>, [">= 0"])
|
39
|
-
s.add_development_dependency(%q<bundler>, ["~> 1.
|
39
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.2.3"])
|
40
40
|
s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
|
41
41
|
s.add_development_dependency(%q<httparty>, [">= 0"])
|
42
42
|
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
@@ -44,7 +44,7 @@ Gem::Specification.new do |s|
|
|
44
44
|
s.add_development_dependency(%q<rdoc>, [">= 0"])
|
45
45
|
else
|
46
46
|
s.add_dependency(%q<httparty>, [">= 0"])
|
47
|
-
s.add_dependency(%q<bundler>, ["~> 1.
|
47
|
+
s.add_dependency(%q<bundler>, ["~> 1.2.3"])
|
48
48
|
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
49
49
|
s.add_dependency(%q<httparty>, [">= 0"])
|
50
50
|
s.add_dependency(%q<simplecov>, [">= 0"])
|
@@ -53,7 +53,7 @@ Gem::Specification.new do |s|
|
|
53
53
|
end
|
54
54
|
else
|
55
55
|
s.add_dependency(%q<httparty>, [">= 0"])
|
56
|
-
s.add_dependency(%q<bundler>, ["~> 1.
|
56
|
+
s.add_dependency(%q<bundler>, ["~> 1.2.3"])
|
57
57
|
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
58
58
|
s.add_dependency(%q<httparty>, [">= 0"])
|
59
59
|
s.add_dependency(%q<simplecov>, [">= 0"])
|
data/lib/helpscout.rb
CHANGED
@@ -0,0 +1,758 @@
|
|
1
|
+
# Help Scout API V1 Client
|
2
|
+
# http://developer.helpscout.net/
|
3
|
+
#
|
4
|
+
# Authentication
|
5
|
+
# This is an HTTPS-only API. Authentication will be based on API Keys, which can
|
6
|
+
# be generated the Help Scout UI in the User Profile. Each API Key will map to
|
7
|
+
# an existing Help Scout user. Results returned from various responses will be
|
8
|
+
# based upon the role of the user to which the API key is tied.
|
9
|
+
#
|
10
|
+
# The API Key will be passed via HTTP Basic Authentication. The API Key will go
|
11
|
+
# in the username field and a dummy password, such as X, in the password field.
|
12
|
+
#
|
13
|
+
# Rate Limiting
|
14
|
+
# Requests will be limited to 200 requests per minute. Response code 429 will
|
15
|
+
# be returned when throttle limit has been reached. A "Retry-After" header will
|
16
|
+
# be returned indicating how many seconds to wait until retry.
|
17
|
+
#
|
18
|
+
# Formats
|
19
|
+
# Each endpoint will specify the response format in the URL. However, the API
|
20
|
+
# will only support JSON at this time.
|
21
|
+
#
|
22
|
+
# Usage
|
23
|
+
# 1. Follow the instructions at Help Scout's Developers site to generate an API
|
24
|
+
# key: http://developer.helpscout.net/
|
25
|
+
# 2. Add your API Key to config/helpscout.yml:
|
26
|
+
# api_key: XXXXXX
|
27
|
+
# 3. Initialize your Help Scout client:
|
28
|
+
# HelpScout::Client.new
|
29
|
+
# 4. You may now query the Help Scout API:
|
30
|
+
# mailboxes = HelpScout::Client.mailboxes
|
31
|
+
#
|
32
|
+
# You may also initialize a client without using helpscout.yml by passing the
|
33
|
+
# API Key to new:
|
34
|
+
# HelpScout::Client.new(XXXXXX)
|
35
|
+
|
36
|
+
require "erb"
|
37
|
+
require "httparty"
|
38
|
+
require "yaml"
|
39
|
+
|
40
|
+
module HelpScout
|
41
|
+
class Client
|
42
|
+
include HTTParty
|
43
|
+
|
44
|
+
# All API requests will be made to: https://api.helpscout.net/. All
|
45
|
+
# requests are served over HTTPS. The current version is v1.
|
46
|
+
base_uri 'https://api.helpscout.net/v1'
|
47
|
+
|
48
|
+
@@settings ||= nil
|
49
|
+
|
50
|
+
# Returns the current Help Scout Client settings.
|
51
|
+
# If no settings have been loaded yet, this function will load its
|
52
|
+
# configuration from helpscout.yml
|
53
|
+
#
|
54
|
+
# Settings
|
55
|
+
# api_key String Help Scout API Key. The API is currently available for
|
56
|
+
# paying Help Scout accounts (Basic or Standard plan). You
|
57
|
+
# can generate a key from your User Profile, on the API
|
58
|
+
# Keys tab.
|
59
|
+
|
60
|
+
def self.settings
|
61
|
+
if @@settings.nil?
|
62
|
+
path = "config/helpscout.yml"
|
63
|
+
if File.exist?(path)
|
64
|
+
@@settings = YAML.load(ERB.new(File.new(path).read).result)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
@@settings
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
# Requests a single item from the Help Scout API. Should return either an
|
72
|
+
# item from the SingleItemEnvelope, or raise an error with an
|
73
|
+
# ErrorEnvelope.
|
74
|
+
#
|
75
|
+
# url String A string representing the url for the REST endpoint to be
|
76
|
+
# queried.
|
77
|
+
# params Hash A hash of GET parameters to use for this particular
|
78
|
+
# request.
|
79
|
+
#
|
80
|
+
# Response
|
81
|
+
# Name Type Notes
|
82
|
+
# Header Status Int 200
|
83
|
+
# Body item
|
84
|
+
|
85
|
+
def self.requestItem(auth, url, params={})
|
86
|
+
item = nil
|
87
|
+
|
88
|
+
request_url = ""
|
89
|
+
request_url << url
|
90
|
+
if params
|
91
|
+
request_url << "?" + params.to_query
|
92
|
+
end
|
93
|
+
|
94
|
+
begin
|
95
|
+
response = Client.get(request_url, {:basic_auth => auth})
|
96
|
+
rescue SocketError => se
|
97
|
+
raise StandardError, se.message
|
98
|
+
end
|
99
|
+
|
100
|
+
if 200 <= response.code && response.code < 300
|
101
|
+
envelope = SingleItemEnvelope.new(response)
|
102
|
+
if envelope.item
|
103
|
+
item = envelope.item
|
104
|
+
end
|
105
|
+
elsif 400 <= response.code && response.code < 500
|
106
|
+
if response["message"]
|
107
|
+
envelope = ErrorEnvelope.new(response)
|
108
|
+
raise StandardError, envelope.message
|
109
|
+
else
|
110
|
+
raise StandardError, response["error"]
|
111
|
+
end
|
112
|
+
else
|
113
|
+
raise StandardError, "Server Response: #{response.code}"
|
114
|
+
end
|
115
|
+
|
116
|
+
item
|
117
|
+
end
|
118
|
+
|
119
|
+
|
120
|
+
# Requests a collections of items from the Help Scout API. Should return
|
121
|
+
# either an array of items from the CollectionsEnvelope, or raise an error
|
122
|
+
# with an ErrorEnvelope.
|
123
|
+
#
|
124
|
+
# Collections return a maximum of 50 records per page.
|
125
|
+
#
|
126
|
+
# url String A string representing the url for the REST endpoint to be
|
127
|
+
# queried.
|
128
|
+
# params Hash A hash of GET parameters to use for this particular
|
129
|
+
# request.
|
130
|
+
#
|
131
|
+
# Response
|
132
|
+
# Name Type Notes
|
133
|
+
# Header Status Int 200
|
134
|
+
# Body page Int Current page that was passed in on the request
|
135
|
+
# pages Int Total number of pages available
|
136
|
+
# count Int Total number of objects available
|
137
|
+
# items Array Collection of objects
|
138
|
+
|
139
|
+
def self.requestItems(auth, url, params={})
|
140
|
+
items = []
|
141
|
+
|
142
|
+
request_url = ""
|
143
|
+
request_url << url
|
144
|
+
if params
|
145
|
+
query = ""
|
146
|
+
params.each { |k,v| query += "#{k}=#{v}&" }
|
147
|
+
request_url << "?" + query
|
148
|
+
end
|
149
|
+
|
150
|
+
begin
|
151
|
+
response = Client.get(request_url, {:basic_auth => auth})
|
152
|
+
rescue SocketError => se
|
153
|
+
raise StandardError, se.message
|
154
|
+
end
|
155
|
+
|
156
|
+
if 200 <= response.code && response.code < 300
|
157
|
+
envelope = CollectionsEnvelope.new(response)
|
158
|
+
if envelope.items
|
159
|
+
envelope.items.each do |item|
|
160
|
+
items << item
|
161
|
+
end
|
162
|
+
end
|
163
|
+
elsif 400 <= response.code && response.code < 500
|
164
|
+
if response["message"]
|
165
|
+
envelope = ErrorEnvelope.new(response)
|
166
|
+
raise StandardError, envelope.message
|
167
|
+
else
|
168
|
+
raise StandardError, response["error"]
|
169
|
+
end
|
170
|
+
else
|
171
|
+
raise StandardError, "Server Response: #{response.code}"
|
172
|
+
end
|
173
|
+
|
174
|
+
items
|
175
|
+
end
|
176
|
+
|
177
|
+
|
178
|
+
# Requests a collections of items from the Help Scout API. Should return
|
179
|
+
# the total count for this collection, or raise an error with an
|
180
|
+
# ErrorEnvelope.
|
181
|
+
#
|
182
|
+
# url String A string representing the url for the REST endpoint to be
|
183
|
+
# queried.
|
184
|
+
# params Hash A hash of GET parameters to use for this particular
|
185
|
+
# request.
|
186
|
+
#
|
187
|
+
# Response
|
188
|
+
# Name Type Notes
|
189
|
+
# Header Status Int 200
|
190
|
+
# Body page Int Current page that was passed in on the request
|
191
|
+
# pages Int Total number of pages available
|
192
|
+
# count Int Total number of objects available
|
193
|
+
# items Array Collection of objects
|
194
|
+
|
195
|
+
def self.requestCount(auth, url, params={})
|
196
|
+
request_url = ""
|
197
|
+
request_url << url
|
198
|
+
if params
|
199
|
+
query = ""
|
200
|
+
params.each { |k,v| query += "#{k}=#{v}&" }
|
201
|
+
request_url << "?" + query
|
202
|
+
end
|
203
|
+
|
204
|
+
begin
|
205
|
+
response = Client.get(request_url, {:basic_auth => auth})
|
206
|
+
rescue SocketError => se
|
207
|
+
raise StandardError, se.message
|
208
|
+
end
|
209
|
+
|
210
|
+
if 200 <= response.code && response.code < 300
|
211
|
+
envelope = CollectionsEnvelope.new(response)
|
212
|
+
envelope.count
|
213
|
+
elsif 400 <= response.code && response.code < 500
|
214
|
+
if response["message"]
|
215
|
+
envelope = ErrorEnvelope.new(response)
|
216
|
+
raise StandardError, envelope.message
|
217
|
+
else
|
218
|
+
raise StandardError, response["error"]
|
219
|
+
end
|
220
|
+
else
|
221
|
+
raise StandardError, "Server Response: #{response.code}"
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
# HelpScout::Client.new
|
226
|
+
#
|
227
|
+
# Initializes the Help Scout Client. Once called, you may use any of the
|
228
|
+
# HelpScout::Client methods to query the Help Scout API.
|
229
|
+
#
|
230
|
+
# key String Help Scout API Key. Optional. If not passed, the key will be
|
231
|
+
# loaded from @@settings, which defaults to helpscout.yml.
|
232
|
+
|
233
|
+
def initialize(key = nil)
|
234
|
+
Client.settings
|
235
|
+
|
236
|
+
if key.nil?
|
237
|
+
key = @@settings["api_key"]
|
238
|
+
end
|
239
|
+
|
240
|
+
# The Help Scout API uses Basic Auth, where username is your API Key.
|
241
|
+
# Password can be any arbitrary non-zero-length string.
|
242
|
+
@auth = { :username => key, :password => "X" }
|
243
|
+
end
|
244
|
+
|
245
|
+
|
246
|
+
# Get User
|
247
|
+
# http://developer.helpscout.net/users/
|
248
|
+
#
|
249
|
+
# Fetches a single user by id.
|
250
|
+
#
|
251
|
+
# userId Int id of the User being requested
|
252
|
+
#
|
253
|
+
# Request
|
254
|
+
# REST Method: GET
|
255
|
+
# URL: https://api.helpscout.net/v1/users/{id}.json
|
256
|
+
#
|
257
|
+
# Response
|
258
|
+
# Name Type
|
259
|
+
# item User
|
260
|
+
|
261
|
+
def user(userId)
|
262
|
+
url = "/users/#{userId}.json"
|
263
|
+
item = Client.requestItem(@auth, url, nil)
|
264
|
+
user = nil
|
265
|
+
if item
|
266
|
+
user = User.new(item)
|
267
|
+
end
|
268
|
+
user
|
269
|
+
end
|
270
|
+
|
271
|
+
|
272
|
+
# List Users
|
273
|
+
# http://developer.helpscout.net/users/
|
274
|
+
#
|
275
|
+
# Fetches all users
|
276
|
+
#
|
277
|
+
# Request
|
278
|
+
# REST Method: GET
|
279
|
+
# URL: https://api.helpscout.net/v1/users.json
|
280
|
+
#
|
281
|
+
# Parameters:
|
282
|
+
# Name Type Required Default Notes
|
283
|
+
# page Int No 1
|
284
|
+
#
|
285
|
+
# Response
|
286
|
+
# Name Type
|
287
|
+
# items Array Collection of User objects
|
288
|
+
|
289
|
+
def users
|
290
|
+
url = "/users.json"
|
291
|
+
items = Client.requestItems(@auth, url, :page => 1)
|
292
|
+
users = []
|
293
|
+
items.each do |item|
|
294
|
+
users << User.new(item)
|
295
|
+
end
|
296
|
+
users
|
297
|
+
end
|
298
|
+
|
299
|
+
|
300
|
+
# List Users by Mailbox
|
301
|
+
# http://developer.helpscout.net/users/
|
302
|
+
#
|
303
|
+
# Fetches all users in a single mailbox
|
304
|
+
#
|
305
|
+
# mailboxId Int id of the Mailbox being requested
|
306
|
+
#
|
307
|
+
# Request
|
308
|
+
# REST Method: GET
|
309
|
+
# URL: https://api.helpscout.net/v1/mailboxes/{id}/users.json
|
310
|
+
#
|
311
|
+
# Parameters:
|
312
|
+
# Name Type Required Default Notes
|
313
|
+
# page Int No 1
|
314
|
+
#
|
315
|
+
# Response
|
316
|
+
# Name Type
|
317
|
+
# items Array Collection of User objects
|
318
|
+
|
319
|
+
def usersInMailbox(mailboxId)
|
320
|
+
url ="/mailboxes/#{mailboxId}/users.json"
|
321
|
+
items = Client.requestItems(@auth, url, :page => 1)
|
322
|
+
users = []
|
323
|
+
items.each do |item|
|
324
|
+
users << User.new(item)
|
325
|
+
end
|
326
|
+
users
|
327
|
+
end
|
328
|
+
|
329
|
+
|
330
|
+
# List Mailboxes
|
331
|
+
# http://developer.helpscout.net/mailboxes/
|
332
|
+
#
|
333
|
+
# Fetches all mailboxes
|
334
|
+
#
|
335
|
+
# Request
|
336
|
+
# REST Method: GET
|
337
|
+
# URL: https://api.helpscout.net/v1/mailboxes.json
|
338
|
+
#
|
339
|
+
# Parameters:
|
340
|
+
# Name Type Required Default Notes
|
341
|
+
# page Int No 1
|
342
|
+
#
|
343
|
+
# Response
|
344
|
+
# Name Type
|
345
|
+
# items Array Collection of Mailbox objects
|
346
|
+
|
347
|
+
def mailboxes
|
348
|
+
url = "/mailboxes.json"
|
349
|
+
mailboxes = []
|
350
|
+
begin
|
351
|
+
items = Client.requestItems(@auth, url, {})
|
352
|
+
items.each do |item|
|
353
|
+
mailboxes << Mailbox.new(item)
|
354
|
+
end
|
355
|
+
rescue StandardError => e
|
356
|
+
print "List Mailbox Request failed: " + e.message
|
357
|
+
end
|
358
|
+
mailboxes
|
359
|
+
end
|
360
|
+
|
361
|
+
|
362
|
+
# Get Mailbox
|
363
|
+
# http://developer.helpscout.net/mailboxes/
|
364
|
+
#
|
365
|
+
# Fetches a single Mailbox
|
366
|
+
#
|
367
|
+
# mailboxId Int id of the Mailbox being requested
|
368
|
+
#
|
369
|
+
# Request
|
370
|
+
# REST Method: GET
|
371
|
+
# URL: https://api.helpscout.net/v1/mailboxes/{id}.json
|
372
|
+
#
|
373
|
+
# Response
|
374
|
+
# Name Type
|
375
|
+
# item Mailbox
|
376
|
+
|
377
|
+
def mailbox(mailboxId)
|
378
|
+
url = "/mailboxes/#{mailboxId}.json"
|
379
|
+
item = Client.requestItem(@auth, url, nil)
|
380
|
+
mailbox = nil
|
381
|
+
if item
|
382
|
+
mailbox = Mailbox.new(item)
|
383
|
+
end
|
384
|
+
mailbox
|
385
|
+
end
|
386
|
+
|
387
|
+
|
388
|
+
# Get Folders
|
389
|
+
# http://developer.helpscout.net/mailboxes/
|
390
|
+
#
|
391
|
+
# Fetches all Folders in a given mailbox
|
392
|
+
#
|
393
|
+
# mailboxId Int id of the Mailbox being requested
|
394
|
+
#
|
395
|
+
# Request
|
396
|
+
# REST Method: GET
|
397
|
+
# URL: https://api.helpscout.net/v1/mailboxes/{id}/folders.json
|
398
|
+
#
|
399
|
+
# Parameters:
|
400
|
+
# Name Type Required Default Notes
|
401
|
+
# page Int No 1
|
402
|
+
#
|
403
|
+
# Response
|
404
|
+
# Name Type
|
405
|
+
# items Array Collection of Mailbox objects
|
406
|
+
|
407
|
+
def foldersInMailbox(mailboxId)
|
408
|
+
url = "/mailboxes/#{mailboxId}/folders.json"
|
409
|
+
items = Client.requestItems(@auth, url, :page => 1)
|
410
|
+
folders = []
|
411
|
+
items.each do |item|
|
412
|
+
folders << Folder.new(item)
|
413
|
+
end
|
414
|
+
folders
|
415
|
+
end
|
416
|
+
|
417
|
+
|
418
|
+
# Get Conversation
|
419
|
+
# http://developer.helpscout.net/conversations/
|
420
|
+
#
|
421
|
+
# Fetches a single Conversation
|
422
|
+
#
|
423
|
+
# conversationId Int id of the Conversation being requested
|
424
|
+
#
|
425
|
+
# Request
|
426
|
+
# REST Method: GET
|
427
|
+
# URL: https://api.helpscout.net/v1/conversations/{id}.json
|
428
|
+
#
|
429
|
+
# Response
|
430
|
+
# Name Type
|
431
|
+
# item Conversation
|
432
|
+
|
433
|
+
def conversation(conversationId)
|
434
|
+
url = "/conversations/#{conversationId}.json"
|
435
|
+
|
436
|
+
begin
|
437
|
+
item = Client.requestItem(@auth, url, nil)
|
438
|
+
conversation = nil
|
439
|
+
if item
|
440
|
+
conversation = Conversation.new(item)
|
441
|
+
end
|
442
|
+
rescue StandardError => e
|
443
|
+
print "Could not fetch conversation with id #{conversationId}: " + e.message
|
444
|
+
end
|
445
|
+
end
|
446
|
+
|
447
|
+
|
448
|
+
# List Conversations
|
449
|
+
# http://developer.helpscout.net/conversations/
|
450
|
+
#
|
451
|
+
# Fetches conversations in a mailbox with a given status
|
452
|
+
#
|
453
|
+
# mailboxId Int id of the Mailbox being requested
|
454
|
+
# status String Filter by conversation status
|
455
|
+
# limit Int This function will page through
|
456
|
+
# CollectionsEnvelopes until all items are
|
457
|
+
# returned, unless a limit is specified.
|
458
|
+
# modifiedSince DateTime Returns conversations that have been modified
|
459
|
+
# since the given date/time.
|
460
|
+
#
|
461
|
+
# Possible values for status include:
|
462
|
+
# * CONVERSATION_FILTER_STATUS_ALL (Default)
|
463
|
+
# * CONVERSATION_FILTER_STATUS_ACTIVE
|
464
|
+
# * CONVERSATION_FILTER_STATUS_PENDING
|
465
|
+
#
|
466
|
+
# Request
|
467
|
+
# REST Method: GET
|
468
|
+
# URL: https://api.helpscout.net/v1/mailboxes/{mailboxId}/conversations.json
|
469
|
+
#
|
470
|
+
# Parameters:
|
471
|
+
# Name Type Required Default Notes
|
472
|
+
# page Int No 1
|
473
|
+
# status String No all Active/Pending only applies
|
474
|
+
# to the following folders:
|
475
|
+
# Unassigned
|
476
|
+
# My Tickets
|
477
|
+
# Drafts
|
478
|
+
# Assigned
|
479
|
+
# modifiedSince DateTime No Returns conversations that
|
480
|
+
# have been modified since the
|
481
|
+
# given date/time.
|
482
|
+
#
|
483
|
+
# Response
|
484
|
+
# Name Type
|
485
|
+
# items Array Collection of Conversation objects. Conversation threads
|
486
|
+
# are not returned on this call. To get the conversation
|
487
|
+
# threads, you need to retrieve the full conversation object
|
488
|
+
# via the Get Conversation call.
|
489
|
+
|
490
|
+
CONVERSATION_FILTER_STATUS_ACTIVE = "active"
|
491
|
+
CONVERSATION_FILTER_STATUS_ALL = "all"
|
492
|
+
CONVERSATION_FILTER_STATUS_PENDING = "pending"
|
493
|
+
|
494
|
+
def conversations(mailboxId, status, limit=0, modifiedSince)
|
495
|
+
url = "/mailboxes/#{mailboxId}/conversations.json"
|
496
|
+
|
497
|
+
page = 1
|
498
|
+
options = {}
|
499
|
+
|
500
|
+
if limit < 0
|
501
|
+
limit = 0
|
502
|
+
end
|
503
|
+
|
504
|
+
if status && (status == CONVERSATION_FILTER_STATUS_ACTIVE || status == CONVERSATION_FILTER_STATUS_ALL || status == CONVERSATION_FILTER_STATUS_PENDING)
|
505
|
+
options["status"] = status
|
506
|
+
end
|
507
|
+
|
508
|
+
if modifiedSince
|
509
|
+
options["modifiedSince"] = modifiedSince
|
510
|
+
end
|
511
|
+
|
512
|
+
conversations = []
|
513
|
+
|
514
|
+
begin
|
515
|
+
options["page"] = page
|
516
|
+
items = Client.requestItems(@auth, url, options)
|
517
|
+
items.each do |item|
|
518
|
+
conversations << Conversation.new(item)
|
519
|
+
end
|
520
|
+
page = page + 1
|
521
|
+
rescue StandardError => e
|
522
|
+
print "List Conversations Request failed: " + e.message
|
523
|
+
end while items && items.count > 0 && (limit == 0 || conversations.count < limit)
|
524
|
+
|
525
|
+
if limit > 0 && conversations.count > limit
|
526
|
+
conversations = conversations[0..limit-1]
|
527
|
+
end
|
528
|
+
|
529
|
+
conversations
|
530
|
+
end
|
531
|
+
|
532
|
+
|
533
|
+
# List Conversations in Folder
|
534
|
+
# http://developer.helpscout.net/conversations/
|
535
|
+
#
|
536
|
+
# Return conversations in a specific folder of a mailbox.
|
537
|
+
#
|
538
|
+
# mailboxId Int id of the Mailbox being requested
|
539
|
+
# folderId Int id of the Folder being requested
|
540
|
+
# status String Filter by conversation status
|
541
|
+
# limit Int This function will page through
|
542
|
+
# CollectionsEnvelopes until all items are
|
543
|
+
# returned, unless a limit is specified.
|
544
|
+
# modifiedSince DateTime Returns conversations that have been modified
|
545
|
+
# since the given date/time.
|
546
|
+
#
|
547
|
+
# Possible values for status include:
|
548
|
+
# * CONVERSATION_FILTER_STATUS_ALL (Default)
|
549
|
+
# * CONVERSATION_FILTER_STATUS_ACTIVE
|
550
|
+
# * CONVERSATION_FILTER_STATUS_PENDING
|
551
|
+
#
|
552
|
+
# Request
|
553
|
+
# REST Method: GET
|
554
|
+
# URL: https://api.helpscout.net/v1/mailboxes/{mailboxId}/folders/{folderId}/conversations.json
|
555
|
+
#
|
556
|
+
# Parameters:
|
557
|
+
# Name Type Required Default Notes
|
558
|
+
# page Int No 1
|
559
|
+
# status String No all Active/Pending only applies
|
560
|
+
# to the following folders:
|
561
|
+
# Unassigned
|
562
|
+
# My Tickets
|
563
|
+
# Drafts
|
564
|
+
# Assigned
|
565
|
+
# modifiedSince DateTime No Returns conversations that
|
566
|
+
# have been modified since the
|
567
|
+
# given date/time.
|
568
|
+
#
|
569
|
+
# Response
|
570
|
+
# Name Type
|
571
|
+
# items Array Collection of Conversation objects. Conversation threads
|
572
|
+
# are not returned on this call. To get the conversation
|
573
|
+
# threads, you need to retrieve the full conversation object
|
574
|
+
# via the Get Conversation call.
|
575
|
+
|
576
|
+
def conversationsInFolder(mailboxId, folderId, status, limit=0, modifiedSince)
|
577
|
+
url = "/mailboxes/#{mailboxId}/folders/#{folderId}/conversations.json"
|
578
|
+
|
579
|
+
page = 1
|
580
|
+
options = {}
|
581
|
+
|
582
|
+
if limit < 0
|
583
|
+
limit = 0
|
584
|
+
end
|
585
|
+
|
586
|
+
if status && (status == CONVERSATION_FILTER_STATUS_ACTIVE || status == CONVERSATION_FILTER_STATUS_ALL || status == CONVERSATION_FILTER_STATUS_PENDING)
|
587
|
+
options["status"] = status
|
588
|
+
end
|
589
|
+
|
590
|
+
if modifiedSince
|
591
|
+
options["modifiedSince"] = modifiedSince
|
592
|
+
end
|
593
|
+
|
594
|
+
conversations = []
|
595
|
+
|
596
|
+
begin
|
597
|
+
options["page"] = page
|
598
|
+
items = Client.requestItems(@auth, url, options)
|
599
|
+
items.each do |item|
|
600
|
+
conversations << Conversation.new(item)
|
601
|
+
end
|
602
|
+
page = page + 1
|
603
|
+
rescue StandardError => e
|
604
|
+
print "List Conversations In Folder Request failed: " + e.message
|
605
|
+
end while items && items.count > 0 && (limit == 0 || conversations.count < limit)
|
606
|
+
|
607
|
+
if limit > 0 && conversations.count > limit
|
608
|
+
conversations = conversations[0..limit-1]
|
609
|
+
end
|
610
|
+
|
611
|
+
conversations
|
612
|
+
end
|
613
|
+
|
614
|
+
|
615
|
+
# Conversation Count
|
616
|
+
# http://developer.helpscout.net/conversations/
|
617
|
+
#
|
618
|
+
# Returns a count for conversations in a mailbox with a given status
|
619
|
+
#
|
620
|
+
# mailboxId Int id of the Mailbox being requested
|
621
|
+
# status String Filter by conversation status
|
622
|
+
# modifiedSince DateTime id of the Mailbox being requested
|
623
|
+
#
|
624
|
+
# Possible values for status include:
|
625
|
+
# * CONVERSATION_FILTER_STATUS_ALL (Default)
|
626
|
+
# * CONVERSATION_FILTER_STATUS_ACTIVE
|
627
|
+
# * CONVERSATION_FILTER_STATUS_PENDING
|
628
|
+
#
|
629
|
+
# Request
|
630
|
+
# REST Method: GET
|
631
|
+
# URL: https://api.helpscout.net/v1/mailboxes/{mailboxId}/conversations.json
|
632
|
+
#
|
633
|
+
# Parameters:
|
634
|
+
# Name Type Required Default Notes
|
635
|
+
# page Int No 1
|
636
|
+
# status String No all Active/Pending only applies
|
637
|
+
# to the following folders:
|
638
|
+
# Unassigned
|
639
|
+
# My Tickets
|
640
|
+
# Drafts
|
641
|
+
# Assigned
|
642
|
+
# modifiedSince DateTime No Returns conversations that
|
643
|
+
# have been modified since the
|
644
|
+
# given date/time.
|
645
|
+
#
|
646
|
+
# Response
|
647
|
+
# Name Type
|
648
|
+
# count Integer Count of Conversation objects.
|
649
|
+
|
650
|
+
def conversationCount(mailboxId, status, modifiedSince)
|
651
|
+
url = "/mailboxes/#{mailboxId}/conversations.json"
|
652
|
+
|
653
|
+
page = 1
|
654
|
+
options = {}
|
655
|
+
|
656
|
+
if status && (status == CONVERSATION_FILTER_STATUS_ACTIVE || status == CONVERSATION_FILTER_STATUS_ALL || status == CONVERSATION_FILTER_STATUS_PENDING)
|
657
|
+
options["status"] = status
|
658
|
+
end
|
659
|
+
|
660
|
+
if modifiedSince
|
661
|
+
options["modifiedSince"] = modifiedSince
|
662
|
+
end
|
663
|
+
|
664
|
+
conversations = []
|
665
|
+
|
666
|
+
begin
|
667
|
+
options["page"] = page
|
668
|
+
count = Client.requestCount(@auth, url, options)
|
669
|
+
rescue StandardError => e
|
670
|
+
print "Conversation Count Request failed: " + e.message
|
671
|
+
end
|
672
|
+
end
|
673
|
+
|
674
|
+
|
675
|
+
# Get Attachment Data
|
676
|
+
# http://developer.helpscout.net/conversations/
|
677
|
+
#
|
678
|
+
# Fetches the AttachmentData from a given Attachment
|
679
|
+
#
|
680
|
+
# attachmentId Int id of the Attachment being requested
|
681
|
+
#
|
682
|
+
# Request
|
683
|
+
# REST Method: GET
|
684
|
+
# URL: https://api.helpscout.net/v1/attachments/{id}/data.json
|
685
|
+
#
|
686
|
+
# Response
|
687
|
+
# Name Type
|
688
|
+
# item Conversation::AttachmentData
|
689
|
+
|
690
|
+
def attachmentData(attachmentId)
|
691
|
+
url = "/attachments/#{attachmentId}/data.json"
|
692
|
+
item = Client.requestItem(@auth, url, nil)
|
693
|
+
attachmentData = nil
|
694
|
+
if item
|
695
|
+
attachmentData = Conversation::AttachmentData.new(item)
|
696
|
+
end
|
697
|
+
|
698
|
+
attachmentData
|
699
|
+
end
|
700
|
+
|
701
|
+
|
702
|
+
# Get Customer
|
703
|
+
# http://developer.helpscout.net/customers/
|
704
|
+
#
|
705
|
+
# Fetches a single Customer
|
706
|
+
#
|
707
|
+
# customerId Int id of the Customer being requested
|
708
|
+
#
|
709
|
+
# Request
|
710
|
+
# REST Method: GET
|
711
|
+
# URL: https://api.helpscout.net/v1/customers/{id}.json
|
712
|
+
#
|
713
|
+
# Response
|
714
|
+
# Name Type
|
715
|
+
# item Customer
|
716
|
+
|
717
|
+
def customer(customerId)
|
718
|
+
url = "/customers/#{customerId}.json"
|
719
|
+
item = Client.requestItem(@auth, url, nil)
|
720
|
+
customer = nil
|
721
|
+
if item
|
722
|
+
customer = Customer.new(item)
|
723
|
+
end
|
724
|
+
|
725
|
+
customer
|
726
|
+
end
|
727
|
+
|
728
|
+
|
729
|
+
# List Customers
|
730
|
+
# http://developer.helpscout.net/customers/
|
731
|
+
#
|
732
|
+
# Fetches all customers. Customers are returned by createdAt date, from
|
733
|
+
# newest to oldest.
|
734
|
+
#
|
735
|
+
# Request
|
736
|
+
# REST Method: GET
|
737
|
+
# URL: https://api.helpscout.net/v1/customers.json
|
738
|
+
#
|
739
|
+
# Parameters:
|
740
|
+
# Name Type Required Default Notes
|
741
|
+
# page Int No 1
|
742
|
+
#
|
743
|
+
# Response
|
744
|
+
# Name Type
|
745
|
+
# items Array Collection of Customer objects.
|
746
|
+
|
747
|
+
def customers
|
748
|
+
url = "/customers.json"
|
749
|
+
items = Client.requestItems(@auth, url, :page => 1)
|
750
|
+
customers = []
|
751
|
+
items.each do |item|
|
752
|
+
customers << Customer.new(item)
|
753
|
+
end
|
754
|
+
|
755
|
+
customers
|
756
|
+
end
|
757
|
+
end
|
758
|
+
end
|