Skip to content

Commit d530254

Browse files
authored
Merge pull request #245 from yskkin/additional_request_body
additional request body for push_message and multicast
2 parents 87f775b + c628322 commit d530254

13 files changed

+936
-16
lines changed

lib/line/bot/client.rb

+6-4
Original file line numberDiff line numberDiff line change
@@ -166,14 +166,15 @@ def get_channel_access_token_key_ids_jwt(jwt)
166166
# @param user_id [String] User Id
167167
# @param messages [Hash or Array] Message Objects
168168
# @param headers [Hash] HTTP Headers
169+
# @param payload [Hash] Additional request body
169170
# @return [Net::HTTPResponse]
170-
def push_message(user_id, messages, headers: {})
171+
def push_message(user_id, messages, headers: {}, payload: {})
171172
channel_token_required
172173

173174
messages = [messages] if messages.is_a?(Hash)
174175

175176
endpoint_path = '/bot/message/push'
176-
payload = { to: user_id, messages: messages }.to_json
177+
payload = payload.merge({ to: user_id, messages: messages }).to_json
177178
post(endpoint, endpoint_path, payload, credentials.merge(headers))
178179
end
179180

@@ -212,15 +213,16 @@ def reply_message(token, messages)
212213
# @param to [Array or String] Array of userIds
213214
# @param messages [Hash or Array] Message Objects
214215
# @param headers [Hash] HTTP Headers
216+
# @param payload [Hash] Additional request body
215217
# @return [Net::HTTPResponse]
216-
def multicast(to, messages, headers: {})
218+
def multicast(to, messages, headers: {}, payload: {})
217219
channel_token_required
218220

219221
to = [to] if to.is_a?(String)
220222
messages = [messages] if messages.is_a?(Hash)
221223

222224
endpoint_path = '/bot/message/multicast'
223-
payload = { to: to, messages: messages }.to_json
225+
payload = payload.merge({ to: to, messages: messages }).to_json
224226
post(endpoint, endpoint_path, payload, credentials.merge(headers))
225227
end
226228

spec/line/bot/send_message_01_text_spec.rb

+50
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,31 @@
2727
expect(response.body).to eq(expected)
2828
end
2929

30+
it 'push the text message with additional payload' do
31+
uri_template = Addressable::Template.new Line::Bot::API::DEFAULT_ENDPOINT + '/bot/message/push'
32+
stub_request(:post, uri_template).to_return { |request| {body: request.body, status: 200} }
33+
34+
client = Line::Bot::Client.new do |config|
35+
config.channel_token = 'channel_token'
36+
end
37+
38+
user_id = 'user_id'
39+
message = {
40+
type: 'text',
41+
text: 'Hello, world'
42+
}
43+
response = client.push_message(user_id, message, payload: {customAggregationUnits: ['test']})
44+
45+
expected = {
46+
customAggregationUnits: ['test'],
47+
to: user_id,
48+
messages: [
49+
message
50+
]
51+
}.to_json
52+
expect(response.body).to eq(expected)
53+
end
54+
3055
it 'replies the text message' do
3156
uri_template = Addressable::Template.new Line::Bot::API::DEFAULT_ENDPOINT + '/bot/message/reply'
3257
stub_request(:post, uri_template).to_return { |request| {body: request.body, status: 200} }
@@ -75,6 +100,31 @@
75100
expect(response.body).to eq(expected)
76101
end
77102

103+
it 'multicasts the text message with additional payload' do
104+
uri_template = Addressable::Template.new Line::Bot::API::DEFAULT_ENDPOINT + '/bot/message/multicast'
105+
stub_request(:post, uri_template).to_return { |request| {body: request.body, status: 200} }
106+
107+
client = Line::Bot::Client.new do |config|
108+
config.channel_token = 'channel_token'
109+
end
110+
111+
user_ids = ['user1', 'user2']
112+
message = {
113+
type: 'text',
114+
text: 'Hello, world'
115+
}
116+
response = client.multicast(user_ids, message, payload: {customAggregationUnits: ['test']})
117+
118+
expected = {
119+
customAggregationUnits: ['test'],
120+
to: user_ids,
121+
messages: [
122+
message
123+
],
124+
}.to_json
125+
expect(response.body).to eq(expected)
126+
end
127+
78128
it 'broadcasts the text message' do
79129
uri_template = Addressable::Template.new Line::Bot::API::DEFAULT_ENDPOINT + '/bot/message/broadcast'
80130
stub_request(:post, uri_template).to_return { |request| {body: request.body, status: 200} }

spec/line/bot/send_message_02_image_spec.rb

+52
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,32 @@
2828
expect(response.body).to eq(expected)
2929
end
3030

31+
it 'pushes the image message with additional payload' do
32+
uri_template = Addressable::Template.new Line::Bot::API::DEFAULT_ENDPOINT + '/bot/message/push'
33+
stub_request(:post, uri_template).to_return { |request| {body: request.body, status: 200} }
34+
35+
client = Line::Bot::Client.new do |config|
36+
config.channel_token = 'channel_token'
37+
end
38+
39+
user_id = 'user_id'
40+
message = {
41+
type: 'image',
42+
originalContentUrl: 'https://example.com/image.jpg',
43+
previewImageUrl: 'https://example.com/image_preview.jpg',
44+
}
45+
response = client.push_message(user_id, message, payload: {'customAggregationUnits' => ['test']})
46+
47+
expected = {
48+
customAggregationUnits: ['test'],
49+
to: user_id,
50+
messages: [
51+
message
52+
]
53+
}.to_json
54+
expect(response.body).to eq(expected)
55+
end
56+
3157
it 'replies the image message' do
3258
uri_template = Addressable::Template.new Line::Bot::API::DEFAULT_ENDPOINT + '/bot/message/reply'
3359
stub_request(:post, uri_template).to_return { |request| {body: request.body, status: 200} }
@@ -77,4 +103,30 @@
77103
}.to_json
78104
expect(response.body).to eq(expected)
79105
end
106+
107+
it 'multicasts the image message with additional payload' do
108+
uri_template = Addressable::Template.new Line::Bot::API::DEFAULT_ENDPOINT + '/bot/message/multicast'
109+
stub_request(:post, uri_template).to_return { |request| {body: request.body, status: 200} }
110+
111+
client = Line::Bot::Client.new do |config|
112+
config.channel_token = 'channel_token'
113+
end
114+
115+
user_ids = ['user1', 'user2']
116+
message = {
117+
type: 'image',
118+
originalContentUrl: 'https://example.com/image.jpg',
119+
previewImageUrl: 'https://example.com/image_preview.jpg',
120+
}
121+
response = client.multicast(user_ids, message, payload: {'customAggregationUnits' => ['test']})
122+
123+
expected = {
124+
customAggregationUnits: ['test'],
125+
to: user_ids,
126+
messages: [
127+
message
128+
]
129+
}.to_json
130+
expect(response.body).to eq(expected)
131+
end
80132
end

spec/line/bot/send_message_03_video_spec.rb

+52
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,32 @@
2828
expect(response.body).to eq(expected)
2929
end
3030

31+
it 'pushes the video message with additional payload' do
32+
uri_template = Addressable::Template.new Line::Bot::API::DEFAULT_ENDPOINT + '/bot/message/push'
33+
stub_request(:post, uri_template).to_return { |request| {body: request.body, status: 200} }
34+
35+
client = Line::Bot::Client.new do |config|
36+
config.channel_token = 'channel_token'
37+
end
38+
39+
user_id = 'user_id'
40+
message = {
41+
type: 'video',
42+
originalContentUrl: 'https://example.com/video.mp4',
43+
previewImageUrl: 'https://example.com/video_preview.jpg',
44+
}
45+
response = client.push_message(user_id, message, payload: {'customAggregationUnits' => ['test']})
46+
47+
expected = {
48+
customAggregationUnits: ['test'],
49+
to: user_id,
50+
messages: [
51+
message
52+
]
53+
}.to_json
54+
expect(response.body).to eq(expected)
55+
end
56+
3157
it 'replies the video message' do
3258
uri_template = Addressable::Template.new Line::Bot::API::DEFAULT_ENDPOINT + '/bot/message/reply'
3359
stub_request(:post, uri_template).to_return { |request| {body: request.body, status: 200} }
@@ -77,4 +103,30 @@
77103
}.to_json
78104
expect(response.body).to eq(expected)
79105
end
106+
107+
it 'multicasts the video message' do
108+
uri_template = Addressable::Template.new Line::Bot::API::DEFAULT_ENDPOINT + '/bot/message/multicast'
109+
stub_request(:post, uri_template).to_return { |request| {body: request.body, status: 200} }
110+
111+
client = Line::Bot::Client.new do |config|
112+
config.channel_token = 'channel_token'
113+
end
114+
115+
user_ids = ['user1', 'user2']
116+
message = {
117+
type: 'video',
118+
originalContentUrl: 'https://example.com/video.mp4',
119+
previewImageUrl: 'https://example.com/video_preview.jpg',
120+
}
121+
response = client.multicast(user_ids, message, payload: {'customAggregationUnits' => ['test']})
122+
123+
expected = {
124+
customAggregationUnits: ['test'],
125+
to: user_ids,
126+
messages: [
127+
message
128+
]
129+
}.to_json
130+
expect(response.body).to eq(expected)
131+
end
80132
end

spec/line/bot/send_message_04_audio_spec.rb

+52
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,32 @@
2828
expect(response.body).to eq(expected)
2929
end
3030

31+
it 'pushes the audio message with additional payload' do
32+
uri_template = Addressable::Template.new Line::Bot::API::DEFAULT_ENDPOINT + '/bot/message/push'
33+
stub_request(:post, uri_template).to_return { |request| {body: request.body, status: 200} }
34+
35+
client = Line::Bot::Client.new do |config|
36+
config.channel_token = 'channel_token'
37+
end
38+
39+
user_id = 'user_id'
40+
message = {
41+
type: 'audio',
42+
originalContentUrl: 'https://example.com/audio.mp3',
43+
duration: 120000
44+
}
45+
response = client.push_message(user_id, message, payload: {'customAggregationUnits' => ['test']})
46+
47+
expected = {
48+
customAggregationUnits: ['test'],
49+
to: user_id,
50+
messages: [
51+
message
52+
]
53+
}.to_json
54+
expect(response.body).to eq(expected)
55+
end
56+
3157
it 'replies the audio message' do
3258
uri_template = Addressable::Template.new Line::Bot::API::DEFAULT_ENDPOINT + '/bot/message/reply'
3359
stub_request(:post, uri_template).to_return { |request| {body: request.body, status: 200} }
@@ -77,4 +103,30 @@
77103
}.to_json
78104
expect(response.body).to eq(expected)
79105
end
106+
107+
it 'multicasts the audio message with additional payload' do
108+
uri_template = Addressable::Template.new Line::Bot::API::DEFAULT_ENDPOINT + '/bot/message/multicast'
109+
stub_request(:post, uri_template).to_return { |request| {body: request.body, status: 200} }
110+
111+
client = Line::Bot::Client.new do |config|
112+
config.channel_token = 'channel_token'
113+
end
114+
115+
user_ids = ['user1', 'user2']
116+
message = {
117+
type: 'audio',
118+
originalContentUrl: 'https://example.com/audio.mp3',
119+
duration: 120000
120+
}
121+
response = client.multicast(user_ids, message, payload: {'customAggregationUnits' => ['test']})
122+
123+
expected = {
124+
customAggregationUnits: ['test'],
125+
to: user_ids,
126+
messages: [
127+
message
128+
]
129+
}.to_json
130+
expect(response.body).to eq(expected)
131+
end
80132
end

0 commit comments

Comments
 (0)