line-bot-api 1.19.0 → 1.23.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/lib/line/bot/api/version.rb +1 -1
- data/lib/line/bot/api.rb +1 -0
- data/lib/line/bot/client.rb +173 -9
- data/lib/line/bot/httpclient.rb +2 -4
- data/line-bot-api.gemspec +1 -2
- metadata +4 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 17ed6a316ad332e424e59aa498c8e9ee3bc7062204f191ea3b78e44f74a623b0
|
4
|
+
data.tar.gz: 3a9cc6bbf3cbf658685873f4ea92c501cda4d73d6b6f969ec1620af4d34322ba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 264355c41cc59a4063284d83902639df915df5dfa82b9787d1a4a973dfe4af2d729c171428c12b013e9f87ca6b667e1f8f0c41de5b93843a37040cafb1ea7f54
|
7
|
+
data.tar.gz: '08ef6e828069cf6a8d971450f054fc8c4a662b6244da697138cb33305b38e0a6711e0e75d82fccb9574f88b86e9f7bb8cf7cd13e247bab53c612c989572efc55'
|
data/lib/line/bot/api/version.rb
CHANGED
data/lib/line/bot/api.rb
CHANGED
@@ -17,6 +17,7 @@ require 'line/bot/api/version'
|
|
17
17
|
module Line
|
18
18
|
module Bot
|
19
19
|
module API
|
20
|
+
DEFAULT_OAUTH_ENDPOINT = "https://api.line.me"
|
20
21
|
DEFAULT_ENDPOINT = "https://api.line.me/v2"
|
21
22
|
DEFAULT_BLOB_ENDPOINT = "https://api-data.line.me/v2"
|
22
23
|
DEFAULT_LIFF_ENDPOINT = "https://api.line.me/liff/v1"
|
data/lib/line/bot/client.rb
CHANGED
@@ -55,6 +55,10 @@ module Line
|
|
55
55
|
@endpoint ||= API::DEFAULT_ENDPOINT
|
56
56
|
end
|
57
57
|
|
58
|
+
def oauth_endpoint
|
59
|
+
@oauth_endpoint ||= API::DEFAULT_OAUTH_ENDPOINT
|
60
|
+
end
|
61
|
+
|
58
62
|
def blob_endpoint
|
59
63
|
return @blob_endpoint if @blob_endpoint
|
60
64
|
|
@@ -106,19 +110,71 @@ module Line
|
|
106
110
|
post(endpoint, endpoint_path, payload, headers)
|
107
111
|
end
|
108
112
|
|
113
|
+
# Issue channel access token v2.1
|
114
|
+
#
|
115
|
+
# @param jwt [String]
|
116
|
+
#
|
117
|
+
# @return [Net::HTTPResponse]
|
118
|
+
def issue_channel_access_token_jwt(jwt)
|
119
|
+
endpoint_path = '/oauth2/v2.1/token'
|
120
|
+
payload = URI.encode_www_form(
|
121
|
+
grant_type: 'client_credentials',
|
122
|
+
client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',
|
123
|
+
client_assertion: jwt
|
124
|
+
)
|
125
|
+
headers = { 'Content-Type' => 'application/x-www-form-urlencoded' }
|
126
|
+
post(oauth_endpoint, endpoint_path, payload, headers)
|
127
|
+
end
|
128
|
+
|
129
|
+
# Revoke channel access token v2.1
|
130
|
+
#
|
131
|
+
# @param access_token [String]
|
132
|
+
#
|
133
|
+
# @return [Net::HTTPResponse]
|
134
|
+
def revoke_channel_access_token_jwt(access_token)
|
135
|
+
channel_id_required
|
136
|
+
channel_secret_required
|
137
|
+
|
138
|
+
endpoint_path = '/oauth2/v2.1/revoke'
|
139
|
+
payload = URI.encode_www_form(
|
140
|
+
client_id: channel_id,
|
141
|
+
client_secret: channel_secret,
|
142
|
+
access_token: access_token
|
143
|
+
)
|
144
|
+
headers = { 'Content-Type' => 'application/x-www-form-urlencoded' }
|
145
|
+
post(oauth_endpoint, endpoint_path, payload, headers)
|
146
|
+
end
|
147
|
+
|
148
|
+
# Get all valid channel access token key IDs v2.1
|
149
|
+
#
|
150
|
+
# @param jwt [String]
|
151
|
+
#
|
152
|
+
# @return [Net::HTTPResponse]
|
153
|
+
def get_channel_access_token_key_ids_jwt(jwt)
|
154
|
+
payload = URI.encode_www_form(
|
155
|
+
client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',
|
156
|
+
client_assertion: jwt
|
157
|
+
)
|
158
|
+
endpoint_path = "/oauth2/v2.1/tokens/kid?#{payload}"
|
159
|
+
|
160
|
+
headers = { 'Content-Type' => 'application/x-www-form-urlencoded' }
|
161
|
+
get(oauth_endpoint, endpoint_path, headers)
|
162
|
+
end
|
163
|
+
|
109
164
|
# Push messages to a user using user_id.
|
110
165
|
#
|
111
166
|
# @param user_id [String] User Id
|
112
167
|
# @param messages [Hash or Array] Message Objects
|
113
168
|
# @param headers [Hash] HTTP Headers
|
169
|
+
# @param payload [Hash] Additional request body
|
114
170
|
# @return [Net::HTTPResponse]
|
115
|
-
def push_message(user_id, messages, headers: {})
|
171
|
+
def push_message(user_id, messages, headers: {}, payload: {})
|
116
172
|
channel_token_required
|
117
173
|
|
118
174
|
messages = [messages] if messages.is_a?(Hash)
|
119
175
|
|
120
176
|
endpoint_path = '/bot/message/push'
|
121
|
-
payload = { to: user_id, messages: messages }.to_json
|
177
|
+
payload = payload.merge({ to: user_id, messages: messages }).to_json
|
122
178
|
post(endpoint, endpoint_path, payload, credentials.merge(headers))
|
123
179
|
end
|
124
180
|
|
@@ -157,15 +213,16 @@ module Line
|
|
157
213
|
# @param to [Array or String] Array of userIds
|
158
214
|
# @param messages [Hash or Array] Message Objects
|
159
215
|
# @param headers [Hash] HTTP Headers
|
216
|
+
# @param payload [Hash] Additional request body
|
160
217
|
# @return [Net::HTTPResponse]
|
161
|
-
def multicast(to, messages, headers: {})
|
218
|
+
def multicast(to, messages, headers: {}, payload: {})
|
162
219
|
channel_token_required
|
163
220
|
|
164
221
|
to = [to] if to.is_a?(String)
|
165
222
|
messages = [messages] if messages.is_a?(Hash)
|
166
223
|
|
167
224
|
endpoint_path = '/bot/message/multicast'
|
168
|
-
payload = { to: to, messages: messages }.to_json
|
225
|
+
payload = payload.merge({ to: to, messages: messages }).to_json
|
169
226
|
post(endpoint, endpoint_path, payload, credentials.merge(headers))
|
170
227
|
end
|
171
228
|
|
@@ -276,15 +333,22 @@ module Line
|
|
276
333
|
|
277
334
|
# Get user IDs of who added your LINE Official Account as a friend
|
278
335
|
#
|
279
|
-
# @param
|
280
|
-
#
|
336
|
+
# @param start [String] Identifier to return next page (next property to be included in the response)
|
337
|
+
# @param limit [Integer] The maximum number of user IDs to retrieve in a single request
|
281
338
|
#
|
282
339
|
# @return [Net::HTTPResponse]
|
283
|
-
def get_follower_ids(
|
340
|
+
def get_follower_ids(deprecated_continuation_token = nil, start: nil, limit: nil)
|
284
341
|
channel_token_required
|
285
342
|
|
343
|
+
if deprecated_continuation_token
|
344
|
+
warn "continuation_token as the first argument is deprecated. Please use :start instead."
|
345
|
+
start = deprecated_continuation_token
|
346
|
+
end
|
347
|
+
|
348
|
+
params = { start: start, limit: limit }.compact
|
349
|
+
|
286
350
|
endpoint_path = "/bot/followers/ids"
|
287
|
-
endpoint_path += "?
|
351
|
+
endpoint_path += "?" + URI.encode_www_form(params) unless params.empty?
|
288
352
|
get(endpoint, endpoint_path, credentials)
|
289
353
|
end
|
290
354
|
|
@@ -492,6 +556,66 @@ module Line
|
|
492
556
|
delete(endpoint, endpoint_path, credentials)
|
493
557
|
end
|
494
558
|
|
559
|
+
# Set rich menu alias
|
560
|
+
#
|
561
|
+
# @param rich_menu_id [String] ID of an uploaded rich menu
|
562
|
+
# @param rich_menu_alias_id [String] string of alias words rich menu
|
563
|
+
#
|
564
|
+
# @return [Net::HTTPResponse]
|
565
|
+
def set_rich_menus_alias(rich_menu_id, rich_menu_alias_id)
|
566
|
+
channel_token_required
|
567
|
+
|
568
|
+
endpoint_path = '/bot/richmenu/alias'
|
569
|
+
post(endpoint, endpoint_path, { richMenuId: rich_menu_id, richMenuAliasId: rich_menu_alias_id }.to_json, credentials)
|
570
|
+
end
|
571
|
+
|
572
|
+
# Unset rich menu alias
|
573
|
+
#
|
574
|
+
# @param rich_menu_alias_id [String] string of alias words rich menu
|
575
|
+
#
|
576
|
+
# @return [Net::HTTPResponse]
|
577
|
+
def unset_rich_menus_alias(rich_menu_alias_id)
|
578
|
+
channel_token_required
|
579
|
+
|
580
|
+
endpoint_path = "/bot/richmenu/alias/#{rich_menu_alias_id}"
|
581
|
+
delete(endpoint, endpoint_path, credentials)
|
582
|
+
end
|
583
|
+
|
584
|
+
# Update rich menu alias
|
585
|
+
#
|
586
|
+
# @param rich_menu_id [String] ID of an uploaded rich menu
|
587
|
+
# @param rich_menu_alias_id [String] string of alias words rich menu
|
588
|
+
#
|
589
|
+
# @return [Net::HTTPResponse]
|
590
|
+
def update_rich_menus_alias(rich_menu_id, rich_menu_alias_id)
|
591
|
+
channel_token_required
|
592
|
+
|
593
|
+
endpoint_path = "/bot/richmenu/alias/#{rich_menu_alias_id}"
|
594
|
+
post(endpoint, endpoint_path, { richMenuId: rich_menu_id }.to_json, credentials)
|
595
|
+
end
|
596
|
+
|
597
|
+
# Get a rich menu alias via a rich menu alias ID
|
598
|
+
#
|
599
|
+
# @param rich_menu_alias_id [String] string of alias words rich menu
|
600
|
+
#
|
601
|
+
# @return [Net::HTTPResponse]
|
602
|
+
def get_rich_menus_alias(rich_menu_alias_id)
|
603
|
+
channel_token_required
|
604
|
+
|
605
|
+
endpoint_path = "/bot/richmenu/alias/#{rich_menu_alias_id}"
|
606
|
+
get(endpoint, endpoint_path, credentials)
|
607
|
+
end
|
608
|
+
|
609
|
+
# Get a list of all uploaded rich menus alias
|
610
|
+
#
|
611
|
+
# @return [Net::HTTPResponse]
|
612
|
+
def get_rich_menus_alias_list
|
613
|
+
channel_token_required
|
614
|
+
|
615
|
+
endpoint_path = "/bot/richmenu/alias/list"
|
616
|
+
get(endpoint, endpoint_path, credentials)
|
617
|
+
end
|
618
|
+
|
495
619
|
# Link a rich menu to a user
|
496
620
|
#
|
497
621
|
# If you want to link a rich menu to multiple users,
|
@@ -875,6 +999,45 @@ module Line
|
|
875
999
|
put(endpoint, endpoint_path, body.to_json, credentials)
|
876
1000
|
end
|
877
1001
|
|
1002
|
+
# Get the per-unit statistics of how users interact with push messages and multicast messages.
|
1003
|
+
#
|
1004
|
+
# @param unit [String] Case-sensitive name of aggregation unit specified when sending the message.
|
1005
|
+
# @param from [String] Start date of aggregation period in UTC+9 with `yyyyMMdd` format
|
1006
|
+
# @param to [String] End date of aggregation period in UTC+9 with `yyyyMMdd` format.
|
1007
|
+
#
|
1008
|
+
# @return [Net::HTTPResponse]
|
1009
|
+
def get_statistics_per_unit(unit:, from:, to:)
|
1010
|
+
channel_token_required
|
1011
|
+
|
1012
|
+
params = {customAggregationUnit: unit, from: from, to: to}
|
1013
|
+
endpoint_path = "/bot/insight/message/event/aggregation?" + URI.encode_www_form(params)
|
1014
|
+
get(endpoint, endpoint_path, credentials)
|
1015
|
+
end
|
1016
|
+
|
1017
|
+
# Get the number of aggregation units used this month.
|
1018
|
+
#
|
1019
|
+
# @return [Net::HTTPResponse]
|
1020
|
+
def get_aggregation_info
|
1021
|
+
channel_token_required
|
1022
|
+
|
1023
|
+
endpoint_path = "/bot/message/aggregation/info"
|
1024
|
+
get(endpoint, endpoint_path, credentials)
|
1025
|
+
end
|
1026
|
+
|
1027
|
+
# Get the name list of units used this month for statistics aggregation.
|
1028
|
+
#
|
1029
|
+
# @param limit [Integer] Maximum number of aggregation units per request. Maximum: 100, Default: 100.
|
1030
|
+
# @param start [String] Value of the continuation token found in the `next` property of the JSON object returned in the response.
|
1031
|
+
#
|
1032
|
+
# @return [Net::HTTPResponse]
|
1033
|
+
def get_aggregation_list(limit: nil, start: nil)
|
1034
|
+
channel_token_required
|
1035
|
+
|
1036
|
+
params = {limit: limit, start: start}.compact
|
1037
|
+
endpoint_path = "/bot/message/aggregation/list?" + URI.encode_www_form(params)
|
1038
|
+
get(endpoint, endpoint_path, credentials)
|
1039
|
+
end
|
1040
|
+
|
878
1041
|
# Fetch data, get content of specified URL.
|
879
1042
|
#
|
880
1043
|
# @param endpoint_base [String]
|
@@ -954,7 +1117,7 @@ module Line
|
|
954
1117
|
def validate_signature(content, channel_signature)
|
955
1118
|
return false if !channel_signature || !channel_secret
|
956
1119
|
|
957
|
-
hash = OpenSSL::HMAC.digest(OpenSSL::Digest
|
1120
|
+
hash = OpenSSL::HMAC.digest(OpenSSL::Digest.new('SHA256'), channel_secret, content)
|
958
1121
|
signature = Base64.strict_encode64(hash)
|
959
1122
|
|
960
1123
|
variable_secure_compare(channel_signature, signature)
|
@@ -986,6 +1149,7 @@ module Line
|
|
986
1149
|
if file.respond_to?(:content_type)
|
987
1150
|
content_type = file.content_type
|
988
1151
|
raise ArgumentError, "invalid content type: #{content_type}" unless ['image/jpeg', 'image/png'].include?(content_type)
|
1152
|
+
|
989
1153
|
content_type
|
990
1154
|
else
|
991
1155
|
case file.path
|
data/lib/line/bot/httpclient.rb
CHANGED
data/line-bot-api.gemspec
CHANGED
@@ -17,10 +17,9 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
|
-
spec.required_ruby_version = '>= 2.
|
20
|
+
spec.required_ruby_version = '>= 2.4.0'
|
21
21
|
|
22
22
|
spec.add_development_dependency "addressable", "~> 2.3"
|
23
|
-
spec.add_development_dependency "bundler", "~> 1.11" if RUBY_VERSION < "2.3"
|
24
23
|
spec.add_development_dependency 'rake', "~> 13.0"
|
25
24
|
spec.add_development_dependency "rspec", "~> 3.0"
|
26
25
|
spec.add_development_dependency "webmock", "~> 3.8"
|
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.23.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: 2022-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -114,15 +114,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 2.
|
117
|
+
version: 2.4.0
|
118
118
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
119
|
requirements:
|
120
120
|
- - ">="
|
121
121
|
- !ruby/object:Gem::Version
|
122
122
|
version: '0'
|
123
123
|
requirements: []
|
124
|
-
|
125
|
-
rubygems_version: 2.7.6
|
124
|
+
rubygems_version: 3.1.6
|
126
125
|
signing_key:
|
127
126
|
specification_version: 4
|
128
127
|
summary: SDK of the LINE Messaging API
|