Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions lib/line/bot/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1174,6 +1174,39 @@ def get_narrowcast_message_status(request_id)
get(endpoint, endpoint_path, credentials)
end

# Send messages to multiple users using phone numbers.
#
# @param to [Array, String] Array of hashed phone numbers.
# @param messages [Hash, Array] Message Objects.
# @param headers [Hash] HTTP Headers.
# @param payload [Hash] Additional request body.
#
# @return [Net::HTTPResponse]

def multicast_by_phone_numbers(to, messages, headers: {}, payload: {})
channel_token_required

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

endpoint_path = 'bot/ad/multicast/phone'
payload = payload.merge({ to: to, messages: messages }).to_json
post(oauth_endpoint, endpoint_path, payload, credentials.merge(headers))
end

# Get the delivery result of the message delivered in Send message using phone number. (`#multicast_by_phone_numbers`)
#
# @param date [String] Date the message was sent in UTC+9 with `yyyyMMdd` format.
#
# @return [Net::HTTPResponse]

def get_delivery_result_sent_by_phone_numbers(date)
channel_token_required

endpoint_path = "/bot/message/delivery/ad_phone?date=#{date}"
get(endpoint, endpoint_path, credentials)
end

# Fetch data, get content of specified URL.
#
# @param endpoint_base [String]
Expand Down
69 changes: 69 additions & 0 deletions spec/line/bot/client_audience_match_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
require 'spec_helper'
require 'webmock/rspec'

DELIVERY_RESULT_CONTENT = <<~"EOS"
{
"status": "ready",
"success": 10000
}
EOS

describe Line::Bot::Client do
describe '#multicast_by_phone_numbers' do
before do
uri_template = Addressable::Template.new Line::Bot::API::DEFAULT_OAUTH_ENDPOINT + 'bot/ad/multicast/phone'
stub_request(:post, uri_template).to_return { |request| { body: '{}', status: 200 } }
end

let(:client) do
Line::Bot::Client.new do |config|
config.channel_token = 'channel_token'
end
end
let(:phone_numbers) { ['818000000000', '817000000000'].map { Digest::SHA256.hexdigest(_1) } }
let(:message) do
{
type: 'text',
text: 'Hello, world'
}
end

context 'normal scenario' do
it 'pushes the message' do
response = client.multicast_by_phone_numbers(phone_numbers, message)

expect(response).to be_a(Net::HTTPOK)
expect(response.body).to eq('{}')
end
end

context 'with additional payload' do
it 'pushes the message' do
response = client.multicast_by_phone_numbers(phone_numbers, message, payload: { notificationDisabled: true })

expect(response).to be_a(Net::HTTPOK)
expect(response.body).to eq('{}')
end
end
end

describe '#get_delivery_result_sent_by_phone_numbers' do
before do
uri_template = Addressable::Template.new Line::Bot::API::DEFAULT_ENDPOINT + '/bot/message/delivery/ad_phone?date={date}'
stub_request(:get, uri_template).to_return { |request| { body: DELIVERY_RESULT_CONTENT, status: 200 } }
end

let(:client) do
Line::Bot::Client.new do |config|
config.channel_token = 'channel_token'
end
end

it 'gets the delivery result' do
response = client.get_delivery_result_sent_by_phone_numbers('20230101')

expect(response).to be_a(Net::HTTPOK)
expect(response.body).to eq(DELIVERY_RESULT_CONTENT)
end
end
end