qismo 0.13.0 → 0.15.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/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
|