line-bot-api 1.12.0 → 1.16.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 +4 -4
- data/README.md +4 -0
- data/lib/line/bot/api.rb +2 -1
- data/lib/line/bot/api/version.rb +1 -1
- data/lib/line/bot/client.rb +207 -86
- data/lib/line/bot/event.rb +2 -0
- data/lib/line/bot/event/account_link.rb +5 -0
- data/lib/line/bot/event/beacon.rb +6 -0
- data/lib/line/bot/event/follow.rb +4 -0
- data/lib/line/bot/event/join.rb +3 -0
- data/lib/line/bot/event/leave.rb +5 -0
- data/lib/line/bot/event/member_joined.rb +3 -0
- data/lib/line/bot/event/member_left.rb +5 -0
- data/lib/line/bot/event/message.rb +5 -2
- data/lib/line/bot/event/postback.rb +3 -0
- data/lib/line/bot/event/things.rb +7 -2
- data/lib/line/bot/event/unfollow.rb +5 -0
- data/lib/line/bot/event/unsend.rb +27 -0
- data/lib/line/bot/event/video_play_complete.rb +25 -0
- data/lib/line/bot/httpclient.rb +1 -1
- data/line-bot-api.gemspec +2 -2
- metadata +9 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a645b77594506a826cd1009e65bed3f4af60674579d3d23403ca32136cd697f7
|
4
|
+
data.tar.gz: cdeee7ee13ce1c099342573e4514b57e49cb08dd1f8835a609a22c9f8810a52d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f83a596fc0a844e0d4e237e197e00c8afba3c7cfc39f136897b78645cac659b87cd3103c701227ccaeffdac692af2f9a89e9250b3cc3d97c9c460078ae629c42
|
7
|
+
data.tar.gz: 26f4b4ba5a7b23afb4da95bdbf3a3d4b5dd5e31e7ebfe919046944fae1ceed5c3c66e011fe3609bce511ad2523bd2721a78f30afc1a9e3021ac710723b5426ae
|
data/README.md
CHANGED
@@ -13,6 +13,10 @@ See the official API documentation for more information
|
|
13
13
|
- English: https://developers.line.biz/en/docs/messaging-api/overview/
|
14
14
|
- Japanese: https://developers.line.biz/ja/docs/messaging-api/overview/
|
15
15
|
|
16
|
+
Also, generated documentation by YARD is available.
|
17
|
+
|
18
|
+
- https://rubydoc.info/gems/line-bot-api
|
19
|
+
|
16
20
|
## Installation
|
17
21
|
|
18
22
|
Add this line to your application's Gemfile:
|
data/lib/line/bot/api.rb
CHANGED
@@ -18,10 +18,11 @@ module Line
|
|
18
18
|
module Bot
|
19
19
|
module API
|
20
20
|
DEFAULT_ENDPOINT = "https://api.line.me/v2"
|
21
|
+
DEFAULT_BLOB_ENDPOINT = "https://api-data.line.me/v2"
|
21
22
|
|
22
23
|
DEFAULT_HEADERS = {
|
23
24
|
'Content-Type' => 'application/json; charset=UTF-8',
|
24
|
-
'User-Agent' => "LINE-BotSDK-Ruby/#{
|
25
|
+
'User-Agent' => "LINE-BotSDK-Ruby/#{VERSION}"
|
25
26
|
}.freeze
|
26
27
|
end
|
27
28
|
end
|
data/lib/line/bot/api/version.rb
CHANGED
data/lib/line/bot/client.rb
CHANGED
@@ -19,9 +19,16 @@ require 'uri'
|
|
19
19
|
|
20
20
|
module Line
|
21
21
|
module Bot
|
22
|
+
# API Client of LINE Bot SDK Ruby
|
23
|
+
#
|
24
|
+
# @client ||= Line::Bot::Client.new do |config|
|
25
|
+
# config.channel_id = ENV["LINE_CHANNEL_ID"]
|
26
|
+
# config.channel_secret = ENV["LINE_CHANNEL_SECRET"]
|
27
|
+
# config.channel_token = ENV["LINE_CHANNEL_TOKEN"]
|
28
|
+
# end
|
22
29
|
class Client
|
23
30
|
# @return [String]
|
24
|
-
attr_accessor :channel_token, :channel_id, :channel_secret, :endpoint
|
31
|
+
attr_accessor :channel_token, :channel_id, :channel_secret, :endpoint, :blob_endpoint
|
25
32
|
|
26
33
|
# @return [Object]
|
27
34
|
attr_accessor :httpclient
|
@@ -29,10 +36,9 @@ module Line
|
|
29
36
|
# @return [Hash]
|
30
37
|
attr_accessor :http_options
|
31
38
|
|
32
|
-
# Initialize a new
|
39
|
+
# Initialize a new client.
|
33
40
|
#
|
34
41
|
# @param options [Hash]
|
35
|
-
#
|
36
42
|
# @return [Line::Bot::Client]
|
37
43
|
def initialize(options = {})
|
38
44
|
options.each do |key, value|
|
@@ -42,11 +48,22 @@ module Line
|
|
42
48
|
end
|
43
49
|
|
44
50
|
def httpclient
|
45
|
-
@httpclient ||=
|
51
|
+
@httpclient ||= HTTPClient.new(http_options)
|
46
52
|
end
|
47
53
|
|
48
54
|
def endpoint
|
49
|
-
@endpoint ||=
|
55
|
+
@endpoint ||= API::DEFAULT_ENDPOINT
|
56
|
+
end
|
57
|
+
|
58
|
+
def blob_endpoint
|
59
|
+
return @blob_endpoint if @blob_endpoint
|
60
|
+
|
61
|
+
@blob_endpoint = if endpoint == API::DEFAULT_ENDPOINT
|
62
|
+
API::DEFAULT_BLOB_ENDPOINT
|
63
|
+
else
|
64
|
+
# for backward compatible
|
65
|
+
endpoint
|
66
|
+
end
|
50
67
|
end
|
51
68
|
|
52
69
|
# @return [Hash]
|
@@ -72,7 +89,7 @@ module Line
|
|
72
89
|
client_secret: channel_secret
|
73
90
|
)
|
74
91
|
headers = { 'Content-Type' => 'application/x-www-form-urlencoded' }
|
75
|
-
post(endpoint_path, payload, headers)
|
92
|
+
post(endpoint, endpoint_path, payload, headers)
|
76
93
|
end
|
77
94
|
|
78
95
|
# Revoke channel access token
|
@@ -82,30 +99,44 @@ module Line
|
|
82
99
|
endpoint_path = '/oauth/revoke'
|
83
100
|
payload = URI.encode_www_form(access_token: access_token)
|
84
101
|
headers = { 'Content-Type' => 'application/x-www-form-urlencoded' }
|
85
|
-
post(endpoint_path, payload, headers)
|
102
|
+
post(endpoint, endpoint_path, payload, headers)
|
86
103
|
end
|
87
104
|
|
88
|
-
# Push messages to
|
89
|
-
#
|
90
|
-
# @param user_id [String] User's identifiers
|
91
|
-
# @param messages [Hash or Array]
|
105
|
+
# Push messages to a user using user_id.
|
92
106
|
#
|
107
|
+
# @param user_id [String] User Id
|
108
|
+
# @param messages [Hash or Array] Message Objects
|
109
|
+
# @param headers [Hash] HTTP Headers
|
93
110
|
# @return [Net::HTTPResponse]
|
94
|
-
def push_message(user_id, messages)
|
111
|
+
def push_message(user_id, messages, headers: {})
|
95
112
|
channel_token_required
|
96
113
|
|
97
114
|
messages = [messages] if messages.is_a?(Hash)
|
98
115
|
|
99
116
|
endpoint_path = '/bot/message/push'
|
100
117
|
payload = { to: user_id, messages: messages }.to_json
|
101
|
-
post(endpoint_path, payload, credentials)
|
118
|
+
post(endpoint, endpoint_path, payload, credentials.merge(headers))
|
102
119
|
end
|
103
120
|
|
104
|
-
# Reply messages to
|
121
|
+
# Reply messages to a user using replyToken.
|
105
122
|
#
|
106
|
-
# @
|
107
|
-
#
|
123
|
+
# @example Send a balloon to a user.
|
124
|
+
# message = {
|
125
|
+
# type: 'text',
|
126
|
+
# text: 'Hello, World!'
|
127
|
+
# }
|
128
|
+
# client.reply_message(event['replyToken'], message)
|
129
|
+
#
|
130
|
+
# @example Send multiple balloons to a user.
|
108
131
|
#
|
132
|
+
# messages = [
|
133
|
+
# {type: 'text', text: 'Message1'},
|
134
|
+
# {type: 'text', text: 'Message2'}
|
135
|
+
# ]
|
136
|
+
# client.reply_message(event['replyToken'], messages)
|
137
|
+
#
|
138
|
+
# @param token [String] Reply Token
|
139
|
+
# @param messages [Hash or Array] Message Objects
|
109
140
|
# @return [Net::HTTPResponse]
|
110
141
|
def reply_message(token, messages)
|
111
142
|
channel_token_required
|
@@ -114,16 +145,16 @@ module Line
|
|
114
145
|
|
115
146
|
endpoint_path = '/bot/message/reply'
|
116
147
|
payload = { replyToken: token, messages: messages }.to_json
|
117
|
-
post(endpoint_path, payload, credentials)
|
148
|
+
post(endpoint, endpoint_path, payload, credentials)
|
118
149
|
end
|
119
150
|
|
120
|
-
#
|
121
|
-
#
|
122
|
-
# @param to [Array or String]
|
123
|
-
# @param messages [Hash or Array]
|
151
|
+
# Send messages to multiple users using userIds.
|
124
152
|
#
|
153
|
+
# @param to [Array or String] Array of userIds
|
154
|
+
# @param messages [Hash or Array] Message Objects
|
155
|
+
# @param headers [Hash] HTTP Headers
|
125
156
|
# @return [Net::HTTPResponse]
|
126
|
-
def multicast(to, messages)
|
157
|
+
def multicast(to, messages, headers: {})
|
127
158
|
channel_token_required
|
128
159
|
|
129
160
|
to = [to] if to.is_a?(String)
|
@@ -131,86 +162,112 @@ module Line
|
|
131
162
|
|
132
163
|
endpoint_path = '/bot/message/multicast'
|
133
164
|
payload = { to: to, messages: messages }.to_json
|
134
|
-
post(endpoint_path, payload, credentials)
|
165
|
+
post(endpoint, endpoint_path, payload, credentials.merge(headers))
|
135
166
|
end
|
136
167
|
|
137
|
-
#
|
168
|
+
# Send messages to all friends.
|
138
169
|
#
|
139
|
-
# @param messages [Hash or Array]
|
170
|
+
# @param messages [Hash or Array] Message Objects
|
171
|
+
# @param headers [Hash] HTTP Headers
|
140
172
|
#
|
141
173
|
# @return [Net::HTTPResponse]
|
142
|
-
def broadcast(messages)
|
174
|
+
def broadcast(messages, headers: {})
|
143
175
|
channel_token_required
|
144
176
|
|
145
177
|
messages = [messages] if messages.is_a?(Hash)
|
146
178
|
|
147
179
|
endpoint_path = '/bot/message/broadcast'
|
148
180
|
payload = { messages: messages }.to_json
|
149
|
-
post(endpoint_path, payload, credentials)
|
181
|
+
post(endpoint, endpoint_path, payload, credentials.merge(headers))
|
182
|
+
end
|
183
|
+
|
184
|
+
# Narrowcast messages to users
|
185
|
+
#
|
186
|
+
# API Documentation is here.
|
187
|
+
# https://developers.line.biz/en/reference/messaging-api/#send-narrowcast-message
|
188
|
+
#
|
189
|
+
# @param messages [Hash or Array]
|
190
|
+
# @param recipient [Hash]
|
191
|
+
# @param filter [Hash]
|
192
|
+
# @param limit [Hash]
|
193
|
+
# @param headers [Hash] HTTP Headers
|
194
|
+
#
|
195
|
+
# @return [Net::HTTPResponse]
|
196
|
+
def narrowcast(messages, recipient: nil, filter: nil, limit: nil, headers: {})
|
197
|
+
channel_token_required
|
198
|
+
|
199
|
+
messages = [messages] if messages.is_a?(Hash)
|
200
|
+
|
201
|
+
endpoint_path = '/bot/message/narrowcast'
|
202
|
+
payload = {
|
203
|
+
messages: messages,
|
204
|
+
recipient: recipient,
|
205
|
+
filter: filter,
|
206
|
+
limit: limit
|
207
|
+
}.to_json
|
208
|
+
post(endpoint, endpoint_path, payload, credentials.merge(headers))
|
150
209
|
end
|
151
210
|
|
152
211
|
def leave_group(group_id)
|
153
212
|
channel_token_required
|
154
213
|
|
155
214
|
endpoint_path = "/bot/group/#{group_id}/leave"
|
156
|
-
post(endpoint_path, nil, credentials)
|
215
|
+
post(endpoint, endpoint_path, nil, credentials)
|
157
216
|
end
|
158
217
|
|
159
218
|
def leave_room(room_id)
|
160
219
|
channel_token_required
|
161
220
|
|
162
221
|
endpoint_path = "/bot/room/#{room_id}/leave"
|
163
|
-
post(endpoint_path, nil, credentials)
|
222
|
+
post(endpoint, endpoint_path, nil, credentials)
|
164
223
|
end
|
165
224
|
|
166
225
|
# Get message content.
|
167
226
|
#
|
168
227
|
# @param identifier [String] Message's identifier
|
169
|
-
#
|
170
228
|
# @return [Net::HTTPResponse]
|
171
229
|
def get_message_content(identifier)
|
172
230
|
channel_token_required
|
173
231
|
|
174
232
|
endpoint_path = "/bot/message/#{identifier}/content"
|
175
|
-
get(endpoint_path, credentials)
|
233
|
+
get(blob_endpoint, endpoint_path, credentials)
|
176
234
|
end
|
177
235
|
|
178
236
|
# Get an user's profile.
|
179
237
|
#
|
180
|
-
# @param user_id [String] User
|
181
|
-
#
|
238
|
+
# @param user_id [String] User Id user_id
|
182
239
|
# @return [Net::HTTPResponse]
|
183
240
|
def get_profile(user_id)
|
184
241
|
channel_token_required
|
185
242
|
|
186
243
|
endpoint_path = "/bot/profile/#{user_id}"
|
187
|
-
get(endpoint_path, credentials)
|
244
|
+
get(endpoint, endpoint_path, credentials)
|
188
245
|
end
|
189
246
|
|
190
247
|
# Get an user's profile of a group.
|
191
248
|
#
|
192
249
|
# @param group_id [String] Group's identifier
|
193
|
-
# @param user_id [String] User
|
250
|
+
# @param user_id [String] User Id user_id
|
194
251
|
#
|
195
252
|
# @return [Net::HTTPResponse]
|
196
253
|
def get_group_member_profile(group_id, user_id)
|
197
254
|
channel_token_required
|
198
255
|
|
199
256
|
endpoint_path = "/bot/group/#{group_id}/member/#{user_id}"
|
200
|
-
get(endpoint_path, credentials)
|
257
|
+
get(endpoint, endpoint_path, credentials)
|
201
258
|
end
|
202
259
|
|
203
260
|
# Get an user's profile of a room.
|
204
261
|
#
|
205
262
|
# @param room_id [String] Room's identifier
|
206
|
-
# @param user_id [String] User
|
263
|
+
# @param user_id [String] User Id user_id
|
207
264
|
#
|
208
265
|
# @return [Net::HTTPResponse]
|
209
266
|
def get_room_member_profile(room_id, user_id)
|
210
267
|
channel_token_required
|
211
268
|
|
212
269
|
endpoint_path = "/bot/room/#{room_id}/member/#{user_id}"
|
213
|
-
get(endpoint_path, credentials)
|
270
|
+
get(endpoint, endpoint_path, credentials)
|
214
271
|
end
|
215
272
|
|
216
273
|
# Get user IDs of a group
|
@@ -225,12 +282,12 @@ module Line
|
|
225
282
|
|
226
283
|
endpoint_path = "/bot/group/#{group_id}/members/ids"
|
227
284
|
endpoint_path += "?start=#{continuation_token}" if continuation_token
|
228
|
-
get(endpoint_path, credentials)
|
285
|
+
get(endpoint, endpoint_path, credentials)
|
229
286
|
end
|
230
287
|
|
231
288
|
# Get user IDs of a room
|
232
289
|
#
|
233
|
-
# @param
|
290
|
+
# @param room_id [String] Room's identifier
|
234
291
|
# @param continuation_token [String] Identifier to return next page
|
235
292
|
# (next property to be included in the response)
|
236
293
|
#
|
@@ -240,7 +297,43 @@ module Line
|
|
240
297
|
|
241
298
|
endpoint_path = "/bot/room/#{room_id}/members/ids"
|
242
299
|
endpoint_path += "?start=#{continuation_token}" if continuation_token
|
243
|
-
get(endpoint_path, credentials)
|
300
|
+
get(endpoint, endpoint_path, credentials)
|
301
|
+
end
|
302
|
+
|
303
|
+
# Gets the group ID, group name, and group icon URL of a group where the LINE Official Account is a member.
|
304
|
+
#
|
305
|
+
# @param group_id [String] Group's identifier
|
306
|
+
#
|
307
|
+
# @return [Net::HTTPResponse]
|
308
|
+
def get_group_summary(group_id)
|
309
|
+
channel_token_required
|
310
|
+
|
311
|
+
endpoint_path = "/bot/group/#{group_id}/summary"
|
312
|
+
get(endpoint, endpoint_path, credentials)
|
313
|
+
end
|
314
|
+
|
315
|
+
# Gets the user IDs of the members of a group that the bot is in.
|
316
|
+
#
|
317
|
+
# @param group_id [String] Group's identifier
|
318
|
+
#
|
319
|
+
# @return [Net::HTTPResponse]
|
320
|
+
def get_group_members_count(group_id)
|
321
|
+
channel_token_required
|
322
|
+
|
323
|
+
endpoint_path = "/bot/group/#{group_id}/members/count"
|
324
|
+
get(endpoint, endpoint_path, credentials)
|
325
|
+
end
|
326
|
+
|
327
|
+
# Gets the count of members in a room.
|
328
|
+
#
|
329
|
+
# @param room_id [String] Room's identifier
|
330
|
+
#
|
331
|
+
# @return [Net::HTTPResponse]
|
332
|
+
def get_room_members_count(room_id)
|
333
|
+
channel_token_required
|
334
|
+
|
335
|
+
endpoint_path = "/bot/room/#{room_id}/members/count"
|
336
|
+
get(endpoint, endpoint_path, credentials)
|
244
337
|
end
|
245
338
|
|
246
339
|
# Get a list of all uploaded rich menus
|
@@ -250,7 +343,7 @@ module Line
|
|
250
343
|
channel_token_required
|
251
344
|
|
252
345
|
endpoint_path = '/bot/richmenu/list'
|
253
|
-
get(endpoint_path, credentials)
|
346
|
+
get(endpoint, endpoint_path, credentials)
|
254
347
|
end
|
255
348
|
|
256
349
|
# Get a rich menu via a rich menu ID
|
@@ -262,7 +355,7 @@ module Line
|
|
262
355
|
channel_token_required
|
263
356
|
|
264
357
|
endpoint_path = "/bot/richmenu/#{rich_menu_id}"
|
265
|
-
get(endpoint_path, credentials)
|
358
|
+
get(endpoint, endpoint_path, credentials)
|
266
359
|
end
|
267
360
|
|
268
361
|
# Gets the number of messages sent with the /bot/message/reply endpoint.
|
@@ -274,7 +367,7 @@ module Line
|
|
274
367
|
channel_token_required
|
275
368
|
|
276
369
|
endpoint_path = "/bot/message/delivery/reply?date=#{date}"
|
277
|
-
get(endpoint_path, credentials)
|
370
|
+
get(endpoint, endpoint_path, credentials)
|
278
371
|
end
|
279
372
|
|
280
373
|
# Gets the number of messages sent with the /bot/message/push endpoint.
|
@@ -286,7 +379,7 @@ module Line
|
|
286
379
|
channel_token_required
|
287
380
|
|
288
381
|
endpoint_path = "/bot/message/delivery/push?date=#{date}"
|
289
|
-
get(endpoint_path, credentials)
|
382
|
+
get(endpoint, endpoint_path, credentials)
|
290
383
|
end
|
291
384
|
|
292
385
|
# Gets the number of messages sent with the /bot/message/multicast endpoint.
|
@@ -298,7 +391,7 @@ module Line
|
|
298
391
|
channel_token_required
|
299
392
|
|
300
393
|
endpoint_path = "/bot/message/delivery/multicast?date=#{date}"
|
301
|
-
get(endpoint_path, credentials)
|
394
|
+
get(endpoint, endpoint_path, credentials)
|
302
395
|
end
|
303
396
|
|
304
397
|
# Gets the number of messages sent with the /bot/message/multicast endpoint.
|
@@ -310,7 +403,7 @@ module Line
|
|
310
403
|
channel_token_required
|
311
404
|
|
312
405
|
endpoint_path = "/bot/message/delivery/broadcast?date=#{date}"
|
313
|
-
get(endpoint_path, credentials)
|
406
|
+
get(endpoint, endpoint_path, credentials)
|
314
407
|
end
|
315
408
|
|
316
409
|
# Create a rich menu
|
@@ -322,7 +415,7 @@ module Line
|
|
322
415
|
channel_token_required
|
323
416
|
|
324
417
|
endpoint_path = '/bot/richmenu'
|
325
|
-
post(endpoint_path, rich_menu.to_json, credentials)
|
418
|
+
post(endpoint, endpoint_path, rich_menu.to_json, credentials)
|
326
419
|
end
|
327
420
|
|
328
421
|
# Delete a rich menu
|
@@ -334,7 +427,7 @@ module Line
|
|
334
427
|
channel_token_required
|
335
428
|
|
336
429
|
endpoint_path = "/bot/richmenu/#{rich_menu_id}"
|
337
|
-
delete(endpoint_path, credentials)
|
430
|
+
delete(endpoint, endpoint_path, credentials)
|
338
431
|
end
|
339
432
|
|
340
433
|
# Get the ID of the rich menu linked to a user
|
@@ -346,7 +439,7 @@ module Line
|
|
346
439
|
channel_token_required
|
347
440
|
|
348
441
|
endpoint_path = "/bot/user/#{user_id}/richmenu"
|
349
|
-
get(endpoint_path, credentials)
|
442
|
+
get(endpoint, endpoint_path, credentials)
|
350
443
|
end
|
351
444
|
|
352
445
|
# Get default rich menu
|
@@ -356,7 +449,7 @@ module Line
|
|
356
449
|
channel_token_required
|
357
450
|
|
358
451
|
endpoint_path = '/bot/user/all/richmenu'
|
359
|
-
get(endpoint_path, credentials)
|
452
|
+
get(endpoint, endpoint_path, credentials)
|
360
453
|
end
|
361
454
|
|
362
455
|
# Set default rich menu (Link a rich menu to all user)
|
@@ -368,7 +461,7 @@ module Line
|
|
368
461
|
channel_token_required
|
369
462
|
|
370
463
|
endpoint_path = "/bot/user/all/richmenu/#{rich_menu_id}"
|
371
|
-
post(endpoint_path, nil, credentials)
|
464
|
+
post(endpoint, endpoint_path, nil, credentials)
|
372
465
|
end
|
373
466
|
|
374
467
|
# Unset default rich menu (Unlink a rich menu from all user)
|
@@ -378,11 +471,14 @@ module Line
|
|
378
471
|
channel_token_required
|
379
472
|
|
380
473
|
endpoint_path = "/bot/user/all/richmenu"
|
381
|
-
delete(endpoint_path, credentials)
|
474
|
+
delete(endpoint, endpoint_path, credentials)
|
382
475
|
end
|
383
476
|
|
384
477
|
# Link a rich menu to a user
|
385
478
|
#
|
479
|
+
# If you want to link a rich menu to multiple users,
|
480
|
+
# please consider to use bulk_link_rich_menus.
|
481
|
+
#
|
386
482
|
# @param user_id [String] ID of the user
|
387
483
|
# @param rich_menu_id [String] ID of an uploaded rich menu
|
388
484
|
#
|
@@ -391,7 +487,7 @@ module Line
|
|
391
487
|
channel_token_required
|
392
488
|
|
393
489
|
endpoint_path = "/bot/user/#{user_id}/richmenu/#{rich_menu_id}"
|
394
|
-
post(endpoint_path, nil, credentials)
|
490
|
+
post(endpoint, endpoint_path, nil, credentials)
|
395
491
|
end
|
396
492
|
|
397
493
|
# Unlink a rich menu from a user
|
@@ -403,7 +499,7 @@ module Line
|
|
403
499
|
channel_token_required
|
404
500
|
|
405
501
|
endpoint_path = "/bot/user/#{user_id}/richmenu"
|
406
|
-
delete(endpoint_path, credentials)
|
502
|
+
delete(endpoint, endpoint_path, credentials)
|
407
503
|
end
|
408
504
|
|
409
505
|
# To link a rich menu to multiple users at a time
|
@@ -416,7 +512,7 @@ module Line
|
|
416
512
|
channel_token_required
|
417
513
|
|
418
514
|
endpoint_path = "/bot/richmenu/bulk/link"
|
419
|
-
post(endpoint_path, { richMenuId: rich_menu_id, userIds: user_ids }.to_json, credentials)
|
515
|
+
post(endpoint, endpoint_path, { richMenuId: rich_menu_id, userIds: user_ids }.to_json, credentials)
|
420
516
|
end
|
421
517
|
|
422
518
|
# To unlink a rich menu from multiple users at a time
|
@@ -428,7 +524,7 @@ module Line
|
|
428
524
|
channel_token_required
|
429
525
|
|
430
526
|
endpoint_path = "/bot/richmenu/bulk/unlink"
|
431
|
-
post(endpoint_path, { userIds: user_ids }.to_json, credentials)
|
527
|
+
post(endpoint, endpoint_path, { userIds: user_ids }.to_json, credentials)
|
432
528
|
end
|
433
529
|
|
434
530
|
# Download an image associated with a rich menu
|
@@ -440,7 +536,7 @@ module Line
|
|
440
536
|
channel_token_required
|
441
537
|
|
442
538
|
endpoint_path = "/bot/richmenu/#{rich_menu_id}/content"
|
443
|
-
get(endpoint_path, credentials)
|
539
|
+
get(blob_endpoint, endpoint_path, credentials)
|
444
540
|
end
|
445
541
|
|
446
542
|
# Upload and attaches an image to a rich menu
|
@@ -452,16 +548,9 @@ module Line
|
|
452
548
|
def create_rich_menu_image(rich_menu_id, file)
|
453
549
|
channel_token_required
|
454
550
|
|
455
|
-
content_type = case file.path
|
456
|
-
when /\.jpe?g\z/i then 'image/jpeg'
|
457
|
-
when /\.png\z/i then 'image/png'
|
458
|
-
else
|
459
|
-
raise ArgumentError, "invalid file extension: #{file.path}"
|
460
|
-
end
|
461
|
-
|
462
551
|
endpoint_path = "/bot/richmenu/#{rich_menu_id}/content"
|
463
|
-
headers = credentials.merge('Content-Type' => content_type)
|
464
|
-
post(endpoint_path, file.rewind && file.read, headers)
|
552
|
+
headers = credentials.merge('Content-Type' => content_type(file))
|
553
|
+
post(blob_endpoint, endpoint_path, file.rewind && file.read, headers)
|
465
554
|
end
|
466
555
|
|
467
556
|
# Issue a link token to a user
|
@@ -473,7 +562,7 @@ module Line
|
|
473
562
|
channel_token_required
|
474
563
|
|
475
564
|
endpoint_path = "/bot/user/#{user_id}/linkToken"
|
476
|
-
post(endpoint_path, nil, credentials)
|
565
|
+
post(endpoint, endpoint_path, nil, credentials)
|
477
566
|
end
|
478
567
|
|
479
568
|
# Get the target limit for additional messages
|
@@ -483,7 +572,7 @@ module Line
|
|
483
572
|
channel_token_required
|
484
573
|
|
485
574
|
endpoint_path = "/bot/message/quota"
|
486
|
-
get(endpoint_path, credentials)
|
575
|
+
get(endpoint, endpoint_path, credentials)
|
487
576
|
end
|
488
577
|
|
489
578
|
# Get number of messages sent this month
|
@@ -493,7 +582,7 @@ module Line
|
|
493
582
|
channel_token_required
|
494
583
|
|
495
584
|
endpoint_path = "/bot/message/quota/consumption"
|
496
|
-
get(endpoint_path, credentials)
|
585
|
+
get(endpoint, endpoint_path, credentials)
|
497
586
|
end
|
498
587
|
|
499
588
|
# Returns the number of messages sent on a specified day
|
@@ -505,7 +594,19 @@ module Line
|
|
505
594
|
channel_token_required
|
506
595
|
|
507
596
|
endpoint_path = "/bot/insight/message/delivery?date=#{date}"
|
508
|
-
get(endpoint_path, credentials)
|
597
|
+
get(endpoint, endpoint_path, credentials)
|
598
|
+
end
|
599
|
+
|
600
|
+
# Returns statistics about how users interact with narrowcast messages or broadcast messages sent from your LINE Official Account.
|
601
|
+
#
|
602
|
+
# @param [String] request_id
|
603
|
+
#
|
604
|
+
# @return [Net::HTTPResponse]
|
605
|
+
def get_user_interaction_statistics(request_id)
|
606
|
+
channel_token_required
|
607
|
+
|
608
|
+
endpoint_path = "/bot/insight/message/event?requestId=#{request_id}"
|
609
|
+
get(endpoint, endpoint_path, credentials)
|
509
610
|
end
|
510
611
|
|
511
612
|
# Returns the number of followers
|
@@ -517,51 +618,54 @@ module Line
|
|
517
618
|
channel_token_required
|
518
619
|
|
519
620
|
endpoint_path = "/bot/insight/followers?date=#{date}"
|
520
|
-
get(endpoint_path, credentials)
|
621
|
+
get(endpoint, endpoint_path, credentials)
|
521
622
|
end
|
522
623
|
|
523
|
-
#
|
624
|
+
# Get the demographic attributes for a bot's friends.
|
524
625
|
#
|
525
626
|
# @return [Net::HTTPResponse]
|
526
627
|
def get_friend_demographics
|
527
628
|
channel_token_required
|
528
629
|
|
529
630
|
endpoint_path = '/bot/insight/demographic'
|
530
|
-
get(endpoint_path, credentials)
|
631
|
+
get(endpoint, endpoint_path, credentials)
|
531
632
|
end
|
532
633
|
|
533
634
|
# Fetch data, get content of specified URL.
|
534
635
|
#
|
636
|
+
# @param endpoint_base [String]
|
535
637
|
# @param endpoint_path [String]
|
536
638
|
# @param headers [Hash]
|
537
639
|
#
|
538
640
|
# @return [Net::HTTPResponse]
|
539
|
-
def get(endpoint_path, headers = {})
|
540
|
-
headers =
|
541
|
-
httpclient.get(
|
641
|
+
def get(endpoint_base, endpoint_path, headers = {})
|
642
|
+
headers = API::DEFAULT_HEADERS.merge(headers)
|
643
|
+
httpclient.get(endpoint_base + endpoint_path, headers)
|
542
644
|
end
|
543
645
|
|
544
646
|
# Post data, get content of specified URL.
|
545
647
|
#
|
648
|
+
# @param endpoint_base [String]
|
546
649
|
# @param endpoint_path [String]
|
547
650
|
# @param payload [String or NilClass]
|
548
651
|
# @param headers [Hash]
|
549
652
|
#
|
550
653
|
# @return [Net::HTTPResponse]
|
551
|
-
def post(endpoint_path, payload = nil, headers = {})
|
552
|
-
headers =
|
553
|
-
httpclient.post(
|
654
|
+
def post(endpoint_base, endpoint_path, payload = nil, headers = {})
|
655
|
+
headers = API::DEFAULT_HEADERS.merge(headers)
|
656
|
+
httpclient.post(endpoint_base + endpoint_path, payload, headers)
|
554
657
|
end
|
555
658
|
|
556
659
|
# Delete content of specified URL.
|
557
660
|
#
|
661
|
+
# @param endpoint_base [String]
|
558
662
|
# @param endpoint_path [String]
|
559
663
|
# @param headers [Hash]
|
560
664
|
#
|
561
665
|
# @return [Net::HTTPResponse]
|
562
|
-
def delete(endpoint_path, headers = {})
|
563
|
-
headers =
|
564
|
-
httpclient.delete(
|
666
|
+
def delete(endpoint_base, endpoint_path, headers = {})
|
667
|
+
headers = API::DEFAULT_HEADERS.merge(headers)
|
668
|
+
httpclient.delete(endpoint_base + endpoint_path, headers)
|
565
669
|
end
|
566
670
|
|
567
671
|
# Parse events from request.body
|
@@ -574,15 +678,17 @@ module Line
|
|
574
678
|
|
575
679
|
json['events'].map do |item|
|
576
680
|
begin
|
577
|
-
klass =
|
681
|
+
klass = Event.const_get(Util.camelize(item['type']))
|
578
682
|
klass.new(item)
|
579
683
|
rescue NameError
|
580
|
-
|
684
|
+
Event::Base.new(item)
|
581
685
|
end
|
582
686
|
end
|
583
687
|
end
|
584
688
|
|
585
|
-
# Validate signature
|
689
|
+
# Validate signature of a webhook event.
|
690
|
+
#
|
691
|
+
# https://developers.line.biz/en/reference/messaging-api/#signature-validation
|
586
692
|
#
|
587
693
|
# @param content [String] Request's body
|
588
694
|
# @param channel_signature [String] Request'header 'X-LINE-Signature' # HTTP_X_LINE_SIGNATURE
|
@@ -619,6 +725,21 @@ module Line
|
|
619
725
|
res == 0
|
620
726
|
end
|
621
727
|
|
728
|
+
def content_type(file)
|
729
|
+
if file.respond_to?(:content_type)
|
730
|
+
content_type = file.content_type
|
731
|
+
raise ArgumentError, "invalid content type: #{content_type}" unless ['image/jpeg', 'image/png'].include?(content_type)
|
732
|
+
content_type
|
733
|
+
else
|
734
|
+
case file.path
|
735
|
+
when /\.jpe?g\z/i then 'image/jpeg'
|
736
|
+
when /\.png\z/i then 'image/png'
|
737
|
+
else
|
738
|
+
raise ArgumentError, "invalid file extension: #{file.path}"
|
739
|
+
end
|
740
|
+
end
|
741
|
+
end
|
742
|
+
|
622
743
|
def channel_token_required
|
623
744
|
raise ArgumentError, '`channel_token` is not configured' unless channel_token
|
624
745
|
end
|
data/lib/line/bot/event.rb
CHANGED
@@ -21,6 +21,8 @@ require 'line/bot/event/leave'
|
|
21
21
|
require 'line/bot/event/message'
|
22
22
|
require 'line/bot/event/postback'
|
23
23
|
require 'line/bot/event/unfollow'
|
24
|
+
require 'line/bot/event/unsend'
|
24
25
|
require 'line/bot/event/member_joined'
|
25
26
|
require 'line/bot/event/member_left'
|
26
27
|
require 'line/bot/event/things'
|
28
|
+
require 'line/bot/event/video_play_complete'
|
@@ -15,11 +15,16 @@
|
|
15
15
|
module Line
|
16
16
|
module Bot
|
17
17
|
module Event
|
18
|
+
# Event object for when a user has linked his/her LINE account with a provider's service account.
|
19
|
+
#
|
20
|
+
# https://developers.line.biz/en/reference/messaging-api/#account-link-event
|
18
21
|
class AccountLink < Base
|
22
|
+
# @return [String]
|
19
23
|
def result
|
20
24
|
@src['link']['result']
|
21
25
|
end
|
22
26
|
|
27
|
+
# @return [String]
|
23
28
|
def nonce
|
24
29
|
@src['link']['nonce']
|
25
30
|
end
|
@@ -15,15 +15,21 @@
|
|
15
15
|
module Line
|
16
16
|
module Bot
|
17
17
|
module Event
|
18
|
+
# Event object for when a user enters the range of a LINE Beacon.
|
19
|
+
#
|
20
|
+
# https://developers.line.biz/en/reference/messaging-api/#beacon-event
|
18
21
|
class Beacon < Base
|
22
|
+
# @return [String]
|
19
23
|
def type
|
20
24
|
@src['beacon']['type']
|
21
25
|
end
|
22
26
|
|
27
|
+
# @return [String]
|
23
28
|
def hwid
|
24
29
|
@src['beacon']['hwid']
|
25
30
|
end
|
26
31
|
|
32
|
+
# @return [String]
|
27
33
|
def deviceMessage
|
28
34
|
[@src['beacon']['dm']].pack('H*')
|
29
35
|
end
|
@@ -15,6 +15,10 @@
|
|
15
15
|
module Line
|
16
16
|
module Bot
|
17
17
|
module Event
|
18
|
+
# Event object for when your LINE official account is added as a friend (or unblocked).
|
19
|
+
# You can reply to follow events.
|
20
|
+
#
|
21
|
+
# https://developers.line.biz/en/reference/messaging-api/#follow-event
|
18
22
|
class Follow < Base
|
19
23
|
end
|
20
24
|
end
|
data/lib/line/bot/event/join.rb
CHANGED
data/lib/line/bot/event/leave.rb
CHANGED
@@ -15,6 +15,11 @@
|
|
15
15
|
module Line
|
16
16
|
module Bot
|
17
17
|
module Event
|
18
|
+
# Event object for when a user removes your LINE official account from a group or when your LINE official account leaves a group or room.
|
19
|
+
#
|
20
|
+
# No replyToken is generated for this event.
|
21
|
+
#
|
22
|
+
# https://developers.line.biz/en/reference/messaging-api/#leave-event
|
18
23
|
class Leave < Base
|
19
24
|
end
|
20
25
|
end
|
@@ -15,6 +15,9 @@
|
|
15
15
|
module Line
|
16
16
|
module Bot
|
17
17
|
module Event
|
18
|
+
# Event object for when a user joins a group or room that the LINE official account is in.
|
19
|
+
#
|
20
|
+
# https://developers.line.biz/en/reference/messaging-api/#member-joined-event
|
18
21
|
class MemberJoined < Base
|
19
22
|
end
|
20
23
|
end
|
@@ -15,6 +15,11 @@
|
|
15
15
|
module Line
|
16
16
|
module Bot
|
17
17
|
module Event
|
18
|
+
# Event object for when a user leaves a group or room that the LINE official account is in.
|
19
|
+
#
|
20
|
+
# No replyToken is generated for this event.
|
21
|
+
#
|
22
|
+
# https://developers.line.biz/en/reference/messaging-api/#member-left-event
|
18
23
|
class MemberLeft < Base
|
19
24
|
end
|
20
25
|
end
|
@@ -26,11 +26,14 @@ module Line
|
|
26
26
|
Unsupport = 'unsupport'
|
27
27
|
end
|
28
28
|
|
29
|
+
# Webhook event object which contains the sent message.
|
30
|
+
#
|
31
|
+
# https://developers.line.biz/en/reference/messaging-api/#message-event
|
29
32
|
class Message < Base
|
30
33
|
def type
|
31
|
-
|
34
|
+
MessageType.const_get(@src['message']['type'].capitalize)
|
32
35
|
rescue NameError => e
|
33
|
-
|
36
|
+
MessageType::Unsupport
|
34
37
|
end
|
35
38
|
|
36
39
|
def message
|
@@ -22,11 +22,16 @@ module Line
|
|
22
22
|
Unsupport = 'unsupport'
|
23
23
|
end
|
24
24
|
|
25
|
+
# LINE Things API related events.
|
26
|
+
#
|
27
|
+
# * https://developers.line.biz/en/reference/messaging-api/#device-link-event
|
28
|
+
# * https://developers.line.biz/en/reference/messaging-api/#device-unlink-event
|
29
|
+
# * https://developers.line.biz/en/reference/messaging-api/#scenario-result-event
|
25
30
|
class Things < Base
|
26
31
|
def type
|
27
|
-
|
32
|
+
ThingsType.const_get(Util.camelize(@src['things']['type']))
|
28
33
|
rescue NameError
|
29
|
-
|
34
|
+
ThingsType::Unsupport
|
30
35
|
end
|
31
36
|
|
32
37
|
def device_id
|
@@ -15,6 +15,11 @@
|
|
15
15
|
module Line
|
16
16
|
module Bot
|
17
17
|
module Event
|
18
|
+
# Event object for when your LINE official account is blocked.
|
19
|
+
#
|
20
|
+
# No replyToken is generated for this event.
|
21
|
+
#
|
22
|
+
# https://developers.line.biz/en/reference/messaging-api/#unfollow-event
|
18
23
|
class Unfollow < Base
|
19
24
|
end
|
20
25
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Copyright 2016 LINE
|
2
|
+
#
|
3
|
+
# LINE Corporation licenses this file to you under the Apache License,
|
4
|
+
# version 2.0 (the "License"); you may not use this file except in compliance
|
5
|
+
# with the License. You may obtain a copy of the License at:
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
11
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
12
|
+
# License for the specific language governing permissions and limitations
|
13
|
+
# under the License.
|
14
|
+
|
15
|
+
module Line
|
16
|
+
module Bot
|
17
|
+
module Event
|
18
|
+
# Event object for when the user unsends a message in a group or room.
|
19
|
+
#
|
20
|
+
# No replyToken is generated for this event.
|
21
|
+
#
|
22
|
+
# https://developers.line.biz/en/reference/messaging-api/#unsend-event
|
23
|
+
class Unsend < Base
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# Copyright 2016 LINE
|
2
|
+
#
|
3
|
+
# LINE Corporation licenses this file to you under the Apache License,
|
4
|
+
# version 2.0 (the "License"); you may not use this file except in compliance
|
5
|
+
# with the License. You may obtain a copy of the License at:
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
11
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
12
|
+
# License for the specific language governing permissions and limitations
|
13
|
+
# under the License.
|
14
|
+
|
15
|
+
module Line
|
16
|
+
module Bot
|
17
|
+
module Event
|
18
|
+
# Event for when a user finishes viewing a video at least once with the specified trackingId sent by the LINE Official Account.
|
19
|
+
#
|
20
|
+
# https://developers.line.biz/en/reference/messaging-api/#video-viewing-complete
|
21
|
+
class VideoPlayComplete < Base
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/line/bot/httpclient.rb
CHANGED
data/line-bot-api.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
|
22
22
|
spec.add_development_dependency "addressable", "~> 2.3"
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.11" if RUBY_VERSION < "2.3"
|
24
|
-
spec.add_development_dependency 'rake', "~>
|
24
|
+
spec.add_development_dependency 'rake', "~> 13.0"
|
25
25
|
spec.add_development_dependency "rspec", "~> 3.0"
|
26
|
-
spec.add_development_dependency "webmock", "~>
|
26
|
+
spec.add_development_dependency "webmock", "~> 3.8"
|
27
27
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: line-bot-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.16.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- LINE Corporation
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-08-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '13.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '13.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '3.8'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '3.8'
|
69
69
|
description: Line::Bot::API - SDK of the LINE Messaging API for Ruby
|
70
70
|
email:
|
71
71
|
- kimoto@linecorp.com
|
@@ -97,6 +97,8 @@ files:
|
|
97
97
|
- lib/line/bot/event/postback.rb
|
98
98
|
- lib/line/bot/event/things.rb
|
99
99
|
- lib/line/bot/event/unfollow.rb
|
100
|
+
- lib/line/bot/event/unsend.rb
|
101
|
+
- lib/line/bot/event/video_play_complete.rb
|
100
102
|
- lib/line/bot/httpclient.rb
|
101
103
|
- lib/line/bot/util.rb
|
102
104
|
- line-bot-api.gemspec
|
@@ -119,7 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
121
|
- !ruby/object:Gem::Version
|
120
122
|
version: '0'
|
121
123
|
requirements: []
|
122
|
-
rubygems_version: 3.
|
124
|
+
rubygems_version: 3.1.2
|
123
125
|
signing_key:
|
124
126
|
specification_version: 4
|
125
127
|
summary: SDK of the LINE Messaging API
|