intercom 3.5.10 → 3.9.5
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 +5 -5
- data/.circleci/config.yml +35 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +5 -0
- data/Gemfile +1 -4
- data/README.md +152 -83
- data/RELEASING.md +9 -0
- data/changes.txt +116 -0
- data/intercom.gemspec +1 -2
- data/lib/intercom.rb +4 -0
- data/lib/intercom/api_operations/{delete.rb → archive.rb} +4 -2
- data/lib/intercom/api_operations/find_all.rb +1 -1
- data/lib/intercom/api_operations/request_hard_delete.rb +12 -0
- data/lib/intercom/api_operations/search.rb +17 -0
- data/lib/intercom/client.rb +42 -5
- data/lib/intercom/customer.rb +10 -0
- data/lib/intercom/errors.rb +41 -4
- data/lib/intercom/request.rb +144 -81
- data/lib/intercom/search_collection_proxy.rb +82 -0
- data/lib/intercom/service/base_service.rb +6 -0
- data/lib/intercom/service/company.rb +14 -2
- data/lib/intercom/service/contact.rb +4 -2
- data/lib/intercom/service/conversation.rb +12 -0
- data/lib/intercom/service/customer.rb +14 -0
- data/lib/intercom/service/event.rb +12 -0
- data/lib/intercom/service/subscription.rb +2 -2
- data/lib/intercom/service/tag.rb +1 -1
- data/lib/intercom/service/team.rb +17 -0
- data/lib/intercom/service/user.rb +4 -2
- data/lib/intercom/service/visitor.rb +2 -2
- data/lib/intercom/team.rb +7 -0
- data/lib/intercom/traits/api_resource.rb +4 -9
- data/lib/intercom/version.rb +1 -1
- data/spec/spec_helper.rb +124 -2
- data/spec/unit/intercom/client_collection_proxy_spec.rb +5 -5
- data/spec/unit/intercom/client_spec.rb +69 -1
- data/spec/unit/intercom/company_spec.rb +20 -16
- data/spec/unit/intercom/contact_spec.rb +6 -0
- data/spec/unit/intercom/conversation_spec.rb +15 -0
- data/spec/unit/intercom/event_spec.rb +19 -0
- data/spec/unit/intercom/request_spec.rb +150 -9
- data/spec/unit/intercom/search_collection_proxy_spec.rb +56 -0
- data/spec/unit/intercom/team_spec.rb +21 -0
- data/spec/unit/intercom/traits/api_resource_spec.rb +34 -7
- data/spec/unit/intercom/user_spec.rb +15 -3
- metadata +33 -22
- data/.travis.yml +0 -6
- data/lib/intercom/extended_api_operations/users.rb +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 204538ee7ce2d0d8b41b4c0b8ff4c6d80084570c410850ba02fc936a14292b8d
|
4
|
+
data.tar.gz: 6704e411dcc92ae860d3d519bdd592e35ac2b931fb20e188b934bb4228232f12
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 496d153506de79e3527db4ba20176dd375a29ad37ab259121030f8b70ab5ba934db19fa917c28755d7205f092df2756f493742f47dbbc1eab895ac8ffa15a330
|
7
|
+
data.tar.gz: 7248e5d8c2734a256c499b3145758965b2efd48b0b531a337e1337553724c40f156263b67f8db5612ed5bc2c92fb6a57b3d3068d2360647e412f8861c1a9f205
|
@@ -0,0 +1,35 @@
|
|
1
|
+
version: 2
|
2
|
+
jobs:
|
3
|
+
"Test against Ruby 2.4":
|
4
|
+
docker:
|
5
|
+
- image: circleci/ruby:2.4.9
|
6
|
+
working_directory: ~/intercom-ruby
|
7
|
+
steps:
|
8
|
+
- checkout
|
9
|
+
- run: bundle install
|
10
|
+
- run: bundle exec rake
|
11
|
+
"Test against Ruby 2.5":
|
12
|
+
docker:
|
13
|
+
- image: circleci/ruby:2.5.7
|
14
|
+
working_directory: ~/intercom-ruby
|
15
|
+
steps:
|
16
|
+
- checkout
|
17
|
+
- run: bundle install
|
18
|
+
- run: bundle exec rake
|
19
|
+
"Test against Ruby 2.6":
|
20
|
+
docker:
|
21
|
+
- image: circleci/ruby:2.6.5
|
22
|
+
working_directory: ~/intercom-ruby
|
23
|
+
steps:
|
24
|
+
- checkout
|
25
|
+
- run: bundle install
|
26
|
+
- run: bundle exec rake
|
27
|
+
|
28
|
+
workflows:
|
29
|
+
version: 2
|
30
|
+
build_and_test:
|
31
|
+
jobs:
|
32
|
+
- "Test against Ruby 2.4"
|
33
|
+
- "Test against Ruby 2.5"
|
34
|
+
- "Test against Ruby 2.6"
|
35
|
+
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -18,23 +18,29 @@ This version of the gem is compatible with `Ruby 2.1` and above.
|
|
18
18
|
|
19
19
|
## Installation
|
20
20
|
|
21
|
+
|
21
22
|
gem install intercom
|
22
23
|
|
23
24
|
Using bundler:
|
24
25
|
|
25
|
-
gem 'intercom', '~> 3.
|
26
|
+
gem 'intercom', '~> 3.9.4'
|
26
27
|
|
27
28
|
## Basic Usage
|
28
29
|
|
29
30
|
### Configure your client
|
30
31
|
|
31
|
-
> If you already have a personal access token you can find it [here](https://app.intercom.io/a/apps/_/
|
32
|
+
> If you already have a personal access token you can find it [here](https://app.intercom.io/a/apps/_/developer-hub/). If you want to create or learn more about personal access tokens then you can find more info [here](https://developers.intercom.io/docs/personal-access-tokens).
|
32
33
|
|
33
34
|
```ruby
|
34
35
|
# With an OAuth or Personal Access token:
|
35
36
|
intercom = Intercom::Client.new(token: 'my_token')
|
36
37
|
```
|
37
38
|
|
39
|
+
```ruby
|
40
|
+
# With a versioned app:
|
41
|
+
intercom = Intercom::Client.new(token: 'my_token', api_version: '1.0')
|
42
|
+
```
|
43
|
+
|
38
44
|
If you are building a third party application you can get your access_tokens by [setting-up-oauth](https://developers.intercom.io/page/setting-up-oauth) for Intercom.
|
39
45
|
You can also use the [omniauth-intercom lib](https://github.com/intercom/omniauth-intercom) which is a middleware helping you to handle the authentication process with Intercom.
|
40
46
|
|
@@ -43,6 +49,7 @@ You can also use the [omniauth-intercom lib](https://github.com/intercom/omniaut
|
|
43
49
|
Resources this API supports:
|
44
50
|
|
45
51
|
https://api.intercom.io/users
|
52
|
+
https://api.intercom.io/teams
|
46
53
|
https://api.intercom.io/contacts
|
47
54
|
https://api.intercom.io/companies
|
48
55
|
https://api.intercom.io/counts
|
@@ -54,7 +61,6 @@ Resources this API supports:
|
|
54
61
|
https://api.intercom.io/messages
|
55
62
|
https://api.intercom.io/subscriptions
|
56
63
|
https://api.intercom.io/jobs
|
57
|
-
https://api.intercom.io/bulk
|
58
64
|
|
59
65
|
### Examples
|
60
66
|
|
@@ -69,9 +75,13 @@ user = intercom.users.find(user_id: "1")
|
|
69
75
|
user = intercom.users.find(id: "1")
|
70
76
|
# Create a user
|
71
77
|
user = intercom.users.create(email: "bob@example.com", name: "Bob Smith", signed_up_at: Time.now.to_i)
|
72
|
-
#
|
78
|
+
# archive a user
|
73
79
|
user = intercom.users.find(id: "1")
|
74
|
-
|
80
|
+
archived_user = intercom.users.archive(user)
|
81
|
+
# request a hard delete for a user
|
82
|
+
(https://developers.intercom.com/intercom-api-reference/reference#delete-users)
|
83
|
+
user = intercom.users.find(id: "1")
|
84
|
+
deleted_user = intercom.users.request_hard_delete(user)
|
75
85
|
# Update custom_attributes for a user
|
76
86
|
user.custom_attributes["average_monthly_spend"] = 1234.56
|
77
87
|
intercom.users.save(user)
|
@@ -88,6 +98,14 @@ intercom.users.all.map {|user| user.email }
|
|
88
98
|
intercom.users.find_all(type: 'users', page: 1, per_page: 10, created_since: 2, order: :asc).to_a.each_with_index {|usr, i| puts "#{i+1}: #{usr.name}"};
|
89
99
|
# Paginate through your list of users choosing how many to return per page (default and max is 50 per page)
|
90
100
|
intercom.users.find_all(type: 'users', page: 1, per_page: 10, order: :asc).to_a.each_with_index {|usr, i| puts "#{i+1}: #{usr.name}"}
|
101
|
+
|
102
|
+
# Duplicate users? If you have duplicate users you can search for them via their email address.
|
103
|
+
# Note this feature is only available from version 1.1 of the API so you will need to switch to that version
|
104
|
+
# This will return multiple users if they have the same email address
|
105
|
+
usrs = intercom.users.find_all(type: 'users', email: 'myemail@example.com', page: 1, per_page: 10, order: :asc)
|
106
|
+
# This returns a user.list so you can access it via
|
107
|
+
usrs.to_a.each_with_index {|usr, i| puts "#{i+1}: #{usr.id}"};
|
108
|
+
|
91
109
|
# If you have over 10,000 users then you will need to use the scroll function to list your users
|
92
110
|
# otherwise you will encounter a page limit with list all your users
|
93
111
|
# You can use the scroll method to list all your users
|
@@ -100,16 +118,6 @@ result = intercom.users.scroll.next
|
|
100
118
|
result.scroll_param
|
101
119
|
=> "0730e341-63ef-44da-ab9c-9113f886326d"
|
102
120
|
result = intercom.users.scroll.next("0730e341-63ef-44da-ab9c-9113f886326d");
|
103
|
-
|
104
|
-
#Bulk operations.
|
105
|
-
# Submit bulk job to create users. If any of the items in create_items match an existing user that user will be updated
|
106
|
-
intercom.users.submit_bulk_job(create_items: [{user_id: "25", email: "alice@example.com"}, {user_id: "25", email: "bob@example.com"}])
|
107
|
-
# Submit bulk job to create users with companies. Companies must be sent as an array of objects nested within each applicable user object
|
108
|
-
intercom.users.submit_bulk_job(create_items: [{user_id: "25", email: "alice@example.com", companies: [{company_id: 9, name: "Test Company"}]}])
|
109
|
-
# Submit bulk job, to delete users
|
110
|
-
intercom.users.submit_bulk_job(delete_items: [{user_id: "25", email: "alice@example.com"}, {user_id: "25", email: "bob@example.com"}])
|
111
|
-
# Submit bulk job, to add items to existing job
|
112
|
-
intercom.users.submit_bulk_job(create_items: [{user_id: "25", email: "alice@example.com"}], delete_items: [{user_id: "25", email: "bob@example.com"}], job_id:'job_abcd1234')
|
113
121
|
```
|
114
122
|
|
115
123
|
#### Admins
|
@@ -122,6 +130,14 @@ intercom.admins.find(id: admin_id)
|
|
122
130
|
intercom.admins.all.each {|admin| puts admin.email }
|
123
131
|
```
|
124
132
|
|
133
|
+
#### Teams
|
134
|
+
```ruby
|
135
|
+
# Find a team by id
|
136
|
+
intercom.teams.find(id: team_id)
|
137
|
+
# Iterate over all teams
|
138
|
+
intercom.teams.all.each {|team| puts team.name }
|
139
|
+
```
|
140
|
+
|
125
141
|
#### Companies
|
126
142
|
```ruby
|
127
143
|
# Add a user to one or more companies
|
@@ -143,8 +159,13 @@ intercom.companies.save(company)
|
|
143
159
|
# Iterate over all companies
|
144
160
|
intercom.companies.all.each {|company| puts %Q(#{company.name} - #{company.custom_attributes["referral_source"]}) }
|
145
161
|
intercom.companies.all.map {|company| company.name }
|
146
|
-
# Get a list of users in a company
|
147
|
-
intercom.companies.
|
162
|
+
# Get a list of users in a company by Intercom Company ID
|
163
|
+
intercom.companies.users_by_intercom_company_id(company.id)
|
164
|
+
# Get a list of users in a company by external company_id
|
165
|
+
intercom.companies.users_by_company_id(company.company_id)
|
166
|
+
# Get a large list of companies using scroll
|
167
|
+
intercom.companies.scroll.each { |comp| puts comp.name}
|
168
|
+
# Please see users scroll for more details of how to use scroll
|
148
169
|
```
|
149
170
|
|
150
171
|
#### Tags
|
@@ -157,7 +178,7 @@ intercom.tags.untag(name: 'blue', users: [{user_id: "42ea2f1b93891f6a99000427"}
|
|
157
178
|
intercom.tags.all.each {|tag| "#{tag.id} - #{tag.name}" }
|
158
179
|
intercom.tags.all.map {|tag| tag.name }
|
159
180
|
# Tag companies
|
160
|
-
tag = intercom.tags.tag(name: 'blue', companies: [{
|
181
|
+
tag = intercom.tags.tag(name: 'blue', companies: [{company_id: "42ea2f1b93891f6a99000427"}])
|
161
182
|
```
|
162
183
|
|
163
184
|
#### Segments
|
@@ -182,6 +203,9 @@ intercom.notes.find_all(user_id: '123').each {|note| puts note.body}
|
|
182
203
|
|
183
204
|
#### Conversations
|
184
205
|
```ruby
|
206
|
+
# Iterate over all conversations for your app
|
207
|
+
intercom.conversations.all.each { |convo| ... }
|
208
|
+
|
185
209
|
# FINDING CONVERSATIONS FOR AN ADMIN
|
186
210
|
# Iterate over all conversations (open and closed) assigned to an admin
|
187
211
|
intercom.conversations.find_all(type: 'admin', id: '7').each {|convo| ... }
|
@@ -189,7 +213,7 @@ intercom.conversations.find_all(type: 'admin', id: '7').each {|convo| ... }
|
|
189
213
|
intercom.conversations.find_all(type: 'admin', id: 7, open: true).each {|convo| ... }
|
190
214
|
# Iterate over closed conversations assigned to an admin
|
191
215
|
intercom.conversations.find_all(type: 'admin', id: 7, open: false).each {|convo| ... }
|
192
|
-
# Iterate over closed conversations
|
216
|
+
# Iterate over closed conversations which are assigned to an admin, and where updated_at is before a certain moment in time
|
193
217
|
intercom.conversations.find_all(type: 'admin', id: 7, open: false, before: 1374844930).each {|convo| ... }
|
194
218
|
|
195
219
|
# FINDING CONVERSATIONS FOR A USER
|
@@ -199,6 +223,11 @@ intercom.conversations.find_all(email: 'joe@example.com', type: 'user').each {|c
|
|
199
223
|
intercom.conversations.find_all(email: 'joe@example.com', type: 'user', unread: false).each {|convo| ... }
|
200
224
|
# Iterate over all unread conversations with a user based on the users email
|
201
225
|
intercom.conversations.find_all(email: 'joe@example.com', type: 'user', unread: true).each {|convo| ... }
|
226
|
+
# Iterate over all conversations for a user with their Intercom user ID
|
227
|
+
intercom.conversations.find_all(intercom_user_id: '536e564f316c83104c000020', type: 'user').each {|convo| ... }
|
228
|
+
# Iterate over all conversations for a lead
|
229
|
+
# NOTE: to iterate over a lead's conversations you MUST use their Intercom User ID and type User
|
230
|
+
intercom.conversations.find_all(intercom_user_id: lead.id, type: 'user').each {|convo| ... }
|
202
231
|
|
203
232
|
# FINDING A SINGLE CONVERSATION
|
204
233
|
conversation = intercom.conversations.find(id: '1')
|
@@ -219,6 +248,9 @@ intercom.conversations.reply(id: conversation.id, type: 'admin', admin_id: '123'
|
|
219
248
|
# User (identified by email) replies with a comment and attachment
|
220
249
|
intercom.conversations.reply(id: conversation.id, type: 'user', email: 'joe@example.com', message_type: 'comment', body: 'foo', attachment_urls: ['http://www.example.com/attachment.jpg'])
|
221
250
|
|
251
|
+
#reply to a user's last conversation
|
252
|
+
intercom.conversations.reply_to_last(type: 'user', body: 'Thanks again', message_type: 'comment', user_id: '12345', admin_id: '123')
|
253
|
+
|
222
254
|
# Open
|
223
255
|
intercom.conversations.open(id: conversation.id, admin_id: '123')
|
224
256
|
|
@@ -226,14 +258,25 @@ intercom.conversations.open(id: conversation.id, admin_id: '123')
|
|
226
258
|
intercom.conversations.close(id: conversation.id, admin_id: '123')
|
227
259
|
|
228
260
|
# Assign
|
261
|
+
# Note: Conversations can be assigned to teams. However, the entity that performs the operation of assigning the conversation has to be an existing teammate.
|
262
|
+
# You can use `intercom.admins.all.each {|a| puts a.inspect if a.type == 'admin' }` to list all of your teammates.
|
229
263
|
intercom.conversations.assign(id: conversation.id, admin_id: '123', assignee_id: '124')
|
230
264
|
|
265
|
+
# Snooze
|
266
|
+
intercom.conversations.snooze(id: conversation.id, admin_id: '123', snoozed_until: 9999999999)
|
267
|
+
|
231
268
|
# Reply and Open
|
232
269
|
intercom.conversations.reply(id: conversation.id, type: 'admin', admin_id: '123', message_type: 'open', body: 'bar')
|
233
270
|
|
234
271
|
# Reply and Close
|
235
272
|
intercom.conversations.reply(id: conversation.id, type: 'admin', admin_id: '123', message_type: 'close', body: 'bar')
|
236
273
|
|
274
|
+
# Admin reply to last conversation
|
275
|
+
intercom.conversations.reply_to_last(intercom_user_id: '5678', type: 'admin', admin_id: '123', message_type: 'comment', body: 'bar')
|
276
|
+
|
277
|
+
# User reply to last conversation
|
278
|
+
intercom.conversations.reply_to_last(intercom_user_id: '5678', type: 'user', message_type: 'comment', body: 'bar')
|
279
|
+
|
237
280
|
# ASSIGNING CONVERSATIONS TO ADMINS
|
238
281
|
intercom.conversations.reply(id: conversation.id, type: 'admin', assignee_id: assignee_admin.id, admin_id: admin.id, message_type: 'assignment')
|
239
282
|
|
@@ -327,6 +370,13 @@ intercom.events.create(
|
|
327
370
|
}
|
328
371
|
)
|
329
372
|
|
373
|
+
# Alternatively, use "user_id" in case your app allows multiple accounts having the same email
|
374
|
+
intercom.events.create(
|
375
|
+
event_name: "invited-friend",
|
376
|
+
created_at: Time.now.to_i,
|
377
|
+
user_id: user.uuid,
|
378
|
+
)
|
379
|
+
|
330
380
|
# Retrieve event list for user with id:'123abc'
|
331
381
|
intercom.events.find_all("type" => "user", "intercom_user_id" => "123abc")
|
332
382
|
|
@@ -362,77 +412,73 @@ The metadata key values in the example are treated as follows-
|
|
362
412
|
|
363
413
|
*NB:* This version of the gem reserves the field name `type` in Event data.
|
364
414
|
|
365
|
-
|
366
|
-
```ruby
|
367
|
-
# Submit bulk job, to create events
|
368
|
-
intercom.events.submit_bulk_job(create_items: [
|
369
|
-
{
|
370
|
-
event_name: "ordered-item",
|
371
|
-
created_at: 1438944980,
|
372
|
-
user_id: "314159",
|
373
|
-
metadata: {
|
374
|
-
order_date: 1438944980,
|
375
|
-
stripe_invoice: "inv_3434343434"
|
376
|
-
}
|
377
|
-
},
|
378
|
-
{
|
379
|
-
event_name: "invited-friend",
|
380
|
-
created_at: 1438944979,
|
381
|
-
user_id: "314159",
|
382
|
-
metadata: {
|
383
|
-
invitee_email: "pi@example.org",
|
384
|
-
invite_code: "ADDAFRIEND"
|
385
|
-
}
|
386
|
-
}
|
387
|
-
])
|
388
|
-
|
389
|
-
|
390
|
-
# Submit bulk job, to add items to existing job
|
391
|
-
intercom.events.submit_bulk_job(create_items: [
|
392
|
-
{
|
393
|
-
event_name: "ordered-item",
|
394
|
-
created_at: 1438944980,
|
395
|
-
user_id: "314159",
|
396
|
-
metadata: {
|
397
|
-
order_date: 1438944980,
|
398
|
-
stripe_invoice: "inv_3434343434"
|
399
|
-
}
|
400
|
-
},
|
401
|
-
{
|
402
|
-
event_name: "invited-friend",
|
403
|
-
created_at: 1438944979,
|
404
|
-
user_id: "314159",
|
405
|
-
metadata: {
|
406
|
-
invitee_email: "pi@example.org",
|
407
|
-
invite_code: "ADDAFRIEND"
|
408
|
-
}
|
409
|
-
}
|
410
|
-
], job_id:'job_abcd1234')
|
411
|
-
```
|
412
|
-
|
413
|
-
### Contacts
|
415
|
+
#### Contacts
|
414
416
|
|
415
417
|
`Contacts` represent logged out users of your application.
|
418
|
+
Note that `contacts` are referred to as `leads` in the [Intercom](https://developers.intercom.com/intercom-api-reference/reference#leads)
|
416
419
|
|
417
420
|
```ruby
|
418
421
|
# Create a contact
|
419
422
|
contact = intercom.contacts.create(email: "some_contact@example.com")
|
420
423
|
|
421
|
-
# Update a contact
|
424
|
+
# Update a contact (via create method)
|
425
|
+
# You can update a contact by calling the create method but you MUST provide an id or user_id
|
426
|
+
# If you just provide an email, for example, it will create a new contact
|
427
|
+
# See https://developers.intercom.com/intercom-api-reference/reference#update-lead for more detail
|
428
|
+
contact = intercom.contacts.create(email: "some_contact@example.com", id: "3be0398668071a6bc6850413", name:"update_contact")
|
429
|
+
|
430
|
+
# Update a contact (via contact object)
|
422
431
|
contact.custom_attributes['foo'] = 'bar'
|
423
432
|
intercom.contacts.save(contact)
|
424
433
|
|
425
434
|
# Find contacts by email
|
426
435
|
contacts = intercom.contacts.find_all(email: "some_contact@example.com")
|
427
436
|
|
437
|
+
# Using find to search for contacts by email
|
438
|
+
contact_list = intercom.contacts.find(email: "some_contact@example.com")
|
439
|
+
# This returns a Contact object with type contact.list
|
440
|
+
# Note: Multiple contacts can be returned in this list if there are multiple matching contacts found
|
441
|
+
# #<Intercom::Contact:0x00007ff3a80789f8
|
442
|
+
# @changed_fields=#<Set: {}>,
|
443
|
+
# @contacts=
|
444
|
+
# [{"type"=>"contact",
|
445
|
+
# "id"=>"5b7fd9b683681ac52274b9c7",
|
446
|
+
# "user_id"=>"05bc4d17-72cc-433e-88ae-0bf88db5d0e6",
|
447
|
+
# "anonymous"=>true,
|
448
|
+
# "email"=>"some_contact@example.com",
|
449
|
+
# ...}],
|
450
|
+
# @custom_attributes={},
|
451
|
+
# @limited=false,
|
452
|
+
# @pages=#<Intercom::Pages:0x00007ff3a7413c58 @changed_fields=#<Set: {}>, @next=nil, @page=1, @per_page=50, @total_pages=1, @type="pages">,
|
453
|
+
# @total_count=1,
|
454
|
+
# @type="contact.list">
|
455
|
+
# Access the contact's data
|
456
|
+
contact_list.contacts.first
|
457
|
+
|
428
458
|
# Convert a contact into a user
|
429
|
-
intercom.contacts.
|
459
|
+
contact = intercom.contacts.find(id: "536e564f316c83104c000020")
|
460
|
+
intercom.contacts.convert(contact, Intercom::User.new(email: email))
|
461
|
+
# Using find with email will not work here. See https://github.com/intercom/intercom-ruby/issues/419 for more information
|
462
|
+
|
463
|
+
# archive a contact
|
464
|
+
intercom.contacts.archive(contact)
|
430
465
|
|
431
|
-
#
|
432
|
-
intercom.contacts.
|
466
|
+
# Get a large list of contacts using scroll
|
467
|
+
intercom.contacts.scroll.each { |lead| puts lead.id}
|
468
|
+
# Please see users scroll for more details of how to use scroll
|
433
469
|
```
|
434
470
|
|
435
|
-
|
471
|
+
#### Customers
|
472
|
+
|
473
|
+
Our Customer API is a central place for all the information on your customers, whether they're users or leads. More detail in our API documentation on [Customers](https://developers.intercom.com/intercom-api-reference/v0/reference#customers).
|
474
|
+
|
475
|
+
```ruby
|
476
|
+
# Search for customers
|
477
|
+
customers = intercom.customers.search(query: { "field": "name", "operator": "=", "value": "Alice"}, per_page: 50, sort_field: "name", sort_order: "ascending")
|
478
|
+
customers.each { |customer| p customer.name }
|
479
|
+
```
|
480
|
+
|
481
|
+
#### Counts
|
436
482
|
|
437
483
|
```ruby
|
438
484
|
# App-wide counts
|
@@ -442,7 +488,7 @@ intercom.counts.for_app
|
|
442
488
|
intercom.counts.for_type(type: 'user', count: 'segment')
|
443
489
|
```
|
444
490
|
|
445
|
-
|
491
|
+
#### Subscriptions
|
446
492
|
|
447
493
|
Subscribe to events in Intercom to receive webhooks.
|
448
494
|
|
@@ -453,18 +499,13 @@ intercom.subscriptions.create(url: "http://example.com", topics: ["user.created"
|
|
453
499
|
# fetch a subscription
|
454
500
|
intercom.subscriptions.find(id: "nsub_123456789")
|
455
501
|
|
502
|
+
# delete a subscription
|
503
|
+
subscription = intercom.subscriptions.find(id: "nsub_123456789")
|
504
|
+
intercom.subscriptions.delete(subscription)
|
505
|
+
|
456
506
|
# list subscriptions
|
457
507
|
intercom.subscriptions.all
|
458
508
|
```
|
459
|
-
### Bulk jobs
|
460
|
-
|
461
|
-
```ruby
|
462
|
-
# fetch a job
|
463
|
-
intercom.jobs.find(id: 'job_abcd1234')
|
464
|
-
|
465
|
-
# fetch a job's error feed
|
466
|
-
intercom.jobs.errors(id: 'job_abcd1234')
|
467
|
-
```
|
468
509
|
|
469
510
|
### Errors
|
470
511
|
|
@@ -480,6 +521,7 @@ Intercom::ServerError
|
|
480
521
|
Intercom::ServiceUnavailableError
|
481
522
|
Intercom::ServiceConnectionError
|
482
523
|
Intercom::ResourceNotFound
|
524
|
+
Intercom::BlockedUserError
|
483
525
|
Intercom::BadRequestError
|
484
526
|
Intercom::RateLimitExceeded
|
485
527
|
Intercom::AttributeNotSetError # Raised when you try to call a getter that does not exist on an object
|
@@ -496,6 +538,12 @@ intercom.rate_limit_details
|
|
496
538
|
#=> {:limit=>180, :remaining=>179, :reset_at=>2014-10-07 14:58:00 +0100}
|
497
539
|
```
|
498
540
|
|
541
|
+
You can handle the rate limits yourself but a simple option is to use the handle_rate_limit flag.
|
542
|
+
This will automatically catch the 429 rate limit exceeded error and wait until the reset time to retry. After three retries a rate limit exception will be raised. Encountering this error frequently may require a revisiting of your usage of the API.
|
543
|
+
|
544
|
+
```
|
545
|
+
intercom = Intercom::Client.new(token: ENV['AT'], handle_rate_limit: true)
|
546
|
+
```
|
499
547
|
|
500
548
|
### Pull Requests
|
501
549
|
|
@@ -512,3 +560,24 @@ intercom.rate_limit_details
|
|
512
560
|
- **Send coherent history**. Make sure each individual commit in your pull
|
513
561
|
request is meaningful. If you had to make multiple intermediate commits while
|
514
562
|
developing, please squash them before sending them to us.
|
563
|
+
|
564
|
+
### Development
|
565
|
+
|
566
|
+
#### Running tests
|
567
|
+
|
568
|
+
```bash
|
569
|
+
# all tests
|
570
|
+
bundle exec spec
|
571
|
+
|
572
|
+
# unit tests
|
573
|
+
bundle exec spec:unit
|
574
|
+
|
575
|
+
# integration tests
|
576
|
+
bundle exec spec:integration
|
577
|
+
|
578
|
+
# single test file
|
579
|
+
bundle exec m spec/unit/intercom/job_spec.rb
|
580
|
+
|
581
|
+
# single test
|
582
|
+
bundle exec m spec/unit/intercom/job_spec.rb:49
|
583
|
+
```
|