Skip to content

Commit 36b74f6

Browse files
committed
push_message and multicast can set additional payload
1 parent e49e85e commit 36b74f6

13 files changed

+924
-4
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+
'to' => user_id,
47+
'messages' => [
48+
message
49+
],
50+
'customAggregationUnits' => ['test']
51+
}
52+
expect(JSON.parse(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+
'to' => user_ids,
120+
'messages' => [
121+
message
122+
],
123+
'customAggregationUnits' => ['test']
124+
}
125+
expect(JSON.parse(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+
'to' => user_id,
49+
'messages' => [
50+
message
51+
],
52+
'customAggregationUnits' => ['test']
53+
}
54+
expect(JSON.parse(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+
'to' => user_ids,
125+
'messages' => [
126+
message
127+
],
128+
'customAggregationUnits' => ['test']
129+
}
130+
expect(JSON.parse(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+
'to' => user_id,
49+
'messages' => [
50+
message
51+
],
52+
'customAggregationUnits' => ['test']
53+
}
54+
expect(JSON.parse(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+
'to' => user_ids,
125+
'messages' => [
126+
message
127+
],
128+
'customAggregationUnits' => ['test']
129+
}
130+
expect(JSON.parse(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+
'to' => user_id,
49+
'messages' => [
50+
message
51+
],
52+
'customAggregationUnits' => ['test']
53+
}
54+
expect(JSON.parse(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+
'to' => user_ids,
125+
'messages' => [
126+
message
127+
],
128+
'customAggregationUnits' => ['test']
129+
}
130+
expect(JSON.parse(response.body)).to eq(expected)
131+
end
80132
end

spec/line/bot/send_message_05_location_spec.rb

+56
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,34 @@
3030
expect(response.body).to eq(expected)
3131
end
3232

33+
it 'pushes the location message with additional payload' do
34+
uri_template = Addressable::Template.new Line::Bot::API::DEFAULT_ENDPOINT + '/bot/message/push'
35+
stub_request(:post, uri_template).to_return { |request| {body: request.body, status: 200} }
36+
37+
client = Line::Bot::Client.new do |config|
38+
config.channel_token = 'channel_token'
39+
end
40+
41+
user_id = 'user_id'
42+
message = {
43+
'type' => 'location',
44+
'title' => 'LINE Corporation.',
45+
'address' => 'Hikarie Shibuya-ku Tokyo 151-0002',
46+
'latitude' => 35.61823286112982,
47+
'longitude' => 139.72824096679688,
48+
}
49+
response = client.push_message(user_id, message, payload: {'customAggregationUnits' => ['test']})
50+
51+
expected = {
52+
'to' => user_id,
53+
'messages' => [
54+
message
55+
],
56+
'customAggregationUnits' => ['test']
57+
}
58+
expect(JSON.parse(response.body)).to eq(expected)
59+
end
60+
3361
it 'replies the location message' do
3462
uri_template = Addressable::Template.new Line::Bot::API::DEFAULT_ENDPOINT + '/bot/message/reply'
3563
stub_request(:post, uri_template).to_return { |request| {body: request.body, status: 200} }
@@ -83,4 +111,32 @@
83111
}.to_json
84112
expect(response.body).to eq(expected)
85113
end
114+
115+
it 'multicasts the location message with additional payload' do
116+
uri_template = Addressable::Template.new Line::Bot::API::DEFAULT_ENDPOINT + '/bot/message/multicast'
117+
stub_request(:post, uri_template).to_return { |request| {body: request.body, status: 200} }
118+
119+
client = Line::Bot::Client.new do |config|
120+
config.channel_token = 'channel_token'
121+
end
122+
123+
user_ids = ['user1', 'user2']
124+
message = {
125+
'type' => 'location',
126+
'title' => 'LINE Corporation.',
127+
'address' => 'Hikarie Shibuya-ku Tokyo 151-0002',
128+
'latitude' => 35.61823286112982,
129+
'longitude' => 139.72824096679688,
130+
}
131+
response = client.multicast(user_ids, message, payload: {'customAggregationUnits' => ['test']})
132+
133+
expected = {
134+
'to' => user_ids,
135+
'messages' => [
136+
message
137+
],
138+
'customAggregationUnits' => ['test']
139+
}
140+
expect(JSON.parse(response.body)).to eq(expected)
141+
end
86142
end

0 commit comments

Comments
 (0)