Skip to content

Commit 267291f

Browse files
committed
Add an example of audience
1 parent 826c9f4 commit 267291f

File tree

5 files changed

+176
-0
lines changed

5 files changed

+176
-0
lines changed

examples/v2/audience/Gemfile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# frozen_string_literal: true
2+
3+
source "https://rubygems.org"
4+
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
5+
6+
gem 'line-bot-api', path: '../../..' # delete this `path: ...`, and specify the latest version of line-bot-api when you want to use this example out side of this repository.

examples/v2/audience/Gemfile.lock

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
PATH
2+
remote: ../../..
3+
specs:
4+
line-bot-api (0.0.1.pre.test)
5+
base64 (~> 0.2)
6+
multipart-post (~> 2.4)
7+
8+
GEM
9+
remote: https://rubygems.org/
10+
specs:
11+
base64 (0.2.0)
12+
multipart-post (2.4.1)
13+
14+
PLATFORMS
15+
arm64-darwin-21
16+
arm64-darwin-22
17+
18+
DEPENDENCIES
19+
line-bot-api!
20+
21+
BUNDLED WITH
22+
2.4.10

examples/v2/audience/README.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Audience
2+
3+
[Use Audiences](https://developers.line.biz/en/docs/messaging-api/using-audience/)
4+
5+
## Getting started
6+
Update User ID of `app.rb` and `audience.txt' to your own.
7+
8+
```ruby
9+
$ export LINE_CHANNEL_SECRET=YOUR_CHANNEL_SECRET
10+
$ export LINE_CHANNEL_ACCESS_TOKEN=YOUR_CHANNEL_ACCESS_TOKEN
11+
$ bundle install
12+
$ bundle exec ruby app.rb
13+
```

examples/v2/audience/app.rb

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
require 'line-bot-api'
2+
3+
def client
4+
@client ||= Line::Bot::V2::ManageAudience::ApiClient.new(
5+
channel_access_token: ENV.fetch("LINE_CHANNEL_ACCESS_TOKEN"),
6+
)
7+
end
8+
9+
def blob_client
10+
@blob_client ||= Line::Bot::V2::ManageAudience::ApiBlobClient.new(
11+
channel_access_token: ENV.fetch("LINE_CHANNEL_ACCESS_TOKEN"),
12+
)
13+
end
14+
15+
def api_client
16+
@api_client ||= Line::Bot::V2::MessagingApi::ApiClient.new(
17+
channel_access_token: ENV.fetch("LINE_CHANNEL_ACCESS_TOKEN"),
18+
)
19+
end
20+
21+
def main
22+
audience_group_id = create_audience_group
23+
24+
add_audience_by_ids(audience_group_id: audience_group_id)
25+
add_audience_by_file(audience_group_id: audience_group_id)
26+
27+
audience_ready?(audience_group_id: audience_group_id)
28+
29+
if audience_ready?(audience_group_id: audience_group_id)
30+
push_narrowcast(audience_group_id: audience_group_id)
31+
end
32+
33+
delete_audience_group(audience_group_id: audience_group_id)
34+
end
35+
36+
def create_audience_group
37+
request = Line::Bot::V2::ManageAudience::CreateAudienceGroupRequest.new(
38+
description: "audience_group_#{Time.now.to_i}",
39+
)
40+
response = client.create_audience_group(create_audience_group_request: request)
41+
42+
if response.is_a?(Line::Bot::V2::ManageAudience::CreateAudienceGroupResponse)
43+
puts '=== Create audience success fully ==='
44+
puts "audience_group_id: #{response.audience_group_id}"
45+
puts "description: #{response.description}"
46+
47+
response.audience_group_id
48+
else
49+
nil
50+
end
51+
end
52+
53+
def add_audience_by_ids(audience_group_id:)
54+
request = Line::Bot::V2::ManageAudience::AddAudienceToAudienceGroupRequest.new(
55+
audience_group_id: audience_group_id,
56+
audiences: [
57+
Line::Bot::V2::ManageAudience::Audience.new(
58+
id: 'U1234567890abcdef1234567890abcdef' # TODO: replace with your user ID
59+
)
60+
]
61+
)
62+
_body, status_code, _http_headers = client.add_audience_to_audience_group_with_http_info(add_audience_to_audience_group_request: request)
63+
64+
if status_code == 202
65+
puts '=== Add audience by IDs successfully ==='
66+
else
67+
puts '=== Add audience by IDs failed ==='
68+
end
69+
end
70+
71+
def add_audience_by_file(audience_group_id:)
72+
# TODO: replace with your user ID in audience.txt
73+
File.open('audience.txt', 'r') do |f|
74+
_body, status_code, _http_headers = blob_client.add_user_ids_to_audience_with_http_info(
75+
audience_group_id: audience_group_id,
76+
file: f
77+
)
78+
79+
if status_code == 202
80+
puts '=== Add audience by IDs successfully ==='
81+
else
82+
puts '=== Add audience by IDs failed ==='
83+
end
84+
end
85+
end
86+
87+
def audience_ready?(audience_group_id:)
88+
response = client.get_audience_data(audience_group_id: audience_group_id)
89+
90+
if response.is_a?(Line::Bot::V2::ManageAudience::GetAudienceDataResponse)
91+
status = response.audience_group&.status
92+
93+
if status
94+
puts "=== Audience##{audience_group_id} status: #{status} ==="
95+
status == 'READY'
96+
else
97+
false
98+
end
99+
else
100+
false
101+
end
102+
end
103+
104+
def delete_audience_group(audience_group_id:)
105+
_body, status_code, _http_headers = client.delete_audience_group_with_http_info(audience_group_id: audience_group_id)
106+
107+
if status_code == 202
108+
puts '=== Delete audience group successfully ==='
109+
else
110+
puts '=== Delete audience group failed ==='
111+
end
112+
end
113+
114+
def push_narrowcast(audience_group_id:)
115+
request = Line::Bot::V2::MessagingApi::NarrowcastRequest.new(
116+
messages: [
117+
Line::Bot::V2::MessagingApi::TextMessage.new(text: 'Hello, this is a narrowcast message')
118+
],
119+
recipient: Line::Bot::V2::MessagingApi::AudienceRecipient.new(
120+
audience_group_id: audience_group_id,
121+
)
122+
)
123+
_body, status_code, _http_headers = api_client.narrowcast_with_http_info(narrowcast_request: request)
124+
125+
if status_code == 202
126+
puts '=== Push narrowcast successfully ==='
127+
else
128+
puts '=== Push narrowcast failed ==='
129+
end
130+
rescue => e
131+
puts e.message
132+
end
133+
134+
main

examples/v2/audience/audience.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
U1234567890abcdef1234567890abcdef

0 commit comments

Comments
 (0)