line-bot 0.1.8 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +43 -221
- data/lib/line/bot.rb +15 -8
- data/lib/line/bot/api.rb +15 -2
- data/lib/line/bot/api/errors.rb +14 -1
- data/lib/line/bot/api/version.rb +15 -1
- data/lib/line/bot/client.rb +89 -164
- data/lib/line/bot/event.rb +22 -0
- data/lib/line/bot/event/base.rb +30 -0
- data/lib/line/bot/event/beacon.rb +22 -0
- data/lib/line/bot/event/follow.rb +22 -0
- data/lib/line/bot/event/join.rb +22 -0
- data/lib/line/bot/event/leave.rb +22 -0
- data/lib/line/bot/event/message.rb +43 -0
- data/lib/line/bot/event/postback.rb +22 -0
- data/lib/line/bot/event/unfollow.rb +22 -0
- data/lib/line/bot/httpclient.rb +14 -0
- data/lib/line/bot/request.rb +19 -23
- data/line-bot.gemspec +3 -7
- metadata +20 -78
- data/lib/line/bot/builder/multiple_message.rb +0 -101
- data/lib/line/bot/builder/rich_message.rb +0 -139
- data/lib/line/bot/event_type.rb +0 -15
- data/lib/line/bot/message.rb +0 -9
- data/lib/line/bot/message/audio.rb +0 -25
- data/lib/line/bot/message/base.rb +0 -35
- data/lib/line/bot/message/contact.rb +0 -18
- data/lib/line/bot/message/content_type.rb +0 -16
- data/lib/line/bot/message/image.rb +0 -23
- data/lib/line/bot/message/location.rb +0 -28
- data/lib/line/bot/message/recipient_type.rb +0 -9
- data/lib/line/bot/message/sticker.rb +0 -26
- data/lib/line/bot/message/text.rb +0 -22
- data/lib/line/bot/message/video.rb +0 -23
- data/lib/line/bot/operation.rb +0 -3
- data/lib/line/bot/operation/added_as_friend.rb +0 -10
- data/lib/line/bot/operation/base.rb +0 -17
- data/lib/line/bot/operation/blocked_account.rb +0 -10
- data/lib/line/bot/operation/op_type.rb +0 -10
- data/lib/line/bot/receive/message.rb +0 -69
- data/lib/line/bot/receive/operation.rb +0 -42
- data/lib/line/bot/receive/request.rb +0 -35
- data/lib/line/bot/response/user/contact.rb +0 -22
- data/lib/line/bot/response/user/profile.rb +0 -30
- data/lib/line/bot/utils.rb +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 022d727188a7bc8cada0886fc76d0540b6f75522
|
4
|
+
data.tar.gz: d3de4dd7bffa8ddb91f7d700ed9c2b17caca1c4b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68cbc45fa77975edc29b35f86f8919beee253666e69b9060603f6c9cde0ab57ef4e0be180ed723442c7cce27b79edf03c73d672796eac9c91b5954eee76e846c
|
7
|
+
data.tar.gz: fd58d020ed26f993561d8fcd2e036f2af45312f4dfa4adcaafdf8305124e6ef9e95ce607fef5293d79962e651cf554d7f67e8b3aabda8c1e77642881d04b472a
|
data/README.md
CHANGED
@@ -3,7 +3,17 @@
|
|
3
3
|
[![Gem-version](https://img.shields.io/gem/v/line-bot-api.svg)](https://rubygems.org/gems/line-bot-api) [![Build Status](https://travis-ci.org/line/line-bot-sdk-ruby.svg?branch=master)](https://travis-ci.org/line/line-bot-sdk-ruby)
|
4
4
|
|
5
5
|
|
6
|
-
Line::Bot::API - SDK of the LINE
|
6
|
+
Line::Bot::API - SDK of the LINE Messaging API for Ruby.
|
7
|
+
|
8
|
+
## About LINE Messaging API
|
9
|
+
|
10
|
+
Please refer to the official api documents for details.
|
11
|
+
|
12
|
+
https://devdocs.line.me/
|
13
|
+
|
14
|
+
## Synopsis
|
15
|
+
|
16
|
+
usage is:
|
7
17
|
|
8
18
|
```ruby
|
9
19
|
# app.rb
|
@@ -12,27 +22,35 @@ require 'line/bot'
|
|
12
22
|
|
13
23
|
def client
|
14
24
|
@client ||= Line::Bot::Client.new { |config|
|
15
|
-
config.channel_id = ENV["LINE_CHANNEL_ID"]
|
16
25
|
config.channel_secret = ENV["LINE_CHANNEL_SECRET"]
|
17
|
-
config.
|
26
|
+
config.channel_token = ENV["LINE_CHANNEL_TOKEN"]
|
18
27
|
}
|
19
28
|
end
|
20
29
|
|
21
30
|
post '/callback' do
|
22
|
-
|
23
|
-
|
31
|
+
body = request.body.read
|
32
|
+
|
33
|
+
signature = request.env['HTTP_X_LINE_SIGNATURE']
|
34
|
+
unless client.validate_signature(body, signature)
|
24
35
|
error 400 do 'Bad Request' end
|
25
36
|
end
|
26
37
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
38
|
+
events = client.parse_events_from(body)
|
39
|
+
events.each { |event|
|
40
|
+
case event
|
41
|
+
when Line::Bot::Event::Message
|
42
|
+
case event.type
|
43
|
+
when Line::Bot::Event::MessageType::Text
|
44
|
+
message = {
|
45
|
+
type: 'text',
|
46
|
+
text: event.message['text']
|
47
|
+
}
|
48
|
+
client.reply_message(event['replyToken'], message)
|
49
|
+
when Line::Bot::Event::MessageType::Image, Line::Bot::Event::MessageType::Video
|
50
|
+
response = client.get_message_content(event.message['id'])
|
51
|
+
tf = Tempfile.open("content")
|
52
|
+
tf.write(response.body)
|
53
|
+
end
|
36
54
|
end
|
37
55
|
}
|
38
56
|
|
@@ -56,214 +74,18 @@ Or install it yourself as:
|
|
56
74
|
|
57
75
|
$ gem install line-bot-api
|
58
76
|
|
59
|
-
## Configuration
|
60
|
-
|
61
|
-
```ruby
|
62
|
-
client = Line::Bot::Client.new do |config|
|
63
|
-
config.channel_id = 'YOUR LINE BOT Channel ID'
|
64
|
-
config.channel_secret = 'YOUR LINE BOT Channel Secret'
|
65
|
-
config.channel_mid = 'YOUR LINE BOT MID'
|
66
|
-
end
|
67
|
-
```
|
68
|
-
|
69
|
-
## Usage
|
70
|
-
|
71
|
-
### Sending messages
|
72
|
-
|
73
|
-
After configuring a client, you can start sending messages as the following reference.
|
74
|
-
|
75
|
-
- [https://developers.line.me/bot-api/api-reference#sending_message](https://developers.line.me/bot-api/api-reference#sending_message)
|
76
|
-
|
77
|
-
Sending message APIs requires the following parameter.
|
78
|
-
- `:to_mid` String or Array
|
79
|
-
|
80
|
-
```ruby
|
81
|
-
client.send_text(
|
82
|
-
to_mid: '12345678',
|
83
|
-
)
|
84
|
-
client.send_text(
|
85
|
-
to_mid: ['12345678', '23456789'],
|
86
|
-
)
|
87
|
-
```
|
88
|
-
|
89
|
-
#### send_text
|
90
|
-
|
91
|
-
```ruby
|
92
|
-
client.send_text(
|
93
|
-
to_mid: to_mid,
|
94
|
-
text: 'Hello',
|
95
|
-
)
|
96
|
-
```
|
97
|
-
|
98
|
-
#### send_image
|
99
|
-
|
100
|
-
```ruby
|
101
|
-
client.send_image(
|
102
|
-
to_mid: to_mid,
|
103
|
-
image_url: 'http://example.com/image.jpg', # originalContentUrl
|
104
|
-
preview_url: 'http://example.com/image_preview.jpg', # previewImageUrl
|
105
|
-
)
|
106
|
-
```
|
107
|
-
|
108
|
-
#### send_video
|
109
|
-
|
110
|
-
```ruby
|
111
|
-
client.send_video(
|
112
|
-
to_mid: to_mid,
|
113
|
-
video_url: 'http://example.com/video.mp4', # originalContentUrl
|
114
|
-
preview_url: 'http://example.com/video_preview.jpg' # previewImageUrl
|
115
|
-
)
|
116
|
-
```
|
117
|
-
|
118
|
-
#### send_audio
|
119
|
-
|
120
|
-
```ruby
|
121
|
-
client.send_audio(
|
122
|
-
to_mid: to_mid,
|
123
|
-
audio_url: 'http://example.com/audio.mp3', # originalContentUrl
|
124
|
-
duration: 120000
|
125
|
-
)
|
126
|
-
```
|
127
|
-
|
128
|
-
#### send_location
|
129
|
-
|
130
|
-
```ruby
|
131
|
-
client.send_location(
|
132
|
-
to_mid: to_mid,
|
133
|
-
title: 'LINE Corporation.',
|
134
|
-
address: 'Hikarie Shibuya-ku Tokyo 151-0002', # location.address
|
135
|
-
latitude: 35.61823286112982, # location.latitude
|
136
|
-
longitude: 139.72824096679688, # location.longitude
|
137
|
-
)
|
138
|
-
```
|
139
|
-
|
140
|
-
#### send_sticker
|
141
|
-
|
142
|
-
See online documentation to find which sticker's you can send.
|
143
|
-
|
144
|
-
- [https://developers.line.me/bot-api/api-reference#sending_message_sticker](https://developers.line.me/bot-api/api-reference#sending_message_sticker)
|
145
|
-
|
146
|
-
```ruby
|
147
|
-
client.send_sticker(
|
148
|
-
to_mid: to_mid,
|
149
|
-
stkpkgid: 2, # contentMetadata.STKPKGID
|
150
|
-
stkid: 144, # contentMetadata.STKID
|
151
|
-
stkver: 100 # contentMetadata.STKVER
|
152
|
-
)
|
153
|
-
```
|
154
|
-
|
155
|
-
### Sending multiple message
|
156
|
-
|
157
|
-
Support on sending multiple message.
|
158
|
-
- [https://developers.line.me/bot-api/api-reference#sending_multiple_messages](https://developers.line.me/bot-api/api-reference#sending_multiple_messages)
|
159
|
-
|
160
|
-
```ruby
|
161
|
-
client.multiple_message.add_text(
|
162
|
-
text: text,
|
163
|
-
).add_image(
|
164
|
-
image_url: image_url,
|
165
|
-
preview_url: preview_url,
|
166
|
-
).add_video(
|
167
|
-
video_url: video_url,
|
168
|
-
preview_url: preview_url,
|
169
|
-
).add_audio(
|
170
|
-
audio_url: audio_url,
|
171
|
-
duration: duration,
|
172
|
-
).add_location(
|
173
|
-
title: 'title',
|
174
|
-
latitude: latitude,
|
175
|
-
longitude: longitude,
|
176
|
-
).add_sticker(
|
177
|
-
stkpkgid: stkpkgid,
|
178
|
-
stkid: stkid,
|
179
|
-
stkver: stkver,
|
180
|
-
).send(
|
181
|
-
to_mid: to_mid,
|
182
|
-
)
|
183
|
-
```
|
184
|
-
|
185
|
-
### Sending rich message
|
186
|
-
|
187
|
-
Support on sending rich message.
|
188
|
-
|
189
|
-
See also a online document.
|
190
|
-
- [https://developers.line.me/bot-api/api-reference#sending_rich_content_message](https://developers.line.me/bot-api/api-reference#sending_rich_content_message)
|
191
|
-
|
192
|
-
```ruby
|
193
|
-
client.rich_message.set_action(
|
194
|
-
MANGA: {
|
195
|
-
text: 'manga',
|
196
|
-
link_url: link_url,
|
197
|
-
}
|
198
|
-
).add_listener(
|
199
|
-
action: 'MANGA',
|
200
|
-
x: 0,
|
201
|
-
y: 0,
|
202
|
-
width: 520,
|
203
|
-
height: 520,
|
204
|
-
).send(
|
205
|
-
to_mid: to_mid,
|
206
|
-
image_url: image_url,
|
207
|
-
alt_text: alt_text,
|
208
|
-
)
|
209
|
-
```
|
210
|
-
|
211
|
-
### Signature validation
|
212
|
-
|
213
|
-
```ruby
|
214
|
-
request = Rack::Request.new( .. )
|
215
|
-
signature = request.env['HTTP_X_LINE_CHANNELSIGNATURE']
|
216
|
-
unless client.validate_signature(request.body.read, signature)
|
217
|
-
return 'invalidation of signature'
|
218
|
-
end
|
219
|
-
```
|
220
|
-
|
221
|
-
### Receiving request
|
222
|
-
|
223
|
-
```ruby
|
224
|
-
request = Rack::Request.new( .. )
|
225
|
-
|
226
|
-
receive_request = Line::Bot::Receive::Request.new(request.env)
|
227
|
-
receive_request.data #=> [Array<Line::Bot::Receive::Message || Line::Bot::Receive::Operation>]
|
228
|
-
|
229
|
-
receive_request.data.each { |message|
|
230
|
-
case message.content
|
231
|
-
when Line::Bot::Message::Image, Line::Bot::Message::Video
|
232
|
-
# get message content
|
233
|
-
response = client.get_message_content(message.id)
|
234
|
-
tf = Tempfile.open("content")
|
235
|
-
tf.write(response.body)
|
236
|
-
|
237
|
-
# get preview of message content
|
238
|
-
preview_response = client.get_message_content_preview(message.id)
|
239
|
-
ptf = Tempfile.open("content_preview")
|
240
|
-
ptf.write(preview_response.body)
|
241
|
-
end
|
242
|
-
}
|
243
|
-
```
|
244
|
-
|
245
|
-
### Getting message content
|
246
|
-
|
247
|
-
Get the original file which was sent by user.
|
248
|
-
|
249
|
-
### Getting preview of message content
|
250
|
-
|
251
|
-
Get the preview image file which was sent by user.
|
252
|
-
|
253
|
-
### Getting user profile information
|
254
|
-
|
255
|
-
```ruby
|
256
|
-
user_profile = client.get_user_profile("1234567")
|
257
|
-
user_profile #=> [Line::Bot::Response::User::Profile]
|
258
|
-
user_profile.contacts #=> [Array<Line::Bot::Response::User::Contact>]
|
259
|
-
```
|
260
|
-
|
261
77
|
## License
|
262
78
|
|
263
|
-
|
79
|
+
Copyright (C) 2016 LINE Corporation.
|
80
|
+
|
81
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
82
|
+
you may not use this file except in compliance with the License.
|
83
|
+
You may obtain a copy of the License at
|
264
84
|
|
265
|
-
|
85
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
266
86
|
|
267
|
-
|
268
|
-
|
269
|
-
|
87
|
+
Unless required by applicable law or agreed to in writing, software
|
88
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
89
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
90
|
+
See the License for the specific language governing permissions and
|
91
|
+
limitations under the License.
|
data/lib/line/bot.rb
CHANGED
@@ -1,14 +1,21 @@
|
|
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
|
+
|
1
15
|
require 'line/bot/client'
|
16
|
+
require 'line/bot/event'
|
2
17
|
require 'line/bot/api/errors'
|
3
18
|
require 'line/bot/api'
|
4
|
-
require 'line/bot/event_type'
|
5
|
-
require 'line/bot/message'
|
6
|
-
require 'line/bot/operation'
|
7
|
-
require 'line/bot/receive/message'
|
8
|
-
require 'line/bot/receive/operation'
|
9
|
-
require 'line/bot/receive/request'
|
10
|
-
require 'line/bot/response/user/profile'
|
11
19
|
require 'line/bot/request'
|
12
20
|
require 'line/bot/httpclient'
|
13
|
-
require 'line/bot/utils'
|
14
21
|
require 'line/bot/api/version'
|
data/lib/line/bot/api.rb
CHANGED
@@ -1,8 +1,21 @@
|
|
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
|
+
|
1
15
|
module Line
|
2
16
|
module Bot
|
3
17
|
module API
|
4
|
-
DEFAULT_ENDPOINT = "https://
|
5
|
-
DEFAULT_SENDING_MESSAGE_CHANNEL_ID = 1383378250
|
18
|
+
DEFAULT_ENDPOINT = "https://api.line.me/v2/bot"
|
6
19
|
end
|
7
20
|
end
|
8
21
|
end
|
data/lib/line/bot/api/errors.rb
CHANGED
@@ -1,9 +1,22 @@
|
|
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
|
+
|
1
15
|
module Line
|
2
16
|
module Bot
|
3
17
|
module API
|
4
18
|
class Error < StandardError; end
|
5
19
|
class InvalidCredentialsError < Error; end
|
6
|
-
class NotSupportedError < Error; end
|
7
20
|
end
|
8
21
|
end
|
9
22
|
end
|
data/lib/line/bot/api/version.rb
CHANGED
@@ -1,7 +1,21 @@
|
|
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
|
+
|
1
15
|
module Line
|
2
16
|
module Bot
|
3
17
|
module API
|
4
|
-
VERSION = "0.
|
18
|
+
VERSION = "1.0.0"
|
5
19
|
end
|
6
20
|
end
|
7
21
|
end
|
data/lib/line/bot/client.rb
CHANGED
@@ -1,19 +1,32 @@
|
|
1
|
-
|
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
|
+
|
2
15
|
require 'line/bot/request'
|
3
|
-
require 'line/bot/builder/rich_message'
|
4
|
-
require 'line/bot/builder/multiple_message'
|
5
16
|
require 'line/bot/api/errors'
|
6
17
|
require 'base64'
|
7
18
|
require 'net/http'
|
19
|
+
require 'openssl'
|
8
20
|
|
9
21
|
module Line
|
10
22
|
module Bot
|
11
23
|
class Client
|
12
24
|
|
13
|
-
include Line::Bot::Utils
|
14
|
-
|
15
25
|
# @return [String]
|
16
|
-
attr_accessor :
|
26
|
+
attr_accessor :channel_token, :channel_secret, :endpoint
|
27
|
+
|
28
|
+
# @return [Object]
|
29
|
+
attr_accessor :httpclient
|
17
30
|
|
18
31
|
# Initialize a new Bot Client.
|
19
32
|
#
|
@@ -25,7 +38,9 @@ module Line
|
|
25
38
|
instance_variable_set("@#{key}", value)
|
26
39
|
end
|
27
40
|
yield(self) if block_given?
|
41
|
+
end
|
28
42
|
|
43
|
+
def httpclient
|
29
44
|
@httpclient ||= Line::Bot::HTTPClient.new
|
30
45
|
end
|
31
46
|
|
@@ -33,16 +48,10 @@ module Line
|
|
33
48
|
@endpoint ||= Line::Bot::API::DEFAULT_ENDPOINT
|
34
49
|
end
|
35
50
|
|
36
|
-
def to_channel_id
|
37
|
-
@to_channel_id ||= Line::Bot::API::DEFAULT_SENDING_MESSAGE_CHANNEL_ID
|
38
|
-
end
|
39
|
-
|
40
51
|
# @return [Hash]
|
41
52
|
def credentials
|
42
53
|
{
|
43
|
-
|
44
|
-
'X-Line-ChannelSecret' => channel_secret,
|
45
|
-
'X-Line-Trusted-User-With-ACL' => channel_mid,
|
54
|
+
"Authorization" => "Bearer #{channel_token}",
|
46
55
|
}
|
47
56
|
end
|
48
57
|
|
@@ -50,137 +59,73 @@ module Line
|
|
50
59
|
credentials.values.all?
|
51
60
|
end
|
52
61
|
|
53
|
-
#
|
54
|
-
#
|
55
|
-
# @param attrs [Hash]
|
56
|
-
# @param to_mid [String or Array] User's identifiers
|
57
|
-
# @param text [String]
|
62
|
+
# Push messages to line server and to users.
|
58
63
|
#
|
59
|
-
# @
|
64
|
+
# @param user_id [String] User's identifiers
|
65
|
+
# @param messages [Hash or Array]
|
60
66
|
#
|
61
67
|
# @return [Net::HTTPResponse]
|
62
|
-
def
|
63
|
-
|
64
|
-
text: attrs[:text],
|
65
|
-
)
|
66
|
-
send_message(attrs[:to_mid], message)
|
67
|
-
end
|
68
|
+
def push_message(user_id, messages)
|
69
|
+
raise Line::Bot::API::InvalidCredentialsError, 'Invalidates credentials' unless credentials?
|
68
70
|
|
69
|
-
|
70
|
-
#
|
71
|
-
# @param attrs [Hash]
|
72
|
-
# @param to_mid [String or Array] User's identifiers
|
73
|
-
# @param image_url [String] Image file's url
|
74
|
-
# @param preview_url [String] Preview image file's url
|
75
|
-
#
|
76
|
-
# @raise [ArgumentError] Error raised when supplied argument are missing :to_mid, :image_url, :preview_url keys.
|
77
|
-
#
|
78
|
-
# @return [Net::HTTPResponse]
|
79
|
-
def send_image(attrs = {})
|
80
|
-
message = Message::Image.new(
|
81
|
-
image_url: attrs[:image_url],
|
82
|
-
preview_url: attrs[:preview_url],
|
83
|
-
)
|
84
|
-
send_message(attrs[:to_mid], message)
|
85
|
-
end
|
71
|
+
messages = [messages] if messages.is_a?(Hash)
|
86
72
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
#
|
96
|
-
# @return [Net::HTTPResponse]
|
97
|
-
def send_video(attrs = {})
|
98
|
-
message = Message::Video.new(
|
99
|
-
video_url: attrs[:video_url],
|
100
|
-
preview_url: attrs[:preview_url],
|
101
|
-
)
|
102
|
-
send_message(attrs[:to_mid], message)
|
103
|
-
end
|
73
|
+
request = Request.new do |config|
|
74
|
+
config.httpclient = httpclient
|
75
|
+
config.endpoint = endpoint
|
76
|
+
config.endpoint_path = '/message/push'
|
77
|
+
config.credentials = credentials
|
78
|
+
config.to = user_id
|
79
|
+
config.messages = messages
|
80
|
+
end
|
104
81
|
|
105
|
-
|
106
|
-
#
|
107
|
-
# @param attrs [Hash]
|
108
|
-
# @param to_mid [String or Array] User's identifiers
|
109
|
-
# @param audio_url [String] Audio file's url
|
110
|
-
# @param duration [String or Integer] Voice message's length, milliseconds
|
111
|
-
#
|
112
|
-
# @raise [ArgumentError] Error raised when supplied argument are missing :to_mid, :audio_url, :duration keys.
|
113
|
-
#
|
114
|
-
# @return [Net::HTTPResponse]
|
115
|
-
def send_audio(attrs = {})
|
116
|
-
message = Message::Audio.new(
|
117
|
-
audio_url: attrs[:audio_url],
|
118
|
-
duration: attrs[:duration],
|
119
|
-
)
|
120
|
-
send_message(attrs[:to_mid], message)
|
82
|
+
request.post
|
121
83
|
end
|
122
84
|
|
123
|
-
#
|
124
|
-
#
|
125
|
-
# @param attrs [Hash]
|
126
|
-
# @param to_mid [String or Array] User's identifiers
|
127
|
-
# @param title [String] Location's title
|
128
|
-
# @param address [String] Location's address
|
129
|
-
# @param latitude [Float] Location's latitude
|
130
|
-
# @param longitude [Float] Location's longitude
|
85
|
+
# Reply messages to line server and to users.
|
131
86
|
#
|
132
|
-
# @
|
87
|
+
# @param token [String]
|
88
|
+
# @param messages [Hash or Array]
|
133
89
|
#
|
134
90
|
# @return [Net::HTTPResponse]
|
135
|
-
def
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
91
|
+
def reply_message(token, messages)
|
92
|
+
raise Line::Bot::API::InvalidCredentialsError, 'Invalidates credentials' unless credentials?
|
93
|
+
|
94
|
+
messages = [messages] if messages.is_a?(Hash)
|
95
|
+
|
96
|
+
request = Request.new do |config|
|
97
|
+
config.httpclient = httpclient
|
98
|
+
config.endpoint = endpoint
|
99
|
+
config.endpoint_path = '/message/reply'
|
100
|
+
config.credentials = credentials
|
101
|
+
config.reply_token = token
|
102
|
+
config.messages = messages
|
103
|
+
end
|
104
|
+
|
105
|
+
request.post
|
143
106
|
end
|
144
107
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
def send_sticker(attrs = {})
|
157
|
-
message = Message::Sticker.new(
|
158
|
-
stkpkgid: attrs[:stkpkgid],
|
159
|
-
stkid: attrs[:stkid],
|
160
|
-
stkver: attrs[:stkver],
|
161
|
-
)
|
162
|
-
send_message(attrs[:to_mid], message)
|
108
|
+
def leave_group(group_id)
|
109
|
+
raise Line::Bot::API::InvalidCredentialsError, 'Invalidates credentials' unless credentials?
|
110
|
+
|
111
|
+
request = Request.new do |config|
|
112
|
+
config.httpclient = httpclient
|
113
|
+
config.endpoint = endpoint
|
114
|
+
config.endpoint_path = "/group/#{group_id}/leave"
|
115
|
+
config.credentials = credentials
|
116
|
+
end
|
117
|
+
|
118
|
+
request.post
|
163
119
|
end
|
164
120
|
|
165
|
-
|
166
|
-
#
|
167
|
-
# @param to_mid [String or Array] User's identifiers
|
168
|
-
# @param message [Line::Bot::Message]
|
169
|
-
#
|
170
|
-
# @raise [ArgumentError] Error raised when supplied argument are missing message.
|
171
|
-
#
|
172
|
-
# @return [Net::HTTPResponse]
|
173
|
-
def send_message(to_mid, message)
|
121
|
+
def leave_room(room_id)
|
174
122
|
raise Line::Bot::API::InvalidCredentialsError, 'Invalidates credentials' unless credentials?
|
175
123
|
|
176
124
|
request = Request.new do |config|
|
177
|
-
config.to_channel_id = to_channel_id
|
178
125
|
config.httpclient = httpclient
|
179
126
|
config.endpoint = endpoint
|
180
|
-
config.endpoint_path =
|
127
|
+
config.endpoint_path = "/room/#{room_id}/leave"
|
181
128
|
config.credentials = credentials
|
182
|
-
config.to_mid = to_mid
|
183
|
-
config.message = message
|
184
129
|
end
|
185
130
|
|
186
131
|
request.post
|
@@ -190,45 +135,22 @@ module Line
|
|
190
135
|
#
|
191
136
|
# @param identifier [String] Message's identifier
|
192
137
|
#
|
193
|
-
# @raise [ArgumentError] Error raised when supplied argument are missing message.
|
194
|
-
#
|
195
138
|
# @return [Net::HTTPResponse]
|
196
139
|
def get_message_content(identifier)
|
197
|
-
endpoint_path = "/
|
140
|
+
endpoint_path = "/message/#{identifier}/content"
|
198
141
|
get(endpoint_path)
|
199
142
|
end
|
200
143
|
|
201
|
-
# Get
|
144
|
+
# Get an user's profile.
|
202
145
|
#
|
203
|
-
# @param
|
204
|
-
#
|
205
|
-
# @raise [ArgumentError] Error raised when supplied argument are missing message.
|
146
|
+
# @param user_id [String] User's identifiers
|
206
147
|
#
|
207
148
|
# @return [Net::HTTPResponse]
|
208
|
-
def
|
209
|
-
endpoint_path = "/
|
149
|
+
def get_profile(user_id)
|
150
|
+
endpoint_path = "/profile/#{user_id}"
|
210
151
|
get(endpoint_path)
|
211
152
|
end
|
212
153
|
|
213
|
-
# Get user profile.
|
214
|
-
#
|
215
|
-
# @param mids [String or Array] User's identifiers
|
216
|
-
#
|
217
|
-
# @raise [ArgumentError] Error raised when supplied argument are missing message.
|
218
|
-
# @raise [HTTPError]
|
219
|
-
#
|
220
|
-
# @return [Line::Bot::Response::User::Profile]
|
221
|
-
def get_user_profile(mids)
|
222
|
-
raise ArgumentError, 'Wrong argument type `mids`' unless validate_mids(mids)
|
223
|
-
|
224
|
-
query = mids.is_a?(Array) ? mids.join(',') : mids
|
225
|
-
endpoint_path = "/profiles?mids=#{query}"
|
226
|
-
|
227
|
-
response = get(endpoint_path)
|
228
|
-
|
229
|
-
Line::Bot::Response::User::Profile.new(response) if !response.value
|
230
|
-
end
|
231
|
-
|
232
154
|
# Fetch data, get content of specified URL.
|
233
155
|
#
|
234
156
|
# @param endpoint_path [String]
|
@@ -238,7 +160,6 @@ module Line
|
|
238
160
|
raise Line::Bot::API::InvalidCredentialsError, 'Invalidates credentials' unless credentials?
|
239
161
|
|
240
162
|
request = Request.new do |config|
|
241
|
-
config.to_channel_id = to_channel_id
|
242
163
|
config.httpclient = httpclient
|
243
164
|
config.endpoint = endpoint
|
244
165
|
config.endpoint_path = endpoint_path
|
@@ -248,28 +169,32 @@ module Line
|
|
248
169
|
request.get
|
249
170
|
end
|
250
171
|
|
251
|
-
#
|
172
|
+
# Parse events from request.body
|
252
173
|
#
|
253
|
-
# @
|
254
|
-
def rich_message
|
255
|
-
Line::Bot::Builder::RichMessage.new(self)
|
256
|
-
end
|
257
|
-
|
258
|
-
# Create multiple message to line server and to users.
|
174
|
+
# @param request_body [String]
|
259
175
|
#
|
260
|
-
# @return [Line::Bot::
|
261
|
-
def
|
262
|
-
|
176
|
+
# @return [Array<Line::Bot::Event::Class>]
|
177
|
+
def parse_events_from(request_body)
|
178
|
+
json = JSON.parse(request_body)
|
179
|
+
|
180
|
+
json['events'].map { |item|
|
181
|
+
begin
|
182
|
+
klass = Line::Bot::Event.const_get(item['type'].capitalize)
|
183
|
+
klass.new(item)
|
184
|
+
rescue NameError => e
|
185
|
+
Line::Bot::Event::Base.new(item)
|
186
|
+
end
|
187
|
+
}
|
263
188
|
end
|
264
189
|
|
265
190
|
# Validate signature
|
266
191
|
#
|
267
192
|
# @param content [String] Request's body
|
268
|
-
# @param channel_signature [String] Request'header 'X-LINE-
|
193
|
+
# @param channel_signature [String] Request'header 'X-LINE-Signature' # HTTP_X_LINE_SIGNATURE
|
269
194
|
#
|
270
195
|
# @return [Boolean]
|
271
196
|
def validate_signature(content = "", channel_signature)
|
272
|
-
return false
|
197
|
+
return false if !channel_signature || !channel_secret
|
273
198
|
|
274
199
|
hash = OpenSSL::HMAC::digest(OpenSSL::Digest::SHA256.new, channel_secret, content)
|
275
200
|
signature = Base64.strict_encode64(hash)
|