qismo 0.5.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/qismo/api.rb +77 -26
- data/lib/qismo/client.rb +5 -4
- data/lib/qismo/model.rb +60 -28
- data/lib/qismo/util.rb +25 -0
- data/lib/qismo/version.rb +1 -1
- data/lib/qismo.rb +2 -0
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: be7d855a466237baededa8d61cbf42a88a52ff245c82b3a3ee2ecce2dd5ded47
|
|
4
|
+
data.tar.gz: 190f309eed38161f7718ce842e02a6e1e3d2c0e961096263b2ac003ca7216a29
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d9ac3a4baa95ae52792801be684cac5d6d9de3c6bc271e50d2788fab62f243dafe9c8e05721d04d1004a02de22f89406b67e1bed8414315506d331a900738e95
|
|
7
|
+
data.tar.gz: 7ec9a32d43b4025809ada7d61af3e7dedcb9439c5ef074961e31e7714d1122c1a854e45126b8171af9d45c2b77ca364b4cd1032cd71ed1bfd43fc323b1d764ac
|
data/Gemfile.lock
CHANGED
data/lib/qismo/api.rb
CHANGED
|
@@ -8,22 +8,10 @@ module Qismo
|
|
|
8
8
|
body = post("/api/v2/customer_rooms", opt)
|
|
9
9
|
Collection.new(
|
|
10
10
|
body.data.customer_rooms,
|
|
11
|
-
prev_page: body.meta
|
|
12
|
-
next_page: body.meta
|
|
13
|
-
prev_func: ->
|
|
14
|
-
|
|
15
|
-
Collection.new([])
|
|
16
|
-
else
|
|
17
|
-
rooms(opt.merge(cursor_before: body.meta.cursor_before))
|
|
18
|
-
end
|
|
19
|
-
end,
|
|
20
|
-
next_func: -> do
|
|
21
|
-
if body.meta.cursor_after.nil? || body.meta.cursor_after.empty?
|
|
22
|
-
Collection.new([])
|
|
23
|
-
else
|
|
24
|
-
rooms(opt.merge(cursor_after: body.meta.cursor_after))
|
|
25
|
-
end
|
|
26
|
-
end,
|
|
11
|
+
prev_page: body.meta&.cursor_before,
|
|
12
|
+
next_page: body.meta&.cursor_after,
|
|
13
|
+
prev_func: -> { rooms(opt.merge(cursor_before: body.meta&.cursor_before)) },
|
|
14
|
+
next_func: -> { rooms(opt.merge(cursor_after: body.meta&.cursor_after)) },
|
|
27
15
|
)
|
|
28
16
|
end
|
|
29
17
|
|
|
@@ -50,7 +38,17 @@ module Qismo
|
|
|
50
38
|
|
|
51
39
|
def room_broadcast_history(room_id, **opt)
|
|
52
40
|
body = get("/api/v2/customer_rooms/#{room_id}/broadcast_history", opt)
|
|
53
|
-
|
|
41
|
+
|
|
42
|
+
next_page = body.meta.page < body.meta.total_page ? (body.meta.page + 1) : nil
|
|
43
|
+
prev_page = body.meta.page > 1 ? (body.meta.page - 1) : nil
|
|
44
|
+
|
|
45
|
+
Collection.new(
|
|
46
|
+
body.data.broadcast_logs,
|
|
47
|
+
next_page: next_page,
|
|
48
|
+
prev_page: prev_page,
|
|
49
|
+
next_func: -> { room_broadcast_history(opt.merge(page: next_page)) },
|
|
50
|
+
prev_func: -> { room_broadcast_history(opt.merge(page: prev_page)) },
|
|
51
|
+
)
|
|
54
52
|
end
|
|
55
53
|
|
|
56
54
|
def assign_agent(room_id, agent_id, **opt)
|
|
@@ -81,12 +79,24 @@ module Qismo
|
|
|
81
79
|
|
|
82
80
|
def other_agents(room_id, **opt)
|
|
83
81
|
body = get("/api/v2/admin/service/other_agents", opt.merge(room_id: room_id))
|
|
84
|
-
Collection.new(
|
|
82
|
+
Collection.new(
|
|
83
|
+
body.data.agents,
|
|
84
|
+
prev_page: body.meta&.cursor_before,
|
|
85
|
+
next_page: body.meta&.cursor_after,
|
|
86
|
+
prev_func: -> { other_agents(opt.merge(cursor_before: body.meta&.cursor_before)) },
|
|
87
|
+
next_func: -> { other_agents(opt.merge(cursor_after: body.meta&.cursor_after)) },
|
|
88
|
+
)
|
|
85
89
|
end
|
|
86
90
|
|
|
87
91
|
def available_agents(room_id, **opt)
|
|
88
92
|
body = get("/api/v2/admin/service/available_agents", opt.merge(room_id: room_id))
|
|
89
|
-
Collection.new(
|
|
93
|
+
Collection.new(
|
|
94
|
+
body.data.agents,
|
|
95
|
+
prev_page: body.meta&.cursor_before,
|
|
96
|
+
next_page: body.meta&.cursor_after,
|
|
97
|
+
prev_func: -> { available_agents(opt.merge(cursor_before: body.meta&.cursor_before)) },
|
|
98
|
+
next_func: -> { available_agents(opt.merge(cursor_after: body.meta&.cursor_after)) },
|
|
99
|
+
)
|
|
90
100
|
end
|
|
91
101
|
|
|
92
102
|
def new_session_webhook
|
|
@@ -114,16 +124,42 @@ module Qismo
|
|
|
114
124
|
end
|
|
115
125
|
|
|
116
126
|
def agents(**opt)
|
|
127
|
+
if opt[:page].nil? || opt[:page].empty?
|
|
128
|
+
opt[:page] = 1
|
|
129
|
+
end
|
|
130
|
+
|
|
117
131
|
body = get("/api/v2/admin/agents", opt)
|
|
118
|
-
|
|
132
|
+
|
|
133
|
+
total_page = (body.meta.total_count.to_f / body.meta.per_page.to_f).ceil
|
|
134
|
+
next_page = opt[:page] < total_page ? (opt[:page] + 1) : nil
|
|
135
|
+
prev_page = opt[:page] > 1 ? (opt[:page] - 1) : nil
|
|
136
|
+
|
|
137
|
+
Collection.new(
|
|
138
|
+
body.data.agents,
|
|
139
|
+
next_page: next_page,
|
|
140
|
+
prev_page: prev_page,
|
|
141
|
+
next_func: -> { agents(opt.merge(page: next_page)) },
|
|
142
|
+
prev_func: -> { agents(opt.merge(page: prev_page)) },
|
|
143
|
+
)
|
|
119
144
|
end
|
|
120
145
|
|
|
121
146
|
def agents_by_ids(*ids)
|
|
122
|
-
get("/api/v1/admin/agents/get_by_ids", ids: ids).data
|
|
147
|
+
get("/api/v1/admin/agents/get_by_ids", **{ "ids[]": ids }).data
|
|
123
148
|
end
|
|
124
149
|
|
|
125
|
-
def
|
|
126
|
-
get("/api/v2/admin/agents/by_division", opt.merge(division_ids: division_ids))
|
|
150
|
+
def agents_by_divisions(*division_ids, **opt)
|
|
151
|
+
body = get("/api/v2/admin/agents/by_division", opt.merge({ "division_ids[]": division_ids }))
|
|
152
|
+
|
|
153
|
+
next_page = body.meta.page < body.meta.total_page ? (body.meta.page + 1) : nil
|
|
154
|
+
prev_page = body.meta.page > 1 ? (body.meta.page - 1) : nil
|
|
155
|
+
|
|
156
|
+
Collection.new(
|
|
157
|
+
body.data,
|
|
158
|
+
next_page: next_page,
|
|
159
|
+
prev_page: prev_page,
|
|
160
|
+
next_func: -> { agents_by_divisions(opt.merge(page: next_page)) },
|
|
161
|
+
prev_func: -> { agents_by_divisions(opt.merge(page: prev_page)) },
|
|
162
|
+
)
|
|
127
163
|
end
|
|
128
164
|
|
|
129
165
|
def agent(agent_id)
|
|
@@ -131,12 +167,27 @@ module Qismo
|
|
|
131
167
|
end
|
|
132
168
|
|
|
133
169
|
def office_hours
|
|
134
|
-
get("/api/v1/admin/office_hours").data
|
|
170
|
+
data = get("/api/v1/admin/office_hours").data
|
|
171
|
+
data_hash = data.as_json
|
|
172
|
+
data_hash["is_in_office_hour"] = Util.in_office_hour?(data)
|
|
173
|
+
|
|
174
|
+
DataObject.new(data_hash)
|
|
135
175
|
end
|
|
136
176
|
|
|
137
177
|
def wa_broadcast_templates(**opt)
|
|
138
|
-
body = get("/api/
|
|
139
|
-
|
|
178
|
+
body = get("/api/v3/admin/hsm", opt)
|
|
179
|
+
|
|
180
|
+
meta = body.meta
|
|
181
|
+
next_page = meta.page < meta.total_page ? (meta.page + 1) : nil
|
|
182
|
+
prev_page = meta.page > 1 ? (meta.page - 1) : nil
|
|
183
|
+
|
|
184
|
+
Collection.new(
|
|
185
|
+
body.data.hsm_templates,
|
|
186
|
+
next_page: next_page,
|
|
187
|
+
prev_page: prev_page,
|
|
188
|
+
next_func: -> { wa_broadcast_templates(opt.merge(page: next_page)) },
|
|
189
|
+
prev_func: -> { wa_broadcast_templates(opt.merge(page: prev_page)) },
|
|
190
|
+
)
|
|
140
191
|
end
|
|
141
192
|
|
|
142
193
|
def send_wa_outbound(**opt)
|
data/lib/qismo/client.rb
CHANGED
|
@@ -28,13 +28,13 @@ module Qismo
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def get(path, **params)
|
|
31
|
-
request(:get, path, params)
|
|
31
|
+
request(:get, path, params: params)
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
def request(method, path, **opt)
|
|
35
35
|
res = connection.request(method, @url + path, opt.compact)
|
|
36
36
|
if res.status.success?
|
|
37
|
-
return JSON.parse(res.to_s
|
|
37
|
+
return DataObject.new(JSON.parse(res.to_s))
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
if res.status.server_error?
|
|
@@ -42,9 +42,10 @@ module Qismo
|
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
if res.status.client_error?
|
|
45
|
-
body = JSON.parse(res.to_s
|
|
45
|
+
body = DataObject.new(JSON.parse(res.to_s))
|
|
46
|
+
|
|
46
47
|
error = body.errors
|
|
47
|
-
error = error.message if error.is_a?(
|
|
48
|
+
error = error.message if error.is_a?(DataObject)
|
|
48
49
|
|
|
49
50
|
error_klass_map = {
|
|
50
51
|
400 => BadRequestError,
|
data/lib/qismo/model.rb
CHANGED
|
@@ -1,48 +1,80 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Qismo
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
class DataObject
|
|
5
|
+
def initialize(opt = {})
|
|
6
|
+
opt.each do |key, value|
|
|
7
|
+
value = if value.is_a?(Array)
|
|
8
|
+
handle_array(value)
|
|
9
|
+
# instance_variable_set("@#{key}", handle_array(value))
|
|
10
|
+
elsif value.is_a?(Hash)
|
|
11
|
+
self.class.new(value)
|
|
12
|
+
# instance_variable_set("@#{key}", self.class.new(value))
|
|
13
|
+
else
|
|
14
|
+
value
|
|
15
|
+
# instance_variable_set("@#{key}", value)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
self.class.attr_reader(key.to_sym)
|
|
19
|
+
instance_variable_set("@#{key}", value)
|
|
20
|
+
end
|
|
6
21
|
end
|
|
7
22
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
23
|
+
def inspect
|
|
24
|
+
inspected_func ||= -> do
|
|
25
|
+
attributes = instance_variables.map do |iv|
|
|
26
|
+
"#{iv.to_s.delete_prefix("@")}=#{instance_variable_get(iv).inspect}"
|
|
27
|
+
end
|
|
11
28
|
|
|
12
|
-
|
|
13
|
-
@next_page = next_page
|
|
14
|
-
@prev_func = prev_func
|
|
15
|
-
@next_func = next_func
|
|
29
|
+
"#<#{self.class.name} #{attributes.join(", ")}>"
|
|
16
30
|
end
|
|
17
31
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
end
|
|
32
|
+
inspected_func.call
|
|
33
|
+
end
|
|
21
34
|
|
|
22
|
-
|
|
35
|
+
alias_method :to_s, :inspect
|
|
23
36
|
|
|
24
|
-
|
|
25
|
-
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
def handle_array(values)
|
|
40
|
+
values.map do |value|
|
|
41
|
+
if value.is_a?(Hash)
|
|
42
|
+
self.class.new(value)
|
|
43
|
+
else
|
|
44
|
+
value
|
|
45
|
+
end
|
|
26
46
|
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
27
49
|
|
|
28
|
-
|
|
50
|
+
class Collection < Array
|
|
51
|
+
def initialize(data, prev_page: nil, next_page: nil, prev_func: -> { nil }, next_func: -> { nil })
|
|
52
|
+
super(data)
|
|
29
53
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
54
|
+
@prev_page = prev_page
|
|
55
|
+
@next_page = next_page
|
|
56
|
+
@prev_func = prev_func
|
|
57
|
+
@next_func = next_func
|
|
58
|
+
end
|
|
33
59
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
end
|
|
60
|
+
def has_next_page?
|
|
61
|
+
@next_page != nil
|
|
37
62
|
end
|
|
38
63
|
|
|
39
|
-
|
|
40
|
-
attr_reader :data, :meta
|
|
64
|
+
alias_method :next_page?, :has_next_page?
|
|
41
65
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
66
|
+
def has_prev_page?
|
|
67
|
+
@prev_page != nil
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
alias_method :prev_page?, :has_prev_page?
|
|
71
|
+
|
|
72
|
+
def next_page
|
|
73
|
+
@next_func.call if has_next_page?
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def prev_page
|
|
77
|
+
@prev_func.call if has_prev_page?
|
|
46
78
|
end
|
|
47
79
|
end
|
|
48
80
|
end
|
data/lib/qismo/util.rb
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Qismo
|
|
4
|
+
class Util
|
|
5
|
+
class << self
|
|
6
|
+
def in_office_hour?(data)
|
|
7
|
+
return false if data.timezone.blank?
|
|
8
|
+
|
|
9
|
+
offset = Time.zone_offset(data.timezone)
|
|
10
|
+
tz_current = Time.current.getlocal(offset)
|
|
11
|
+
|
|
12
|
+
today_office_hour = data.office_hours.find { |oh| oh.day == tz_current.strftime("%u").to_i }
|
|
13
|
+
return false if today_office_hour.nil?
|
|
14
|
+
|
|
15
|
+
start_hour = today_office_hour.starttime
|
|
16
|
+
end_hour = today_office_hour.endtime
|
|
17
|
+
|
|
18
|
+
start_time = Time.parse("#{tz_current.year}-#{tz_current.month}-#{tz_current.day} #{start_hour} #{data.timezone}")
|
|
19
|
+
end_time = Time.parse("#{tz_current.year}-#{tz_current.month}-#{tz_current.day} #{end_hour} #{data.timezone}")
|
|
20
|
+
|
|
21
|
+
tz_current.between?(start_time, end_time)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
data/lib/qismo/version.rb
CHANGED
data/lib/qismo.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: qismo
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.7.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Qiscus Integration
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-12-
|
|
11
|
+
date: 2022-12-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -127,6 +127,7 @@ files:
|
|
|
127
127
|
- lib/qismo/client.rb
|
|
128
128
|
- lib/qismo/error.rb
|
|
129
129
|
- lib/qismo/model.rb
|
|
130
|
+
- lib/qismo/util.rb
|
|
130
131
|
- lib/qismo/version.rb
|
|
131
132
|
homepage: https://qiscus.com
|
|
132
133
|
licenses:
|