Skip to content

Commit 369d8bc

Browse files
committed
feat: endpoint sending messages by phone numbers
refs https://developers.line.biz/en/reference/partner-docs/#phone-audience-match
1 parent 4c47cdb commit 369d8bc

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

lib/line/bot/client.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1174,6 +1174,26 @@ def get_narrowcast_message_status(request_id)
11741174
get(endpoint, endpoint_path, credentials)
11751175
end
11761176

1177+
# Send messages to multiple users using phone numbers.
1178+
#
1179+
# @param to [Array, String] Array of hashed phone numbers
1180+
# @param messages [Hash, Array] Message Objects
1181+
# @param headers [Hash] HTTP Headers
1182+
# @param payload [Hash] Additional request body
1183+
#
1184+
# @return [Net::HTTPResponse]
1185+
1186+
def multicast_by_phone_numbers(to, messages, headers: {}, payload: {})
1187+
channel_token_required
1188+
1189+
to = [to] if to.is_a?(String)
1190+
messages = [messages] if messages.is_a?(Hash)
1191+
1192+
endpoint_path = 'bot/ad/multicast/phone'
1193+
payload = payload.merge({ to: to, messages: messages }).to_json
1194+
post(oauth_endpoint, endpoint_path, payload, credentials.merge(headers))
1195+
end
1196+
11771197
# Fetch data, get content of specified URL.
11781198
#
11791199
# @param endpoint_base [String]
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
require 'spec_helper'
2+
require 'webmock/rspec'
3+
4+
describe Line::Bot::Client do
5+
before do
6+
uri_template = Addressable::Template.new Line::Bot::API::DEFAULT_OAUTH_ENDPOINT + 'bot/ad/multicast/phone'
7+
stub_request(:post, uri_template).to_return { |request| { body: '{}', status: 200 } }
8+
end
9+
10+
let(:client) do
11+
Line::Bot::Client.new do |config|
12+
config.channel_token = 'channel_token'
13+
end
14+
end
15+
let(:phone_numbers) { ['818000000000', '817000000000'].map { Digest::SHA256.hexdigest(_1) } }
16+
let(:message) do
17+
{
18+
type: 'text',
19+
text: 'Hello, world'
20+
}
21+
end
22+
23+
context 'normal scenario' do
24+
it 'pushes the message' do
25+
response = client.multicast_by_phone_numbers(phone_numbers, message)
26+
27+
expect(response.body).to eq('{}')
28+
end
29+
end
30+
31+
context 'with additional payload' do
32+
it 'pushes the message' do
33+
response = client.multicast_by_phone_numbers(phone_numbers, message, payload: { notificationDisabled: true })
34+
35+
expect(response.body).to eq('{}')
36+
end
37+
end
38+
end

0 commit comments

Comments
 (0)