Class: Line::Bot::Client
- Inherits:
-
Object
- Object
- Line::Bot::Client
- Defined in:
- lib/line/bot/client.rb
Instance Attribute Summary collapse
-
#blob_endpoint ⇒ Object
@return [String].
-
#channel_id ⇒ Object
@return [String].
-
#channel_secret ⇒ Object
@return [String].
-
#channel_token ⇒ Object
@return [String].
-
#endpoint ⇒ Object
@return [String].
- #http_options ⇒ Hash
- #httpclient ⇒ Object
Instance Method Summary collapse
-
#broadcast(messages) ⇒ Net::HTTPResponse
Broadcast messages to users.
-
#bulk_link_rich_menus(user_ids, rich_menu_id) ⇒ Net::HTTPResponse
To link a rich menu to multiple users at a time.
-
#bulk_unlink_rich_menus(user_ids) ⇒ Net::HTTPResponse
To unlink a rich menu from multiple users at a time.
-
#create_link_token(user_id) ⇒ Net::HTTPResponse
Issue a link token to a user.
-
#create_rich_menu(rich_menu) ⇒ Net::HTTPResponse
Create a rich menu.
-
#create_rich_menu_image(rich_menu_id, file) ⇒ Net::HTTPResponse
Upload and attaches an image to a rich menu.
- #credentials ⇒ Hash
-
#delete(endpoint_base, endpoint_path, headers = {}) ⇒ Net::HTTPResponse
Delete content of specified URL.
-
#delete_rich_menu(rich_menu_id) ⇒ Net::HTTPResponse
Delete a rich menu.
-
#get(endpoint_base, endpoint_path, headers = {}) ⇒ Net::HTTPResponse
Fetch data, get content of specified URL.
-
#get_default_rich_menu ⇒ Net::HTTPResponse
Get default rich menu.
-
#get_friend_demographics ⇒ Net::HTTPResponse
Retrieves the demographic attributes for a bot’s friends.
-
#get_group_member_ids(group_id, continuation_token = nil) ⇒ Net::HTTPResponse
Get user IDs of a group.
-
#get_group_member_profile(group_id, user_id) ⇒ Net::HTTPResponse
Get an user’s profile of a group.
-
#get_message_content(identifier) ⇒ Net::HTTPResponse
Get message content.
-
#get_message_delivery_broadcast(date) ⇒ Net::HTTPResponse
Gets the number of messages sent with the /bot/message/multicast endpoint.
-
#get_message_delivery_multicast(date) ⇒ Net::HTTPResponse
Gets the number of messages sent with the /bot/message/multicast endpoint.
-
#get_message_delivery_push(date) ⇒ Net::HTTPResponse
Gets the number of messages sent with the /bot/message/push endpoint.
-
#get_message_delivery_reply(date) ⇒ Net::HTTPResponse
Gets the number of messages sent with the /bot/message/reply endpoint.
-
#get_number_of_followers(date) ⇒ Net::HTTPResponse
Returns the number of followers.
-
#get_number_of_message_deliveries(date) ⇒ Net::HTTPResponse
Returns the number of messages sent on a specified day.
-
#get_profile(user_id) ⇒ Net::HTTPResponse
Get an user’s profile.
-
#get_quota ⇒ Net::HTTPResponse
Get the target limit for additional messages.
-
#get_quota_consumption ⇒ Net::HTTPResponse
Get number of messages sent this month.
-
#get_rich_menu(rich_menu_id) ⇒ Net::HTTPResponse
Get a rich menu via a rich menu ID.
-
#get_rich_menu_image(rich_menu_id) ⇒ Net::HTTPResponse
Download an image associated with a rich menu.
-
#get_rich_menus ⇒ Net::HTTPResponse
Get a list of all uploaded rich menus.
-
#get_room_member_ids(room_id, continuation_token = nil) ⇒ Net::HTTPResponse
Get user IDs of a room.
-
#get_room_member_profile(room_id, user_id) ⇒ Net::HTTPResponse
Get an user’s profile of a room.
-
#get_user_rich_menu(user_id) ⇒ Net::HTTPResponse
Get the ID of the rich menu linked to a user.
-
#initialize(options = {}) {|_self| ... } ⇒ Line::Bot::Client
constructor
Initialize a new Bot Client.
-
#issue_channel_token(grant_type = 'client_credentials') ⇒ Net::HTTPResponse
Issue channel access token.
- #leave_group(group_id) ⇒ Object
- #leave_room(room_id) ⇒ Object
-
#link_user_rich_menu(user_id, rich_menu_id) ⇒ Net::HTTPResponse
Link a rich menu to a user.
-
#multicast(to, messages) ⇒ Net::HTTPResponse
Multicast messages to line server and to users.
-
#parse_events_from(request_body) ⇒ Array<Line::Bot::Event::Class>
Parse events from request.body.
-
#post(endpoint_base, endpoint_path, payload = nil, headers = {}) ⇒ Net::HTTPResponse
Post data, get content of specified URL.
-
#push_message(user_id, messages) ⇒ Net::HTTPResponse
Push messages to line server and to user.
-
#reply_message(token, messages) ⇒ Net::HTTPResponse
Reply messages to line server and to users.
-
#revoke_channel_token(access_token) ⇒ Net::HTTPResponse
Revoke channel access token.
-
#set_default_rich_menu(rich_menu_id) ⇒ Net::HTTPResponse
Set default rich menu (Link a rich menu to all user).
-
#unlink_user_rich_menu(user_id) ⇒ Net::HTTPResponse
Unlink a rich menu from a user.
-
#unset_default_rich_menu ⇒ Net::HTTPResponse
Unset default rich menu (Unlink a rich menu from all user).
-
#validate_signature(content, channel_signature) ⇒ Boolean
Validate signature.
Constructor Details
#initialize(options = {}) {|_self| ... } ⇒ Line::Bot::Client
Initialize a new Bot Client.
37 38 39 40 41 42 |
# File 'lib/line/bot/client.rb', line 37 def initialize( = {}) .each do |key, value| instance_variable_set("@#{key}", value) end yield(self) if block_given? end |
Instance Attribute Details
#blob_endpoint ⇒ Object
@return [String]
24 25 26 |
# File 'lib/line/bot/client.rb', line 24 def blob_endpoint @blob_endpoint end |
#channel_id ⇒ Object
@return [String]
24 25 26 |
# File 'lib/line/bot/client.rb', line 24 def channel_id @channel_id end |
#channel_secret ⇒ Object
@return [String]
24 25 26 |
# File 'lib/line/bot/client.rb', line 24 def channel_secret @channel_secret end |
#channel_token ⇒ Object
@return [String]
24 25 26 |
# File 'lib/line/bot/client.rb', line 24 def channel_token @channel_token end |
#endpoint ⇒ Object
@return [String]
24 25 26 |
# File 'lib/line/bot/client.rb', line 24 def endpoint @endpoint end |
#http_options ⇒ Hash
30 31 32 |
# File 'lib/line/bot/client.rb', line 30 def end |
#httpclient ⇒ Object
27 28 29 |
# File 'lib/line/bot/client.rb', line 27 def httpclient @httpclient end |
Instance Method Details
#broadcast(messages) ⇒ Net::HTTPResponse
Broadcast messages to users
153 154 155 156 157 158 159 160 161 |
# File 'lib/line/bot/client.rb', line 153 def broadcast() channel_token_required = [] if .is_a?(Hash) endpoint_path = '/bot/message/broadcast' payload = { messages: }.to_json post(endpoint, endpoint_path, payload, credentials) end |
#bulk_link_rich_menus(user_ids, rich_menu_id) ⇒ Net::HTTPResponse
To link a rich menu to multiple users at a time
426 427 428 429 430 431 |
# File 'lib/line/bot/client.rb', line 426 def (user_ids, ) channel_token_required endpoint_path = "/bot/richmenu/bulk/link" post(endpoint, endpoint_path, { richMenuId: , userIds: user_ids }.to_json, credentials) end |
#bulk_unlink_rich_menus(user_ids) ⇒ Net::HTTPResponse
To unlink a rich menu from multiple users at a time
438 439 440 441 442 443 |
# File 'lib/line/bot/client.rb', line 438 def (user_ids) channel_token_required endpoint_path = "/bot/richmenu/bulk/unlink" post(endpoint, endpoint_path, { userIds: user_ids }.to_json, credentials) end |
#create_link_token(user_id) ⇒ Net::HTTPResponse
Issue a link token to a user
483 484 485 486 487 488 |
# File 'lib/line/bot/client.rb', line 483 def create_link_token(user_id) channel_token_required endpoint_path = "/bot/user/#{user_id}/linkToken" post(endpoint, endpoint_path, nil, credentials) end |
#create_rich_menu(rich_menu) ⇒ Net::HTTPResponse
Create a rich menu
332 333 334 335 336 337 |
# File 'lib/line/bot/client.rb', line 332 def () channel_token_required endpoint_path = '/bot/richmenu' post(endpoint, endpoint_path, .to_json, credentials) end |
#create_rich_menu_image(rich_menu_id, file) ⇒ Net::HTTPResponse
Upload and attaches an image to a rich menu
463 464 465 466 467 468 469 470 471 472 473 474 475 476 |
# File 'lib/line/bot/client.rb', line 463 def (, file) channel_token_required content_type = case file.path when /\.jpe?g\z/i then 'image/jpeg' when /\.png\z/i then 'image/png' else raise ArgumentError, "invalid file extension: #{file.path}" end endpoint_path = "/bot/richmenu/#{rich_menu_id}/content" headers = credentials.merge('Content-Type' => content_type) post(blob_endpoint, endpoint_path, file.rewind && file.read, headers) end |
#credentials ⇒ Hash
64 65 66 67 68 |
# File 'lib/line/bot/client.rb', line 64 def credentials { "Authorization" => "Bearer #{channel_token}", } end |
#delete(endpoint_base, endpoint_path, headers = {}) ⇒ Net::HTTPResponse
Delete content of specified URL.
576 577 578 579 |
# File 'lib/line/bot/client.rb', line 576 def delete(endpoint_base, endpoint_path, headers = {}) headers = Line::Bot::API::DEFAULT_HEADERS.merge(headers) httpclient.delete(endpoint_base + endpoint_path, headers) end |
#delete_rich_menu(rich_menu_id) ⇒ Net::HTTPResponse
Delete a rich menu
344 345 346 347 348 349 |
# File 'lib/line/bot/client.rb', line 344 def () channel_token_required endpoint_path = "/bot/richmenu/#{rich_menu_id}" delete(endpoint, endpoint_path, credentials) end |
#get(endpoint_base, endpoint_path, headers = {}) ⇒ Net::HTTPResponse
Fetch data, get content of specified URL.
551 552 553 554 |
# File 'lib/line/bot/client.rb', line 551 def get(endpoint_base, endpoint_path, headers = {}) headers = Line::Bot::API::DEFAULT_HEADERS.merge(headers) httpclient.get(endpoint_base + endpoint_path, headers) end |
#get_default_rich_menu ⇒ Net::HTTPResponse
Get default rich menu
366 367 368 369 370 371 |
# File 'lib/line/bot/client.rb', line 366 def channel_token_required endpoint_path = '/bot/user/all/richmenu' get(endpoint, endpoint_path, credentials) end |
#get_friend_demographics ⇒ Net::HTTPResponse
Retrieves the demographic attributes for a bot’s friends.
537 538 539 540 541 542 |
# File 'lib/line/bot/client.rb', line 537 def get_friend_demographics channel_token_required endpoint_path = '/bot/insight/demographic' get(endpoint, endpoint_path, credentials) end |
#get_group_member_ids(group_id, continuation_token = nil) ⇒ Net::HTTPResponse
Get user IDs of a group
234 235 236 237 238 239 240 |
# File 'lib/line/bot/client.rb', line 234 def get_group_member_ids(group_id, continuation_token = nil) channel_token_required endpoint_path = "/bot/group/#{group_id}/members/ids" endpoint_path += "?start=#{continuation_token}" if continuation_token get(endpoint, endpoint_path, credentials) end |
#get_group_member_profile(group_id, user_id) ⇒ Net::HTTPResponse
Get an user’s profile of a group.
207 208 209 210 211 212 |
# File 'lib/line/bot/client.rb', line 207 def get_group_member_profile(group_id, user_id) channel_token_required endpoint_path = "/bot/group/#{group_id}/member/#{user_id}" get(endpoint, endpoint_path, credentials) end |
#get_message_content(identifier) ⇒ Net::HTTPResponse
Get message content.
182 183 184 185 186 187 |
# File 'lib/line/bot/client.rb', line 182 def (identifier) channel_token_required endpoint_path = "/bot/message/#{identifier}/content" get(blob_endpoint, endpoint_path, credentials) end |
#get_message_delivery_broadcast(date) ⇒ Net::HTTPResponse
Gets the number of messages sent with the /bot/message/multicast endpoint.
320 321 322 323 324 325 |
# File 'lib/line/bot/client.rb', line 320 def (date) channel_token_required endpoint_path = "/bot/message/delivery/broadcast?date=#{date}" get(endpoint, endpoint_path, credentials) end |
#get_message_delivery_multicast(date) ⇒ Net::HTTPResponse
Gets the number of messages sent with the /bot/message/multicast endpoint.
308 309 310 311 312 313 |
# File 'lib/line/bot/client.rb', line 308 def (date) channel_token_required endpoint_path = "/bot/message/delivery/multicast?date=#{date}" get(endpoint, endpoint_path, credentials) end |
#get_message_delivery_push(date) ⇒ Net::HTTPResponse
Gets the number of messages sent with the /bot/message/push endpoint.
296 297 298 299 300 301 |
# File 'lib/line/bot/client.rb', line 296 def (date) channel_token_required endpoint_path = "/bot/message/delivery/push?date=#{date}" get(endpoint, endpoint_path, credentials) end |
#get_message_delivery_reply(date) ⇒ Net::HTTPResponse
Gets the number of messages sent with the /bot/message/reply endpoint.
284 285 286 287 288 289 |
# File 'lib/line/bot/client.rb', line 284 def (date) channel_token_required endpoint_path = "/bot/message/delivery/reply?date=#{date}" get(endpoint, endpoint_path, credentials) end |
#get_number_of_followers(date) ⇒ Net::HTTPResponse
Returns the number of followers
527 528 529 530 531 532 |
# File 'lib/line/bot/client.rb', line 527 def get_number_of_followers(date) channel_token_required endpoint_path = "/bot/insight/followers?date=#{date}" get(endpoint, endpoint_path, credentials) end |
#get_number_of_message_deliveries(date) ⇒ Net::HTTPResponse
Returns the number of messages sent on a specified day
515 516 517 518 519 520 |
# File 'lib/line/bot/client.rb', line 515 def (date) channel_token_required endpoint_path = "/bot/insight/message/delivery?date=#{date}" get(endpoint, endpoint_path, credentials) end |
#get_profile(user_id) ⇒ Net::HTTPResponse
Get an user’s profile.
194 195 196 197 198 199 |
# File 'lib/line/bot/client.rb', line 194 def get_profile(user_id) channel_token_required endpoint_path = "/bot/profile/#{user_id}" get(endpoint, endpoint_path, credentials) end |
#get_quota ⇒ Net::HTTPResponse
Get the target limit for additional messages
493 494 495 496 497 498 |
# File 'lib/line/bot/client.rb', line 493 def get_quota channel_token_required endpoint_path = "/bot/message/quota" get(endpoint, endpoint_path, credentials) end |
#get_quota_consumption ⇒ Net::HTTPResponse
Get number of messages sent this month
503 504 505 506 507 508 |
# File 'lib/line/bot/client.rb', line 503 def get_quota_consumption channel_token_required endpoint_path = "/bot/message/quota/consumption" get(endpoint, endpoint_path, credentials) end |
#get_rich_menu(rich_menu_id) ⇒ Net::HTTPResponse
Get a rich menu via a rich menu ID
272 273 274 275 276 277 |
# File 'lib/line/bot/client.rb', line 272 def () channel_token_required endpoint_path = "/bot/richmenu/#{rich_menu_id}" get(endpoint, endpoint_path, credentials) end |
#get_rich_menu_image(rich_menu_id) ⇒ Net::HTTPResponse
Download an image associated with a rich menu
450 451 452 453 454 455 |
# File 'lib/line/bot/client.rb', line 450 def () channel_token_required endpoint_path = "/bot/richmenu/#{rich_menu_id}/content" get(blob_endpoint, endpoint_path, credentials) end |
#get_rich_menus ⇒ Net::HTTPResponse
Get a list of all uploaded rich menus
260 261 262 263 264 265 |
# File 'lib/line/bot/client.rb', line 260 def channel_token_required endpoint_path = '/bot/richmenu/list' get(endpoint, endpoint_path, credentials) end |
#get_room_member_ids(room_id, continuation_token = nil) ⇒ Net::HTTPResponse
Get user IDs of a room
249 250 251 252 253 254 255 |
# File 'lib/line/bot/client.rb', line 249 def get_room_member_ids(room_id, continuation_token = nil) channel_token_required endpoint_path = "/bot/room/#{room_id}/members/ids" endpoint_path += "?start=#{continuation_token}" if continuation_token get(endpoint, endpoint_path, credentials) end |
#get_room_member_profile(room_id, user_id) ⇒ Net::HTTPResponse
Get an user’s profile of a room.
220 221 222 223 224 225 |
# File 'lib/line/bot/client.rb', line 220 def get_room_member_profile(room_id, user_id) channel_token_required endpoint_path = "/bot/room/#{room_id}/member/#{user_id}" get(endpoint, endpoint_path, credentials) end |
#get_user_rich_menu(user_id) ⇒ Net::HTTPResponse
Get the ID of the rich menu linked to a user
356 357 358 359 360 361 |
# File 'lib/line/bot/client.rb', line 356 def (user_id) channel_token_required endpoint_path = "/bot/user/#{user_id}/richmenu" get(endpoint, endpoint_path, credentials) end |
#issue_channel_token(grant_type = 'client_credentials') ⇒ Net::HTTPResponse
Issue channel access token
75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/line/bot/client.rb', line 75 def issue_channel_token(grant_type = 'client_credentials') channel_id_required channel_secret_required endpoint_path = '/oauth/accessToken' payload = URI.encode_www_form( grant_type: grant_type, client_id: channel_id, client_secret: channel_secret ) headers = { 'Content-Type' => 'application/x-www-form-urlencoded' } post(endpoint, endpoint_path, payload, headers) end |
#leave_group(group_id) ⇒ Object
163 164 165 166 167 168 |
# File 'lib/line/bot/client.rb', line 163 def leave_group(group_id) channel_token_required endpoint_path = "/bot/group/#{group_id}/leave" post(endpoint, endpoint_path, nil, credentials) end |
#leave_room(room_id) ⇒ Object
170 171 172 173 174 175 |
# File 'lib/line/bot/client.rb', line 170 def leave_room(room_id) channel_token_required endpoint_path = "/bot/room/#{room_id}/leave" post(endpoint, endpoint_path, nil, credentials) end |
#link_user_rich_menu(user_id, rich_menu_id) ⇒ Net::HTTPResponse
Link a rich menu to a user
401 402 403 404 405 406 |
# File 'lib/line/bot/client.rb', line 401 def (user_id, ) channel_token_required endpoint_path = "/bot/user/#{user_id}/richmenu/#{rich_menu_id}" post(endpoint, endpoint_path, nil, credentials) end |
#multicast(to, messages) ⇒ Net::HTTPResponse
Multicast messages to line server and to users.
137 138 139 140 141 142 143 144 145 146 |
# File 'lib/line/bot/client.rb', line 137 def multicast(to, ) channel_token_required to = [to] if to.is_a?(String) = [] if .is_a?(Hash) endpoint_path = '/bot/message/multicast' payload = { to: to, messages: }.to_json post(endpoint, endpoint_path, payload, credentials) end |
#parse_events_from(request_body) ⇒ Array<Line::Bot::Event::Class>
Parse events from request.body
586 587 588 589 590 591 592 593 594 595 596 597 |
# File 'lib/line/bot/client.rb', line 586 def parse_events_from(request_body) json = JSON.parse(request_body) json['events'].map do |item| begin klass = Line::Bot::Event.const_get(Line::Bot::Util.camelize(item['type'])) klass.new(item) rescue NameError Line::Bot::Event::Base.new(item) end end end |
#post(endpoint_base, endpoint_path, payload = nil, headers = {}) ⇒ Net::HTTPResponse
Post data, get content of specified URL.
564 565 566 567 |
# File 'lib/line/bot/client.rb', line 564 def post(endpoint_base, endpoint_path, payload = nil, headers = {}) headers = Line::Bot::API::DEFAULT_HEADERS.merge(headers) httpclient.post(endpoint_base + endpoint_path, payload, headers) end |
#push_message(user_id, messages) ⇒ Net::HTTPResponse
Push messages to line server and to user.
105 106 107 108 109 110 111 112 113 |
# File 'lib/line/bot/client.rb', line 105 def (user_id, ) channel_token_required = [] if .is_a?(Hash) endpoint_path = '/bot/message/push' payload = { to: user_id, messages: }.to_json post(endpoint, endpoint_path, payload, credentials) end |
#reply_message(token, messages) ⇒ Net::HTTPResponse
Reply messages to line server and to users.
121 122 123 124 125 126 127 128 129 |
# File 'lib/line/bot/client.rb', line 121 def (token, ) channel_token_required = [] if .is_a?(Hash) endpoint_path = '/bot/message/reply' payload = { replyToken: token, messages: }.to_json post(endpoint, endpoint_path, payload, credentials) end |
#revoke_channel_token(access_token) ⇒ Net::HTTPResponse
Revoke channel access token
92 93 94 95 96 97 |
# File 'lib/line/bot/client.rb', line 92 def revoke_channel_token(access_token) endpoint_path = '/oauth/revoke' payload = URI.encode_www_form(access_token: access_token) headers = { 'Content-Type' => 'application/x-www-form-urlencoded' } post(endpoint, endpoint_path, payload, headers) end |
#set_default_rich_menu(rich_menu_id) ⇒ Net::HTTPResponse
Set default rich menu (Link a rich menu to all user)
378 379 380 381 382 383 |
# File 'lib/line/bot/client.rb', line 378 def () channel_token_required endpoint_path = "/bot/user/all/richmenu/#{rich_menu_id}" post(endpoint, endpoint_path, nil, credentials) end |
#unlink_user_rich_menu(user_id) ⇒ Net::HTTPResponse
Unlink a rich menu from a user
413 414 415 416 417 418 |
# File 'lib/line/bot/client.rb', line 413 def (user_id) channel_token_required endpoint_path = "/bot/user/#{user_id}/richmenu" delete(endpoint, endpoint_path, credentials) end |
#unset_default_rich_menu ⇒ Net::HTTPResponse
Unset default rich menu (Unlink a rich menu from all user)
388 389 390 391 392 393 |
# File 'lib/line/bot/client.rb', line 388 def channel_token_required endpoint_path = "/bot/user/all/richmenu" delete(endpoint, endpoint_path, credentials) end |
#validate_signature(content, channel_signature) ⇒ Boolean
Validate signature
605 606 607 608 609 610 611 612 |
# File 'lib/line/bot/client.rb', line 605 def validate_signature(content, channel_signature) return false if !channel_signature || !channel_secret hash = OpenSSL::HMAC.digest(OpenSSL::Digest::SHA256.new, channel_secret, content) signature = Base64.strict_encode64(hash) variable_secure_compare(channel_signature, signature) end |