qismo 0.13.0 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/qismo/api.rb +556 -324
- data/lib/qismo/client.rb +31 -19
- data/lib/qismo/collection.rb +21 -0
- data/lib/qismo/object.rb +21 -0
- data/lib/qismo/objectified_hash.rb +30 -0
- data/lib/qismo/objects/agent_service.rb +53 -0
- data/lib/qismo/objects/broadcast_job.rb +99 -0
- data/lib/qismo/objects/broadcast_log.rb +59 -0
- data/lib/qismo/objects/custom_channel.rb +35 -0
- data/lib/qismo/objects/custom_channel_message_response.rb +19 -0
- data/lib/qismo/objects/customer_room.rb +85 -0
- data/lib/qismo/objects/fb_channel.rb +31 -0
- data/lib/qismo/objects/hsm_template.rb +111 -0
- data/lib/qismo/objects/ig_channel.rb +43 -0
- data/lib/qismo/objects/line_channel.rb +27 -0
- data/lib/qismo/objects/list_channels_response.rb +39 -0
- data/lib/qismo/objects/office_hour.rb +67 -0
- data/lib/qismo/objects/qiscus_channel.rb +27 -0
- data/lib/qismo/objects/room_additional_info.rb +15 -0
- data/lib/qismo/objects/tag.rb +27 -0
- data/lib/qismo/objects/telegram_channel.rb +31 -0
- data/lib/qismo/objects/user.rb +99 -0
- data/lib/qismo/objects/wa_channel.rb +111 -0
- data/lib/qismo/objects/wa_credit_info.rb +71 -0
- data/lib/qismo/objects/waca_channel.rb +55 -0
- data/lib/qismo/objects/webhook.rb +15 -0
- data/lib/qismo/types.rb +10 -1
- data/lib/qismo/version.rb +1 -1
- data/lib/qismo/webhook_requests/on_agent_allocation_needed.rb +8 -2
- data/lib/qismo/webhook_requests/on_custom_button_clicked.rb +15 -7
- data/lib/qismo/webhook_requests/on_custom_channel_message_sent.rb +18 -6
- data/lib/qismo/webhook_requests/on_message_for_bot_sent.rb +18 -6
- data/lib/qismo/webhook_requests/on_new_session_initiated.rb +30 -10
- data/lib/qismo/webhook_requests/on_room_resolved.rb +15 -5
- data/lib/qismo.rb +28 -34
- data/qismo.gemspec +1 -0
- metadata +40 -6
- data/lib/qismo/model.rb +0 -102
- data/lib/qismo/models/base.rb +0 -13
- data/lib/qismo/models/customer_room.rb +0 -6
- data/lib/qismo/util.rb +0 -31
data/lib/qismo/api.rb
CHANGED
@@ -1,109 +1,135 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Qismo
|
4
|
+
# API wrappers
|
5
|
+
#
|
4
6
|
module Api
|
5
7
|
# @!parse include Qismo::Client
|
6
8
|
|
7
9
|
# List customer rooms
|
8
10
|
#
|
9
|
-
# @see https://
|
10
|
-
# @param [Hash]
|
11
|
-
#
|
12
|
-
# @
|
13
|
-
#
|
14
|
-
# @
|
15
|
-
#
|
16
|
-
# @
|
17
|
-
#
|
18
|
-
# @
|
19
|
-
#
|
20
|
-
# @
|
21
|
-
#
|
22
|
-
# @
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
11
|
+
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#704a0c40-56b2-4a94-9c1d-e1529923cbb6
|
12
|
+
# @param channels [Array<Hash>]
|
13
|
+
# Filter rooms by channels. Example: [{ source: "wa", channel_id: 716171 }]
|
14
|
+
# @param status [String]
|
15
|
+
# Filter rooms by status. Valid values are "resolved", "unresolved", "expired",or "almost_expired"
|
16
|
+
# @param serve_status [String]
|
17
|
+
# Filter rooms by serve status. Valid values are "served" or "unserved". By default, we will retrieve all serve_status
|
18
|
+
# @param name [String]
|
19
|
+
# Filter rooms by customer nam
|
20
|
+
# @param limit [Integer]
|
21
|
+
# Limit the number of rooms returned in one page. By default, it will return 50 rooms data
|
22
|
+
# @param tag_ids [Array<Integer>]
|
23
|
+
# Filter rooms by its tag
|
24
|
+
# @param agent_ids [Array<Integer>]
|
25
|
+
# Filter rooms by the agent who handled the rooms
|
26
|
+
# @param order [String]
|
27
|
+
# Order returned data by the timestamp. By default, we will return the newest rooms first
|
28
|
+
# @param cursor_after [String]
|
29
|
+
# Next page cursor. If you are on last page, the cursor returned will be nil
|
30
|
+
# @param cursor_before [String]
|
31
|
+
# Previous page cursor. If you are on first page, the cursor returned will be nil
|
32
|
+
# @return [Qismo::Collection<Qismo::CustomerRoom>]
|
33
|
+
def rooms(channels: nil, status: nil, serve_status: nil, name: nil, limit: 50, tag_ids: nil, agent_ids: nil, order: "desc", cursor_after: nil, cursor_before: nil)
|
34
|
+
body = post("/api/v2/customer_rooms", json: {
|
35
|
+
channels: channels,
|
36
|
+
status: status,
|
37
|
+
serve_status: serve_status,
|
38
|
+
name: name,
|
39
|
+
limit: limit,
|
40
|
+
tag_ids: tag_ids,
|
41
|
+
user_ids: agent_ids,
|
42
|
+
order: order,
|
43
|
+
cursor_after: cursor_after,
|
44
|
+
cursor_before: cursor_before
|
45
|
+
}.compact)
|
46
|
+
|
47
|
+
Collection.new(
|
48
|
+
Qismo::Objects::CustomerRoom.from_array(body.data.customer_rooms),
|
49
|
+
next_page: body.meta.cursor_after,
|
50
|
+
prev_page: body.meta.cursor_before
|
31
51
|
)
|
32
52
|
end
|
33
53
|
|
34
54
|
# Get room by id
|
35
|
-
#
|
36
|
-
# @see https://s.id/get-room-by-room-id
|
55
|
+
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#8c803377-eea2-4879-9d66-8906d9f41275
|
37
56
|
# @param room_id [Integer]
|
38
|
-
# @return [Qismo::
|
39
|
-
def room(room_id)
|
57
|
+
# @return [Qismo::Objects::CustomerRoom]
|
58
|
+
def room(room_id:)
|
40
59
|
body = get("/api/v2/customer_rooms/#{room_id}")
|
41
60
|
if body.data.customer_room.nil?
|
42
61
|
raise Qismo::NotFoundError.new("Room not found", status_code: 404, response_body: body.to_json)
|
43
62
|
end
|
44
63
|
|
45
|
-
body.data.customer_room
|
64
|
+
Qismo::Objects::CustomerRoom.new(body.data.customer_room)
|
46
65
|
end
|
47
66
|
|
48
67
|
# List tags inside room
|
49
68
|
#
|
50
|
-
# @see https://
|
69
|
+
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#d40b54a7-2b37-4afc-b474-62593001274e
|
51
70
|
# @param room_id [Integer]
|
52
|
-
# @return [Qismo::
|
53
|
-
def room_tags(room_id)
|
54
|
-
|
71
|
+
# @return [Qismo::Collection<Qismo::Objects::Tag>]
|
72
|
+
def room_tags(room_id:)
|
73
|
+
Qismo::Collection.new(
|
74
|
+
Qismo::Objects::Tag.from_array(
|
75
|
+
get("/api/v2/room_tags/#{room_id}").data
|
76
|
+
)
|
77
|
+
)
|
55
78
|
end
|
56
79
|
|
57
80
|
# Add room tag
|
58
81
|
#
|
59
|
-
# @see https://
|
82
|
+
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#9737d580-d156-4213-85a8-95fb3f1ad964
|
60
83
|
# @param room_id [Integer]
|
61
84
|
# @param tag_name [String]
|
62
|
-
# @return [Qismo::
|
63
|
-
def add_room_tag(room_id
|
64
|
-
|
85
|
+
# @return [Qismo::Objects::Tag]
|
86
|
+
def add_room_tag(room_id:, tag_name:)
|
87
|
+
Qismo::Objects::Tag.new(
|
88
|
+
post("/api/v2/room_tags/#{room_id}", tag_name: tag).data
|
89
|
+
)
|
65
90
|
end
|
66
91
|
|
67
92
|
# Delete room tag
|
68
93
|
#
|
69
|
-
# @see https://
|
94
|
+
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#f4d173a1-3fb1-4151-87fd-106982bcc4a2
|
70
95
|
# @param room_id [Integer]
|
71
96
|
# @param tag_id [Integer]
|
72
97
|
# @return [TrueClass]
|
73
|
-
def delete_room_tag(room_id
|
98
|
+
def delete_room_tag(room_id:, tag_id:)
|
74
99
|
delete("/api/v2/room_tags/#{room_id}/#{tag_id}")
|
75
100
|
true
|
76
101
|
end
|
77
102
|
|
78
103
|
# List room additional info
|
79
104
|
#
|
80
|
-
# @see https://
|
105
|
+
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#88c2287b-21af-4afd-b495-aaaa2818c381
|
81
106
|
# @param room_id [Integer]
|
82
|
-
# @return [Qismo::
|
83
|
-
def room_additional_info(room_id)
|
84
|
-
|
85
|
-
get(
|
86
|
-
|
87
|
-
|
88
|
-
)
|
107
|
+
# @return [Array<Qismo::Objects::RoomAdditionalInfo>]
|
108
|
+
def room_additional_info(room_id:)
|
109
|
+
Qismo::Objects::RoomAdditionalInfo.from_array(
|
110
|
+
get("/api/v1/qiscus/room/#{room_id}/user_info").data.extras.user_properties
|
111
|
+
)
|
112
|
+
rescue NoMethodError
|
113
|
+
Qismo::Objects::RoomAdditionalInfo.from_array([])
|
89
114
|
end
|
90
115
|
|
91
116
|
alias_method :room_info, :room_additional_info
|
92
117
|
|
93
118
|
# Set room additional info
|
94
119
|
#
|
95
|
-
# @see https://
|
120
|
+
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#2b968e9e-2a76-4569-8763-f883e11dc5a7
|
96
121
|
# @note This will replace your current room additional info
|
97
122
|
# @param room_id [Integer]
|
98
|
-
# @param
|
99
|
-
#
|
100
|
-
|
101
|
-
|
123
|
+
# @param info [Array<Hash>]
|
124
|
+
# Key value pair of additional info. Ex: [{ key: "Ticket Link", value: "https://ticket.com" }]
|
125
|
+
# @return [Array<Qismo::Objects::RoomAdditionalInfo>]
|
126
|
+
def set_room_additional_info(room_id:, info:)
|
127
|
+
Qismo::Objects::RoomAdditionalInfo.from_array(
|
102
128
|
post(
|
103
129
|
"/api/v1/qiscus/room/#{room_id}/user_info",
|
104
|
-
user_properties:
|
105
|
-
).data
|
106
|
-
)
|
130
|
+
user_properties: info
|
131
|
+
).data.extras.user_properties
|
132
|
+
)
|
107
133
|
end
|
108
134
|
|
109
135
|
alias_method :set_room_info, :set_room_additional_info
|
@@ -113,212 +139,303 @@ module Qismo
|
|
113
139
|
# Update room additional info
|
114
140
|
#
|
115
141
|
# @param room_id [Integer]
|
116
|
-
# @param
|
117
|
-
#
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
142
|
+
# @param info [Array<Hash>]
|
143
|
+
# Key value pair of additional info. Ex: [{ key: "Ticket Link", value: "https://ticket.com" }]
|
144
|
+
# @return [Array<Qismo::Objects::RoomAdditionalInfo>]
|
145
|
+
def update_room_additional_info(room_id:, info:)
|
146
|
+
old_info = room_additional_info(room_id).as_json
|
147
|
+
new_info = (info.as_json + old_info).uniq { |h| h.values_at("key") }
|
148
|
+
set_room_additional_info(room_id: room_id, info: new_info)
|
122
149
|
end
|
123
150
|
|
124
151
|
alias_method :update_room_info, :update_room_additional_info
|
125
152
|
|
126
|
-
# List
|
153
|
+
# List broadcast history inside room
|
127
154
|
#
|
128
|
-
# @see https://s.id/list-room-broadcast-history
|
129
155
|
# @param room_id [Integer]
|
130
|
-
# @param
|
131
|
-
# @
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
prev_func: -> { room_broadcast_history(options.merge(page: prev_page)) }
|
156
|
+
# @param page [Integer]
|
157
|
+
# @param limit [Integer]
|
158
|
+
# @return [Qismo::Collection<Qismo::Objects::BroadcastLog>]
|
159
|
+
def room_broadcast_history(room_id:, page: 1, limit: 25)
|
160
|
+
body = get("/api/v2/customer_rooms/#{room_id}/broadcast_history", {
|
161
|
+
page: page,
|
162
|
+
limit: limit
|
163
|
+
})
|
164
|
+
|
165
|
+
Qismo::Collection.new(
|
166
|
+
Qismo::Objects::BroadcastLog.from_array(body.data.broadcast_logs),
|
167
|
+
next_page: ((body.meta.page < body.dig("meta", "total_page")) ? (body.meta.page + 1) : nil),
|
168
|
+
prev_page: ((body.meta.page > 1) ? (body.meta.page - 1) : nil)
|
144
169
|
)
|
145
170
|
end
|
146
171
|
|
147
|
-
# Assign agent to room
|
172
|
+
# Assign an agent to a room
|
148
173
|
#
|
149
|
-
# @see https://s.id/assign-agent
|
150
174
|
# @param room_id [Integer]
|
151
175
|
# @param agent_id [Integer]
|
152
|
-
# @param
|
153
|
-
#
|
154
|
-
|
155
|
-
|
156
|
-
|
176
|
+
# @param replace_agents [TrueClass,FalseClass]
|
177
|
+
# Replace agents in room or not. Don't combine this param
|
178
|
+
# with :max_agent param
|
179
|
+
# @param max_agent [Integer]
|
180
|
+
# Specify max agent that can be assigned to a room. For
|
181
|
+
# example, if there are 1 agent in a room and you specific
|
182
|
+
# max_agent to 1, you will get bad request error. If you set
|
183
|
+
# param :relpace_agents to true, this param will be forced
|
184
|
+
# to nil, which no be sent on http request
|
185
|
+
# @return [Qismo::Objects::User]
|
186
|
+
def assign_agent(room_id:, agent_id:, replace_agents: false, max_agent: nil)
|
187
|
+
Qismo::Objects::User.new(
|
188
|
+
post("/api/v1/admin/service/assign_agent", {
|
189
|
+
room_id: room_id.to_s,
|
190
|
+
agent_id: agent_id,
|
191
|
+
replace_latest_agent: replace_agents,
|
192
|
+
max_agent: (replace_agents == true) ? nil : max_agent
|
193
|
+
}).data.assign_agent
|
194
|
+
)
|
157
195
|
end
|
158
196
|
|
159
197
|
# Remove agent from room
|
160
198
|
#
|
161
|
-
# @see https://
|
199
|
+
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#7a67e214-28e5-47c1-b4ee-7246977dfcff
|
162
200
|
# @param room_id [Integer]
|
163
201
|
# @param agent_id [Integer]
|
164
202
|
# @return [TrueClass]
|
165
|
-
def remove_agent(room_id
|
166
|
-
post(
|
203
|
+
def remove_agent(room_id:, agent_id:)
|
204
|
+
post(
|
205
|
+
"/api/v1/admin/service/remove_agent", {
|
206
|
+
room_id: room_id.to_s,
|
207
|
+
agent_id: agent_id
|
208
|
+
}
|
209
|
+
)
|
210
|
+
|
167
211
|
true
|
168
212
|
end
|
169
213
|
|
170
214
|
# Resolve room
|
171
215
|
#
|
172
|
-
# @see https://
|
216
|
+
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#a1ff75d0-b637-4b79-a259-fb9d084d1659
|
173
217
|
# @param room_id [Integer]
|
174
218
|
# @param last_comment_id [Integer]
|
175
|
-
#
|
176
|
-
#
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
219
|
+
# Id of last message in the room. If you dont specify this param,
|
220
|
+
# we will use current epoc timestamp
|
221
|
+
# @param notes [String]
|
222
|
+
# Specify room notes. You can also use simple markdown markup
|
223
|
+
# for this param
|
224
|
+
# @param send_email [TrueClass,FalseClass]
|
225
|
+
# Send email to customer or no. This param will only worked if
|
226
|
+
# you are using valid email as customer identifier
|
227
|
+
# @param extras [Hash]
|
228
|
+
# Room extras in valid hash
|
229
|
+
# @return [Qismo::Objects::AgentService]
|
230
|
+
def resolve_room(room_id:, last_comment_id: Time.now.to_i, notes: nil, send_email: false, extras: nil)
|
231
|
+
Qismo::Objects::AgentService.new(
|
232
|
+
post("/api/v1/admin/service/mark_as_resolved", {
|
233
|
+
room_id: room_id.to_s,
|
234
|
+
last_comment_id: last_comment_id,
|
235
|
+
notes: notes,
|
236
|
+
is_send_email: send_email,
|
237
|
+
extras: extras
|
238
|
+
}).data.service
|
239
|
+
)
|
181
240
|
end
|
182
241
|
|
183
242
|
alias_method :resolve, :resolve_room
|
184
243
|
|
185
244
|
# Get agent that can be assigned to room
|
186
245
|
#
|
187
|
-
# @see https://
|
246
|
+
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#a62432c6-1aba-4e2b-be9a-2f7151db9119
|
188
247
|
# @param source [String]
|
189
|
-
#
|
190
|
-
#
|
191
|
-
|
192
|
-
|
193
|
-
|
248
|
+
# Channel source. Available sources are `wa`, `line`, `telegram`,
|
249
|
+
# `qiscus`, `ig`, or `fb`. For custom channel, use that channel's
|
250
|
+
# identifier_key as source
|
251
|
+
# @param channel_id [Integer]
|
252
|
+
# The channel id you want to allocate
|
253
|
+
# @param ignore_availability [TrueClass,FalseClass]
|
254
|
+
# Ignore agent availability. If you set this param to true, agent
|
255
|
+
# that are unavailable will be considered as allocatable too
|
256
|
+
# @return [Qismo::Objects::User]
|
257
|
+
def allocate_agent(source:, channel_id:, ignore_availability: false)
|
258
|
+
Qismo::Objects::User.new(
|
259
|
+
post("/api/v1/admin/service/allocate_agent", {
|
260
|
+
source: source,
|
261
|
+
channel_id: channel_id,
|
262
|
+
ignore_availability: ignore_availability
|
263
|
+
}).data.agent
|
264
|
+
)
|
194
265
|
end
|
195
266
|
|
196
267
|
# Get agent that can be allocated to room and automatically assign them
|
197
268
|
#
|
198
|
-
# @see https://
|
269
|
+
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#f88465ed-379f-4202-a8a4-e0c3bebcfeab
|
199
270
|
# @param room_id [Integer]
|
200
|
-
# @param
|
201
|
-
#
|
202
|
-
|
203
|
-
|
204
|
-
|
271
|
+
# @param ignore_availability [TrueClass,FalseClass]
|
272
|
+
# Ignore agent availability. If you set this param to true, agent
|
273
|
+
# that are unavailable will be considered as allocatable too
|
274
|
+
# @return [Qismo::Objects::User]
|
275
|
+
def allocate_and_assign_agent(room_id:, ignore_availability: false)
|
276
|
+
Qismo::Objects::User.new(
|
277
|
+
post("/api/v1/admin/service/allocate_assign_agent", {
|
278
|
+
room_id: room_id.to_s,
|
279
|
+
ignore_availability: ignore_availability
|
280
|
+
}).data.agent
|
281
|
+
)
|
205
282
|
end
|
206
283
|
|
207
284
|
# List agents that are not in room and can be assigned to room
|
208
285
|
#
|
209
|
-
# @see https://
|
286
|
+
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#10d75d0c-ebd2-44c6-ab19-a0bafe7ad982
|
210
287
|
# @param room_id [Integer]
|
211
|
-
# @param
|
212
|
-
# @
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
288
|
+
# @param search [String]
|
289
|
+
# @param limit [Integer]
|
290
|
+
# @param cursor_after [String]
|
291
|
+
# @param cursor_before [String]
|
292
|
+
# @return [Qismo::Collection<Qismo::Objects::User>]
|
293
|
+
def other_agents(room_id:, search: nil, limit: 15, cursor_after: nil, cursor_before: nil)
|
294
|
+
body = get("/api/v2/admin/service/other_agents", {
|
295
|
+
room_id: room_id.to_s,
|
296
|
+
search: search,
|
297
|
+
limit: limit,
|
298
|
+
cursor_after: cursor_after,
|
299
|
+
cursor_before: cursor_before
|
300
|
+
})
|
301
|
+
|
302
|
+
Collection.new(
|
303
|
+
Qismo::Objects::User.from_array(body.data.agents),
|
304
|
+
next_page: body.meta.cursor_after,
|
305
|
+
prev_page: body.meta.cursor_before
|
221
306
|
)
|
222
307
|
end
|
223
308
|
|
224
309
|
# List available agents in room
|
225
310
|
#
|
226
|
-
# @see https://
|
311
|
+
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#0d5db283-c7f8-42e0-ba02-6cbcbc1d2bb3
|
227
312
|
# @param room_id [Integer]
|
228
|
-
# @param
|
229
|
-
# @
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
313
|
+
# @param available_in_room [TrueClass,FalseClass]
|
314
|
+
# @param search [String]
|
315
|
+
# @param limit [Integer]
|
316
|
+
# @param cursor_after [String]
|
317
|
+
# @param cursor_before [String]
|
318
|
+
# @return [Qismo::Collection<Qismo::Objects::User>]
|
319
|
+
def available_agents(room_id:, available_in_room: true, search: nil, limit: 15, cursor_after: nil, cursor_before: nil)
|
320
|
+
body = get("/api/v2/admin/service/available_agents", {
|
321
|
+
room_id: room_id.to_s,
|
322
|
+
is_available_in_room: available_in_room,
|
323
|
+
search: search,
|
324
|
+
limit: limit,
|
325
|
+
cursor_after: cursor_after,
|
326
|
+
cursor_before: cursor_before
|
327
|
+
})
|
328
|
+
|
329
|
+
Collection.new(
|
330
|
+
Qismo::Objects::User.from_array(body.data.agents),
|
331
|
+
next_page: body.meta.cursor_after,
|
332
|
+
prev_page: body.meta.cursor_before
|
238
333
|
)
|
239
334
|
end
|
240
335
|
|
241
336
|
# Get new session webhook config
|
242
337
|
#
|
243
|
-
# @return [Qismo::
|
338
|
+
# @return [Qismo::Objects::Webhook]
|
244
339
|
def new_session_webhook
|
245
|
-
get("/api/v2/app/config/new_session_webhook").data.configs
|
340
|
+
config = get("/api/v2/app/config/new_session_webhook").data.configs
|
341
|
+
Qismo::Objects::Webhook.new(
|
342
|
+
enabled: config.is_new_session_webhook_enabled,
|
343
|
+
url: config.new_session_webhook_url
|
344
|
+
)
|
246
345
|
end
|
247
346
|
|
248
347
|
# Set new session webhook
|
249
348
|
#
|
250
349
|
# @param url [String]
|
251
|
-
# @param
|
252
|
-
# @return [Qismo::
|
253
|
-
def set_new_session_webhook(url
|
254
|
-
post("/api/v2/app/config/new_session_webhook",
|
350
|
+
# @param enabled [TrueClass,FalseClass]
|
351
|
+
# @return [Qismo::Objects::Webhook]
|
352
|
+
def set_new_session_webhook(url:, enabled: true)
|
353
|
+
config = post("/api/v2/app/config/new_session_webhook", url: url, enabled: enabled).data.configs
|
354
|
+
Qismo::Objects::Webhook.new(
|
355
|
+
enabled: config.is_new_session_webhook_enabled,
|
356
|
+
url: config.new_session_webhook_url
|
357
|
+
)
|
255
358
|
end
|
256
359
|
|
257
360
|
# Get auth webhook config
|
258
361
|
#
|
259
|
-
# @return [Qismo::
|
362
|
+
# @return [Qismo::Objects::Webhook]
|
260
363
|
def auth_webhook
|
261
|
-
get("/api/v2/app/config/auth_webhook").data.configs
|
364
|
+
config = get("/api/v2/app/config/auth_webhook").data.configs
|
365
|
+
Qismo::Objects::Webhook.new(
|
366
|
+
enabled: config.is_auth_webhook_enabled,
|
367
|
+
url: config.auth_webhook_url
|
368
|
+
)
|
262
369
|
end
|
263
370
|
|
264
371
|
# Set auth webhook
|
265
372
|
#
|
266
373
|
# @param url [String]
|
267
374
|
# @param enabled [TrueClass, FalseClass]
|
268
|
-
# @
|
269
|
-
|
270
|
-
|
271
|
-
|
375
|
+
# @return [Qismo::Objects::Webhook]
|
376
|
+
def set_auth_webhook(url:, enabled: true)
|
377
|
+
config = post("/api/v2/app/config/auth_webhook", url: url, enabled: enabled).data.configs
|
378
|
+
Qismo::Objects::Webhook.new(
|
379
|
+
enabled: config.is_auth_webhook_enabled,
|
380
|
+
url: config.auth_webhook_url
|
381
|
+
)
|
272
382
|
end
|
273
383
|
|
274
384
|
# Get resolve webhook config
|
275
385
|
#
|
276
|
-
# @return [Qismo::
|
386
|
+
# @return [Qismo::Objects::Webhook]
|
277
387
|
def resolve_webhook
|
278
|
-
get("/api/v1/app/webhook/mark_as_resolved").data
|
388
|
+
config = get("/api/v1/app/webhook/mark_as_resolved").data
|
389
|
+
Qismo::Objects::Webhook.new(
|
390
|
+
enabled: config.is_mark_as_resolved_webhook_enabled,
|
391
|
+
url: config.mark_as_resolved_webhook_url
|
392
|
+
)
|
279
393
|
end
|
280
394
|
|
281
395
|
# Set resolve webhook
|
282
396
|
#
|
283
397
|
# @param url [String]
|
284
398
|
# @param options [Hash]
|
285
|
-
# @return [Qismo::
|
286
|
-
def set_resolve_webhook(url
|
287
|
-
post("/api/v1/app/webhook/mark_as_resolved",
|
399
|
+
# @return [Qismo::Objects::Webhook]
|
400
|
+
def set_resolve_webhook(url:, enabled: true)
|
401
|
+
config = post("/api/v1/app/webhook/mark_as_resolved", webhook_url: url, is_webhook_enabled: enabled).data
|
402
|
+
Qismo::Objects::Webhook.new(
|
403
|
+
enabled: config.is_mark_as_resolved_webhook_enabled,
|
404
|
+
url: config.mark_as_resolved_webhook_url
|
405
|
+
)
|
288
406
|
end
|
289
407
|
|
290
408
|
# List agents
|
291
409
|
#
|
292
410
|
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#849205ca-00d9-4356-9fdd-f05bff777b4e
|
293
411
|
# @param options [Hash]
|
294
|
-
# @return [Qismo::
|
295
|
-
def agents(
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
412
|
+
# @return [Qismo::Collection<Qismo::Objects::User>]
|
413
|
+
def agents(page: 1, limit: 10, search: nil, scope: nil)
|
414
|
+
body = get("/api/v2/admin/agents", {
|
415
|
+
page: page,
|
416
|
+
limit: limit,
|
417
|
+
search: search,
|
418
|
+
scope: scope
|
419
|
+
})
|
301
420
|
|
302
421
|
total_page = (body.meta.total_count.to_f / body.meta.per_page.to_f).ceil
|
303
|
-
next_page = (options[:page] < total_page) ? (options[:page] + 1) : nil
|
304
|
-
prev_page = (options[:page] > 1) ? (options[:page] - 1) : nil
|
305
422
|
|
306
|
-
|
307
|
-
body.data.agents,
|
308
|
-
next_page:
|
309
|
-
prev_page:
|
310
|
-
next_func: -> { agents(options.merge(page: next_page)) },
|
311
|
-
prev_func: -> { agents(options.merge(page: prev_page)) }
|
423
|
+
Qismo::Collection.new(
|
424
|
+
Qismo::Objects::User.from_array(body.data.agents),
|
425
|
+
next_page: ((page < total_page) ? (page + 1) : nil),
|
426
|
+
prev_page: ((page > 1) ? (page - 1) : nil)
|
312
427
|
)
|
313
428
|
end
|
314
429
|
|
315
|
-
# List agents by
|
430
|
+
# List agents by ids
|
316
431
|
#
|
317
432
|
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#3db6c8c8-8ffe-4a88-b630-41f9d5b62298
|
318
433
|
# @param ids [Array<Integer>]
|
319
|
-
# @return [Qismo::
|
320
|
-
def agents_by_ids(
|
321
|
-
|
434
|
+
# @return [Qismo::Collection<Qismo::Objects::User>]
|
435
|
+
def agents_by_ids(agent_ids:)
|
436
|
+
Qismo::Collection.new(
|
437
|
+
Qismo::Objects::User.from_array(get("/api/v1/admin/agents/get_by_ids", {"ids[]": agent_ids}).data)
|
438
|
+
)
|
322
439
|
end
|
323
440
|
|
324
441
|
# List agents by divisions
|
@@ -326,19 +443,20 @@ module Qismo
|
|
326
443
|
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#94eeb9cb-dd70-4baf-9f63-361e7922299a
|
327
444
|
# @param division_ids [Array<Integer>]
|
328
445
|
# @param options [Hash]
|
329
|
-
# @return [Qismo::
|
330
|
-
def agents_by_divisions(division_ids,
|
331
|
-
body = get("/api/v2/admin/agents/by_division",
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
446
|
+
# @return [Qismo::Collection<Qismo::Objects::User>]
|
447
|
+
def agents_by_divisions(division_ids, page: 1, limit: 10, available: nil, sort: "asc")
|
448
|
+
body = get("/api/v2/admin/agents/by_division", {
|
449
|
+
"division_ids[]": division_ids,
|
450
|
+
page: page,
|
451
|
+
limit: limit,
|
452
|
+
is_available: available,
|
453
|
+
sort: sort
|
454
|
+
})
|
455
|
+
|
456
|
+
Qismo::Collection.new(
|
457
|
+
Qismo::Objects::User.from_array(body.data),
|
458
|
+
next_page: ((body.meta.page < body.meta.total_page) ? (body.meta.page + 1) : nil),
|
459
|
+
prev_page: ((body.meta.page > 1) ? (body.meta.page - 1) : nil)
|
342
460
|
)
|
343
461
|
end
|
344
462
|
|
@@ -346,54 +464,96 @@ module Qismo
|
|
346
464
|
#
|
347
465
|
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#c6184a6b-ba4d-4f3e-a4da-c6d0fa4597af
|
348
466
|
# @param agent_id [Integer]
|
349
|
-
# @return [Qismo::
|
350
|
-
def agent(agent_id)
|
351
|
-
get("/api/v2/admin/agent/#{agent_id}").data.agent
|
467
|
+
# @return [Qismo::Objects::User]
|
468
|
+
def agent(agent_id:)
|
469
|
+
Qismo::Objects::User.new(get("/api/v2/admin/agent/#{agent_id}").data.agent)
|
352
470
|
end
|
353
471
|
|
354
472
|
# Get office hour config
|
355
473
|
#
|
356
474
|
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#6f3f0cb0-a391-4945-b01a-95ce81138913
|
357
|
-
# @return [Qismo::
|
475
|
+
# @return [Qismo::Objects::OfficeHour]
|
358
476
|
def office_hours
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
SingleObject.new(data_hash)
|
477
|
+
Qismo::Objects::OfficeHour.new(
|
478
|
+
get("/api/v1/admin/office_hours").data
|
479
|
+
)
|
364
480
|
end
|
365
481
|
|
366
482
|
# List WA broadcast templates
|
367
483
|
#
|
368
484
|
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#e38d2244-9559-4015-99d5-8c707f6c01bd
|
369
485
|
# @param options [Hash]
|
370
|
-
# @return [Qismo::
|
371
|
-
def wa_broadcast_templates(
|
372
|
-
body = get("/api/v3/admin/hsm",
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
body.data.hsm_templates,
|
380
|
-
next_page:
|
381
|
-
prev_page:
|
382
|
-
next_func: -> { wa_broadcast_templates(options.merge(page: next_page)) },
|
383
|
-
prev_func: -> { wa_broadcast_templates(options.merge(page: prev_page)) }
|
486
|
+
# @return [Qismo::Collection<Qismo::Objects::HsmTemplate>]
|
487
|
+
def wa_broadcast_templates(page: 1, limit: 10, approved: nil)
|
488
|
+
body = get("/api/v3/admin/hsm", {
|
489
|
+
page: page,
|
490
|
+
limit: limit,
|
491
|
+
approved: approved
|
492
|
+
})
|
493
|
+
|
494
|
+
Qismo::Collection.new(
|
495
|
+
Qismo::Objects::HsmTemplate.from_array(body.data.hsm_templates),
|
496
|
+
next_page: ((body.meta.page < body.meta.total_page) ? (body.meta.page + 1) : nil),
|
497
|
+
prev_page: ((body.meta.page > 1) ? (body.meta.page - 1) : nil)
|
384
498
|
)
|
385
499
|
end
|
386
500
|
|
387
501
|
alias_method :wa_message_templates, :wa_broadcast_templates
|
388
502
|
alias_method :wa_outbound_templates, :wa_broadcast_templates
|
389
503
|
|
504
|
+
# Get Whatsapp channel credit info
|
505
|
+
#
|
506
|
+
# @return [Qismo::Objects::WaCreditInfo]
|
507
|
+
def wa_credit
|
508
|
+
Qismo::Objects::WaCreditInfo.new(
|
509
|
+
get("/api/v2/admin/wa_pricing/balance").data
|
510
|
+
)
|
511
|
+
end
|
512
|
+
|
390
513
|
# Send WA outbound message
|
391
514
|
#
|
392
515
|
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#d0183cf6-deca-439b-aff3-2e2f007c15a9
|
393
|
-
# @param
|
394
|
-
# @
|
395
|
-
|
396
|
-
|
516
|
+
# @param phone_number [String]
|
517
|
+
# @param channel_id [Integer]
|
518
|
+
# @param template_name [String]
|
519
|
+
# @param namespace [String]
|
520
|
+
# @param language [String]
|
521
|
+
# @param template_detail_id [Integer]
|
522
|
+
# @param variables [Array<String>]
|
523
|
+
# @param button_params [Array<Hash>]
|
524
|
+
# @param header_value [Hash]
|
525
|
+
# @return [Qismo::Objects::BroadcastJob]
|
526
|
+
def send_wa_outbound(
|
527
|
+
phone_number:,
|
528
|
+
template_detail_id: nil,
|
529
|
+
channel_id: nil,
|
530
|
+
template_name: nil,
|
531
|
+
namespace: nil,
|
532
|
+
language: nil,
|
533
|
+
variables: [],
|
534
|
+
button_params: nil,
|
535
|
+
header_value: nil
|
536
|
+
)
|
537
|
+
if template_detail_id.nil?
|
538
|
+
raise ArgumentError, ":channel_id is required if you dont use :template_detail_id" if channel_id.nil?
|
539
|
+
raise ArgumentError, ":template_name is required if you dont use :template_detail_id" if template_name.nil?
|
540
|
+
raise ArgumentError, ":namespace is required if you dont use :template_detail_id" if namespace.nil?
|
541
|
+
raise ArgumentError, ":language is required if you dont use :template_detail_id" if language.nil?
|
542
|
+
end
|
543
|
+
|
544
|
+
body = post("/api/v3/admin/broadcast/client", {
|
545
|
+
phone_number: phone_number,
|
546
|
+
template_detail_id: template_detail_id,
|
547
|
+
channel_id: channel_id,
|
548
|
+
template_name: template_name,
|
549
|
+
namespace: namespace,
|
550
|
+
language: language,
|
551
|
+
variables: variables,
|
552
|
+
button_params: button_params,
|
553
|
+
header_value: header_value
|
554
|
+
})
|
555
|
+
|
556
|
+
Qismo::Objects::BroadcastJob.new(body.data)
|
397
557
|
end
|
398
558
|
|
399
559
|
# Upload wa broadcast file that want to be sent in broadcast
|
@@ -401,41 +561,82 @@ module Qismo
|
|
401
561
|
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#030acde2-21cf-4373-8d11-075206053c1d
|
402
562
|
# @param file [HTTP::FormData]
|
403
563
|
# @param template_detail_id [Integer]
|
404
|
-
# @return [
|
405
|
-
def upload_wa_broadcast_csv(file
|
564
|
+
# @return [Integer]
|
565
|
+
def upload_wa_broadcast_csv(file:, template_detail_id:, separator: ",")
|
406
566
|
raise ArgumentError, "Invalid file" unless file.is_a?(HTTP::FormData::File)
|
407
567
|
|
408
|
-
post_upload("/api/v3/admin/broadcast/upload_csv",
|
568
|
+
body = post_upload("/api/v3/admin/broadcast/upload_csv", {
|
569
|
+
file: file,
|
570
|
+
template_detail_id: template_detail_id,
|
571
|
+
separator: separator
|
572
|
+
})
|
573
|
+
|
574
|
+
body.broadcast_file_id
|
409
575
|
end
|
410
576
|
|
411
|
-
# Send
|
577
|
+
# Send WA broadcast
|
412
578
|
#
|
413
579
|
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#717c1a12-facb-4945-aed5-04557696b873
|
414
|
-
# @param
|
415
|
-
# @
|
416
|
-
|
417
|
-
|
580
|
+
# @param file [HTTP::FormData::File,Integer]
|
581
|
+
# @param template_detail_id [Integer]
|
582
|
+
# @param name [String]
|
583
|
+
# @param separator [String]
|
584
|
+
# @param started_at [Time]
|
585
|
+
# @return [Qismo::Objects::BroadcastJob]
|
586
|
+
def send_wa_broadcast(file:, template_detail_id:, name: nil, separator: ",", started_at: nil)
|
587
|
+
if name.blank?
|
588
|
+
name = default_broadcast_name
|
589
|
+
end
|
590
|
+
|
591
|
+
if started_at.present? && !started_at.is_a?(Time)
|
592
|
+
unless started_at.is_a?(Time)
|
593
|
+
raise ArgumentError, "You must past :Time class for this parameter"
|
594
|
+
end
|
595
|
+
|
596
|
+
unless started_at.utc_offset == 0
|
597
|
+
raise ArgumentError, "You must set your timezone to UTC"
|
598
|
+
end
|
599
|
+
end
|
600
|
+
|
601
|
+
file_id = if file.is_a?(HTTP::FormData::File)
|
602
|
+
upload_wa_broadcast_csv(file, template_detail_id, separator: separator)
|
603
|
+
else
|
604
|
+
file.to_i
|
605
|
+
end
|
606
|
+
|
607
|
+
Qismo::Objects::BroadcastJob.new(
|
608
|
+
post("/api/v3/admin/broadcast/send_broadcast", {
|
609
|
+
broadcast_file_id: file_id,
|
610
|
+
name: name,
|
611
|
+
separator: separator,
|
612
|
+
started_at: started_at,
|
613
|
+
template_detail_id: template_detail_id
|
614
|
+
}).data.broadcast_job
|
615
|
+
)
|
418
616
|
end
|
419
617
|
|
420
618
|
alias_method :create_wa_broadcast, :send_wa_broadcast
|
421
619
|
|
422
|
-
# List
|
620
|
+
# List WA broadcast jobs
|
423
621
|
#
|
424
|
-
# @
|
425
|
-
# @param
|
426
|
-
# @
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
622
|
+
# @param page [Integer]
|
623
|
+
# @param limit [Integer]
|
624
|
+
# @param cursor_after [Integer]
|
625
|
+
# @param cursor_before [Integer]
|
626
|
+
# @param name [String]
|
627
|
+
# @return [Qismo::Collection<Qismo::Objects::BroadcastJob>]
|
628
|
+
def wa_broadcast_jobs(limit: 10, cursor_after: nil, cursor_before: nil, name: nil)
|
629
|
+
body = get("/api/v2/admin/broadcast_jobs", {
|
630
|
+
limit: limit,
|
631
|
+
cursor_after: cursor_after,
|
632
|
+
cursor_before: cursor_before,
|
633
|
+
name: name
|
634
|
+
})
|
635
|
+
|
636
|
+
Qismo::Collection.new(
|
637
|
+
Qismo::Objects::BroadcastJob.from_array(body.data.broadcast_jobs),
|
638
|
+
next_page: body.meta.cursor_after,
|
639
|
+
prev_page: body.meta.cursor_before
|
439
640
|
)
|
440
641
|
end
|
441
642
|
|
@@ -443,9 +644,11 @@ module Qismo
|
|
443
644
|
#
|
444
645
|
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#ed0806c8-2e4a-4ea4-8acb-45c84c63c2da
|
445
646
|
# @param broadcast_job_id [Integer]
|
446
|
-
# @return [Qismo::
|
447
|
-
def wa_broadcast_job(broadcast_job_id)
|
448
|
-
|
647
|
+
# @return [Qismo::Objects::BroadcastJob]
|
648
|
+
def wa_broadcast_job(broadcast_job_id:)
|
649
|
+
Qismo::Objects::BroadcastJob.new(
|
650
|
+
get("/api/v2/admin/broadcast_jobs/#{broadcast_job_id}").data.broadcast_job
|
651
|
+
)
|
449
652
|
end
|
450
653
|
|
451
654
|
# List wa broadcast logs
|
@@ -453,30 +656,46 @@ module Qismo
|
|
453
656
|
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#3f2d8ba8-ab14-43b2-af82-74c8b766216f
|
454
657
|
# @param broadcast_job_id [Integer]
|
455
658
|
# @param options [Hash]
|
456
|
-
# @return [Qismo::
|
457
|
-
def wa_broadcast_logs(broadcast_job_id,
|
458
|
-
body = get("/api/v2/admin/broadcast_logs/#{broadcast_job_id}",
|
659
|
+
# @return [Qismo::Collection<Qismo::Objects::BroadcastLog>]
|
660
|
+
def wa_broadcast_logs(broadcast_job_id:, page: 1, limit: 10)
|
661
|
+
body = get("/api/v2/admin/broadcast_logs/#{broadcast_job_id}", {
|
662
|
+
page: page,
|
663
|
+
limit: limit
|
664
|
+
})
|
459
665
|
|
460
666
|
prev_page = (body.meta.page > 1) ? (body.meta.meta - 1) : nil
|
461
667
|
next_page = (body.meta.page < body.meta.total_page) ? (body.meta.page + 1) : nil
|
462
668
|
|
463
|
-
|
464
|
-
body.data.broadcast_logs,
|
669
|
+
Qismo::Collection.new(
|
670
|
+
Qismo::Objects::BroadcastLog.from_array(body.data.broadcast_logs),
|
465
671
|
next_page: next_page,
|
466
|
-
prev_page: prev_page
|
467
|
-
next_func: -> { wa_broadcast_logs(options.merge(page: next_page)) },
|
468
|
-
prev_func: -> { wa_broadcast_jobs(options.merge(page: prev_page)) }
|
672
|
+
prev_page: prev_page
|
469
673
|
)
|
470
674
|
end
|
471
675
|
|
472
676
|
# Send message as bot
|
473
677
|
#
|
474
678
|
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#bb77c653-5daa-4e1c-a866-43bca7c494fc
|
475
|
-
# @param
|
679
|
+
# @param room_id [Integer]
|
680
|
+
# @param message [String]
|
681
|
+
# @param type [String]
|
682
|
+
# @param payload [Hash]
|
683
|
+
# @param extras [Hash]
|
476
684
|
# @return [TrueClass]
|
477
|
-
def send_bot_message(room_id,
|
478
|
-
|
479
|
-
|
685
|
+
def send_bot_message(room_id:, message:, type: "text", payload: {}, extras: {})
|
686
|
+
body = post("/#{app_id}/bot", {
|
687
|
+
sender_email: admin_email,
|
688
|
+
room_id: room_id.to_s,
|
689
|
+
message: message,
|
690
|
+
type: type,
|
691
|
+
payload: payload,
|
692
|
+
extras: extras
|
693
|
+
})
|
694
|
+
|
695
|
+
if body != "ok"
|
696
|
+
raise Qismo::BadRequestError.new(body.to_s, status_code: 400, response_body: body.to_s)
|
697
|
+
end
|
698
|
+
|
480
699
|
true
|
481
700
|
end
|
482
701
|
|
@@ -485,7 +704,7 @@ module Qismo
|
|
485
704
|
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#494d825f-a49c-4b18-954e-eaaccb738bcd
|
486
705
|
# @param room_id [Integer]
|
487
706
|
# @return [TrueClass]
|
488
|
-
def enable_bot_in_room(room_id)
|
707
|
+
def enable_bot_in_room(room_id:)
|
489
708
|
post("/bot/#{room_id}/activate", is_active: true)
|
490
709
|
true
|
491
710
|
end
|
@@ -495,7 +714,7 @@ module Qismo
|
|
495
714
|
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#494d825f-a49c-4b18-954e-eaaccb738bcd
|
496
715
|
# @param room_id [Integer]
|
497
716
|
# @return [TrueClass]
|
498
|
-
def disable_bot_in_room(room_id)
|
717
|
+
def disable_bot_in_room(room_id:)
|
499
718
|
post("/bot/#{room_id}/activate", is_active: false)
|
500
719
|
true
|
501
720
|
end
|
@@ -505,20 +724,40 @@ module Qismo
|
|
505
724
|
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#40867e85-7412-4e0d-84bd-e2506df23df8
|
506
725
|
# @param room_id [Integer]
|
507
726
|
# @return [TrueClass]
|
508
|
-
def handover_room_from_bot(room_id)
|
509
|
-
post
|
727
|
+
def handover_room_from_bot(room_id:)
|
728
|
+
request(:post, "/#{app_id}/bot/#{room_id}/hand_over", headers: {
|
729
|
+
Authorization: secret_key
|
730
|
+
})
|
731
|
+
|
510
732
|
true
|
511
733
|
end
|
512
734
|
|
513
735
|
# Handover room from chatbot to human agent in specific divisions
|
514
736
|
#
|
515
|
-
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#8218db08-9753-4d74-ae5f-0ee62f8579b9
|
737
|
+
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#8218db08-9753-4d74-ae5f-0ee62f8579b9# <Description>
|
738
|
+
#
|
516
739
|
# @param room_id [Integer]
|
517
|
-
# @param roles [Array<Integer>]
|
518
|
-
# @param
|
519
|
-
# @return [TrueClass]
|
520
|
-
def handover_room_from_bot_to_division(room_id
|
521
|
-
|
740
|
+
# @param roles [Integer,Array<Integer>]
|
741
|
+
# @param find_online_agent [TrueClass,FalseClass]
|
742
|
+
# @return [TrueClass,FalseClass]
|
743
|
+
def handover_room_from_bot_to_division(room_id:, roles:, find_online_agent: true)
|
744
|
+
options = {}
|
745
|
+
options[:room_id] = room_id.to_s
|
746
|
+
options[:find_online_agent] = find_online_agent
|
747
|
+
|
748
|
+
if roles.is_a?(Array)
|
749
|
+
options[:roles] = roles
|
750
|
+
else
|
751
|
+
options[:role] = roles
|
752
|
+
end
|
753
|
+
|
754
|
+
request(
|
755
|
+
:post,
|
756
|
+
"/#{app_id}/bot/#{room_id}/hand_over_to_role",
|
757
|
+
headers: {Authorization: secret_key},
|
758
|
+
json: options
|
759
|
+
)
|
760
|
+
|
522
761
|
true
|
523
762
|
end
|
524
763
|
|
@@ -527,95 +766,88 @@ module Qismo
|
|
527
766
|
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#d5a555de-59e0-4705-9582-c216d79e9390
|
528
767
|
# @param user_id [String]
|
529
768
|
# @param name [String]
|
530
|
-
# @param
|
531
|
-
# @
|
532
|
-
|
533
|
-
|
534
|
-
|
769
|
+
# @param nonce [String]
|
770
|
+
# @param channel_id [Integer]
|
771
|
+
# @param extras [Hash]
|
772
|
+
# @param reset_extras [TrueClass,FalseClass]
|
773
|
+
# @param room_badge [String]
|
774
|
+
# @param avatar [String]
|
775
|
+
# @param allocate_agent [TrueClass,FalseClass]
|
776
|
+
# @param user_properties [Hash]
|
777
|
+
# @param sdk_user_extras [Hash]
|
778
|
+
# @param timezone_offset [String]
|
779
|
+
# @param notes [String]
|
780
|
+
# @param phone_number [String]
|
781
|
+
# @param email [String]
|
782
|
+
# @return [Qismo::Objects::CustomerRoom]
|
783
|
+
def initiate_widget_chat(user_id:, name:, nonce: nil, channel_id: nil, extras: nil, reset_extras: false, room_badge: nil, avatar: nil, allocate_agent: nil, user_properties: nil, sdk_user_extras: nil, timezone_offset: nil, notes: nil, phone_number: nil, email: nil)
|
784
|
+
options = {
|
785
|
+
user_id: user_id,
|
786
|
+
name: name,
|
787
|
+
nonce: nonce,
|
788
|
+
channel_id: channel_id,
|
789
|
+
extras: extras,
|
790
|
+
reset_extras: reset_extras,
|
791
|
+
room_badge: room_badge,
|
792
|
+
avatar: avatar,
|
793
|
+
allocate_agent: allocate_agent,
|
794
|
+
user_properties: user_properties,
|
795
|
+
sdk_user_extras: sdk_user_extras,
|
796
|
+
timezone_offset: timezone_offset,
|
797
|
+
notes: notes,
|
798
|
+
phone_number: phone_number,
|
799
|
+
email: email
|
800
|
+
}.compact
|
801
|
+
|
802
|
+
Qismo::Objects::CustomerRoom.new(post("/api/v2/qiscus/initiate_chat", options).data.customer_room)
|
535
803
|
end
|
536
804
|
|
537
805
|
alias_method :initiate_chat, :initiate_widget_chat
|
538
806
|
|
539
|
-
# Send
|
807
|
+
# Send messsage to custom channel
|
540
808
|
#
|
541
809
|
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#aee54b21-68f1-4d31-9d81-d3c73b3e125b
|
542
810
|
# @param identifier_key [String]
|
543
811
|
# @param user_id [String]
|
544
812
|
# @param name [String]
|
545
|
-
# @param
|
546
|
-
# @
|
547
|
-
|
548
|
-
|
549
|
-
|
813
|
+
# @param message [String]
|
814
|
+
# @param avatar [String]
|
815
|
+
# @param type [String]
|
816
|
+
# @param payload [Hash]
|
817
|
+
# @param extras [Hash]
|
818
|
+
# @return [Qismo::Objects::CustomChannelMessageResponse]
|
819
|
+
def send_message_to_custom_channel(
|
820
|
+
identifier_key:,
|
821
|
+
user_id:,
|
822
|
+
name:,
|
823
|
+
message:,
|
824
|
+
avatar: nil,
|
825
|
+
type: "text",
|
826
|
+
payload: {},
|
827
|
+
extras: {}
|
828
|
+
)
|
829
|
+
Qismo::Objects::CustomChannelMessageResponse.new(
|
830
|
+
post("/#{app_id}/api/v2/custom_channel/send", {
|
831
|
+
identifier_key: identifier_key,
|
832
|
+
user_id: user_id,
|
833
|
+
name: name,
|
834
|
+
message: message,
|
835
|
+
avatar: avatar,
|
836
|
+
type: type,
|
837
|
+
payload: payload,
|
838
|
+
extras: extras
|
839
|
+
}).data
|
840
|
+
)
|
550
841
|
end
|
551
842
|
|
552
843
|
# List integrated channels
|
553
844
|
#
|
554
845
|
# @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#aee54b21-68f1-4d31-9d81-d3c73b3e125b
|
555
|
-
# @return [Qismo::
|
846
|
+
# @return [Qismo::Objects::ListChannelsResponse]
|
556
847
|
def channels
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
# Create customchannel
|
561
|
-
#
|
562
|
-
# @param identifier_key [String]
|
563
|
-
# @param name [String]
|
564
|
-
# @param webhook_url [String]
|
565
|
-
# @param options [Hash]
|
566
|
-
# @return [Qismo::SingleObject]
|
567
|
-
def create_custom_channel(identifier_key, name, webhook_url, options = {})
|
568
|
-
options = options.merge(
|
569
|
-
identifier_key: identifier_key,
|
570
|
-
name: name,
|
571
|
-
webhook_url: webhook_url
|
848
|
+
Qismo::Objects::ListChannelsResponse.new(
|
849
|
+
get("/api/v2/channels").data
|
572
850
|
)
|
573
|
-
|
574
|
-
options[:is_active] = true unless options[:is_active].nil?
|
575
|
-
|
576
|
-
post("/api/v1/custom_channel/connect", options.merge).data
|
577
|
-
end
|
578
|
-
|
579
|
-
# Update custom channel
|
580
|
-
#
|
581
|
-
# @param id [Integer]
|
582
|
-
# @param options [Hash]
|
583
|
-
# @return [Qismo::SingleObject]
|
584
|
-
def update_custom_channel(id, options = {})
|
585
|
-
channel = channels.custom_channels.find { |cc| cc.id == id }
|
586
|
-
if channel.nil?
|
587
|
-
raise Qismo::NotFoundError.new("Channel not found", status_code: 404, response_body: nil)
|
588
|
-
end
|
589
|
-
|
590
|
-
channel_hash = JSON.parse(channel.to_json, symbolize_names: true)
|
591
|
-
new_channel_config = channel_hash.merge(options)
|
592
|
-
|
593
|
-
post("/api/v1/custom_channel/connect/update", new_channel_config).data
|
594
|
-
end
|
595
|
-
|
596
|
-
# Activate custom channel
|
597
|
-
#
|
598
|
-
# @param id [Integer]
|
599
|
-
# @return [Qismo::SingleObject]
|
600
|
-
def activate_custom_channel(id)
|
601
|
-
update_custom_channel(id, is_active: true)
|
602
|
-
end
|
603
|
-
|
604
|
-
# Deactivate custom channel
|
605
|
-
#
|
606
|
-
# @param id [Integer]
|
607
|
-
# @return [Qismo::SingleObject]
|
608
|
-
def deactivate_custom_channel(id)
|
609
|
-
update_custom_channel(id, is_active: false)
|
610
|
-
end
|
611
|
-
|
612
|
-
# Delete custom channel
|
613
|
-
#
|
614
|
-
# @param id [Integer]
|
615
|
-
# @return [TrueClass]
|
616
|
-
def delete_custom_channel(id)
|
617
|
-
post("/api/v2/custom_channel/connect/#{id}/delete")
|
618
|
-
true
|
619
851
|
end
|
620
852
|
end
|
621
853
|
end
|